我正在用sqlalchemy构建一个postgressql数据库。我想知道是否有可能有这样的结构:
两张由人、人和组织组成的桌子。你知道吗
Table - Person -
person_id, name
1, Jeffery
2, Frank
Table - Org -
org_id, name
a, Pepsi
b, Microsoft
第三个地址表或个人或组织:
Table - Addresses -
address_id, type_of_id, (either person_id or org_id), addresses
1, person, 1, "2 Jeffery way"
2, person, 1, "7 Holland Avenue"
3, org, b, "1 Microsoft way"
4, person, 2, "2 Frank Street"
这对博士后有可能吗?如何将其写入sqlalchemy python代码?你知道吗
更新:
我认为这被称为多态关联,如: Possible to do a MySQL foreign key to one of two possible tables?
我在关系数据库中看到了两种建模方法:
关系表
如果不同的实体可以共享一个地址,这个模型将特别有用。
“穷人的超类”
创建一个表,为person和organization实现一个超类,可能包含所有公共属性:
person
和org
都获得了located_entity
的外键,您还可以通过将located_entity
的外键添加到address
来实现与address
的关系。你知道吗如果您通常按地址而不是按人查找人的地址,则可以考虑在
located_entity
和person
之间添加外键,或者在另一个方向添加org
人的外键,其检查约束与解决方案1类似。你的问题由两部分组成:
第一部分可以使用union\u all来完成。有关详细信息,请访问:
第二部分,添加实体类型(个人/组织)可以使用literal\列实现。有关此项的详细信息:
下面是结合这些元素的简短示例:
改编自:http://www.duanqu.tech/questions/2898814/sqlalchemy-polymorphic-association 和http://docs.sqlalchemy.org/en/latest/orm/inheritance.html
相关问题 更多 >
编程相关推荐