我正在为房地产和住宅数据库创建数据库。
这是要求。
所有者可以拥有许多财产。
一个财产可以有很多所有者(与配偶,亲戚等共同拥有所有权)
所以我有一个关联表,因为所有者-财产是多对多关系。
Owner_Property
第一个属性:所有者ID(从FK到所有者表)
第二个属性:属性批次ID(从FK到属性表)
确定了这一点之后,我还需要存储有关特定所有者在相关物业中呆了几个月的信息。
因此,我想到了创建另一个关联实体Duration_of_stay_at_Property
,其中第一个属性为month_id
,另一个属性将链接回Owner_property
表,通过Fk到组合键或一个主键,必须在Owner_property
表中创建。
您对PK /综合决定有何建议? 您想对设计提出任何建议吗?
答案 0 :(得分:1)
...需要存储有关特定所有者在哪个月份停留在相关属性 ...
上的信息
这句话公开地表明您需要一个具有三列组合键的新实体。像这样的东西:
dwelling (month, owner_id (FK), property_id (FK))
有时,当您有与dwelling
相关的额外实体时,则可以在其中添加额外的单列PK,请记住,您还需要保留主要的唯一约束。像这样:
dwelling (dwelling_id, month, owner_id (FK), property_id (FK))
+ constraint unique (month, owner_id, property_id)
答案 1 :(得分:1)
我将寻求以下解决方案:
在表Owner_Property
将Duration_of_stay_at_Property
链接到Owner_Property
的主键(以及其他信息,例如住宿月份)
背后的原理:
在大多数表中使用主键通常是一个好习惯
主键将消除对Duration_of_stay_at_Property
上的复合foregin键的需要(没有主键,您需要两列才能关联到Owner_Property
中的一行)
答案 2 :(得分:1)
您似乎想要“主人留下”的关系。我将假定关系始终与所有者拥有的财产(而不是任何旧财产)有关。也就是说,这可能不包括所有时间范围,因为所有者还可能撕裂属性。
因此,这建议使用类似staying
的表,并具有以下属性:
这表明您希望在owner/
property`关系上使用单列主键。
答案 3 :(得分:1)
我建议所有权(许多:所有者与财产之间的许多映射)与谁在何时何地无关。制作两个表。
owner_property表应具有两列(没有auto_increment); PK应该同时具有两列,并且您可能需要索引以相反的顺序排列。 More discussion and tips
另一个表将具有相同的两列,并与占用时间(或时间范围)有关。 PK和辅助索引将取决于您希望执行的查询。如果没有人住在某个特定的属性中,则该属性将没有行。繁忙的媒体资源可能有数千行-与所有权表没有关系。
(好的,我几乎是在说其他答案说的话。)