假设我有以下表和关系:数据建模帮助 - 添加其他表格,更改现有表格的用法或其他内容?
Person
- Id (PK)
- Name
一个人可以有0个或更多的宠物:
Pet
- Id (PK)
- PersonId (FK)
- Name
一个人可以有0个或多个属性(如年龄,身高,体重) :
PersonAttribute
_ Id (PK)
- PersonId (FK)
- Name
- Value
问题:我也需要表示宠物属性。事实证明,这些宠物属性在大多数情况下与人的属性相同(例如,宠物也可以具有年龄,身高和体重)。我如何表示宠物属性?
我是否创建PetAttribute表?
PetAttribute
- ID(PK)
- PetId(FK)
- 名称
- 价值
修改我PersonAttribute到GenericAttribute并在其2个外键 - 一个连接到人,另一个连接到宠物?
GenericAttribute
- ID(PK)
- PERSONID(FK)
- PetId(FK)
- 名称
- 价值
注意:如果PERSONID设置,那么PetId没有设置。如果设置了PetId,PersonId没有设置。
做点别的?
这是很好的建议。你需要考虑为什么你需要以通用的方式存储属性。他们真的是动态的吗?用你应该考虑的事情更新我的答案。 – 2010-06-02 08:54:55
@BrockAdams:但是,如果一个人的属性从记录到记录有什么不同呢?例如,对于某个人来说,我们存储的是重量,但并非全部。这会导致记录中有很多空列。这不就是数据库设计不好的标志吗? – StackOverflowNewbie 2010-06-02 09:14:03
@StackOverflowNewbie,不一定。如果属性是固定的,但可能是空的,那就这样吧。当你真正需要支持的是某些列中的空值时,这是比支持动态属性(带有所有问题)更好的解决方案。你有多少物业,更重要的是它们是固定的?这应该是什么决定你的设计恕我直言。 – 2010-06-02 09:21:40