很抱歉,如果这太简单了,但是我是数据库新手。 假设我有一个包含两个表的数据库,一个表用于人员,一个表用于国家。每个人都有一个与之相关的国家。 我想以懒惰的方式将这些表中的项目加载到python对象中。现在,我正在遍历“人员”中的所有行并为它们实例化对象。因此,对于每个“人”,我都有一个对象,现在,如果我要访问与某人相关联的国家/地区,则将获得country_id并实例化一个全新的“国家”实例(即使所有人都具有相同的国家/地区)。例如,如果person1.country为XXX,person2.country为XXX,则对象ID不同
class Person(object):
def __init__(self, id):
self.id = id
def country():
...
country_id = (gets id from db here)
self.country = Country(country_id)
所以我会得到
id(person1.country) -> 123
id(person2.country) -> 456
让两个人共享同一个国家/地区实例的最python方式是什么?
感谢您的帮助
答案 0 :(得分:0)
您可以将Country
实现为单例模式。
尽管我不得不问-为什么重要呢?只要person1.country == person2.country
,为什么还要关心ID是否相同?
答案 1 :(得分:0)
您可以建立多对一关系,其中许多国家都与一个人相关联。人员将具有country_id作为关联国家/地区ID的外键约束。您基本上必须对关联的国家/地区进行查找,并从国家/地区分配正确的ID。对于国家/地区表,您可能需要在表格中预先填写所有已知国家/地区。
在您决定删除国家/地区表中的条目的情况下,约束可防止您拥有不匹配的ID。您可以定义其他属性,例如从表中删除国家或更新国家后如何删除条目。也就是说,您可以在人员表中将country_id设置为null或删除与该国家/地区关联的所有人员。查找外键约束,您应该找到有关各种约束属性的更多材料。如果仍然有与该条目关联的人,则可以将其删除为非法。
CREATE TABLE Person (
id BIGINT NOT NULL,
country_id BIGINT NOT NULL,
etc ...,
PRIMARY KEY(id),
FOREIGN KEY(country_id) REFRENCES Country(id)
)
CREATE TABLE Country(
id BIGINT NOT NULL,
etc..,
)