Database design 使用引用FK的PK处理数据库中项目的特定于类别的属性
假设所有Database design 使用引用FK的PK处理数据库中项目的特定于类别的属性,database-design,model,foreign-keys,primary-key,Database Design,Model,Foreign Keys,Primary Key,假设所有Item都有一组共同的属性,如ItemName和itemage 进一步假设您事先知道,项(它们可能重叠)有一些特定的区别,需要特定的列。例如,ToyItem有一个特殊的列MinimumAge,CarItem有一个特殊的列NumWheels 我希望在数据库中按如下方式处理此问题:使用主键创建Item表ItemId。创建ToyItem表,其主键引用Item中的ItemId。创建一个CarItem表,其主键也引用Item中的ItemId 因此,我的问题是: 使用单个外键作为子项表的主键是否合理
Item
都有一组共同的属性,如ItemName
和itemage
进一步假设您事先知道,项
(它们可能重叠)有一些特定的区别,需要特定的列。例如,ToyItem
有一个特殊的列MinimumAge
,CarItem
有一个特殊的列NumWheels
我希望在数据库中按如下方式处理此问题:使用主键创建Item
表ItemId
。创建ToyItem
表,其主键引用Item
中的ItemId
。创建一个CarItem
表,其主键也引用Item
中的ItemId
因此,我的问题是:
项目
?现在我必须提前知道这些是什么这取决于你的需要。特别是关于您计划如何查找数据。 如果您想从
Item
表中通过属性查找任何类型的项,那么您的布局也不是太不合理。我仍然会建议一种不同的策略,这种策略也很容易扩展:
保留您的项
表,只添加一个名为Attr的表。在Attr
中,您可以有两个数据字段,name
和value
以及项的外键。如果需要,您还可以将Attr.name
设置为enum
类型,以便只能将允许的属性添加到项中的主“对象”
另一种方法是为每个子类型(如玩具
或汽车
)创建表格,并将这些表格引用到项目
(而不是反过来)
在任何情况下,您都可以轻松地加入这些表,因此这实际上取决于您。听起来玩具项目和汽车项目都是类项目的子类。见下文
那么您要走哪条路呢?我将坚持每个子类一个表的方法,因为子类不会太多。如果我采用您建议的第一种方法,那么从方案来看,子类的“特殊性”是不清楚的。。。如果这是有道理的话……谢谢,听起来他们描述了相同的“共享主键”方法,所以我感觉好多了