0

假设有一组所有人共有的属性Item,比如ItemNameItemImage

进一步假设您事先知道会有一些Item需要特定列的特定区别(它们可能重叠)。例如,ToyItem有一个特殊的列MinimumAge并且CarItem有一个特殊的列NumWheels

我想在数据库中按如下方式处理:create Itemtable with a primary key ItemId。创建ToyItem主键 REFERENCESItemId的表Item。创建一个CarItem表,其主键也在 REFERENCESItemIdItem

所以我的问题是:

  1. 使用单个外键作为子项表的主键是否合理?
  2. 是否有另一种设计方法可以跟踪所有不同类型的Item? 现在我必须提前知道这些是什么。
4

2 回答 2

1

这真的取决于你的需求。特别是关于您计划如何查找数据。如果您想通过Item表格中的属性查找任何类型的项目,那么您的布局并不是太不合理。我仍然会建议一个不同的策略,它也很容易扩展:

保留您的Item表并仅添加 1 个名为Attr. 然后,Attr您可以拥有 2 个数据字段,name以及. 如果您愿意,您也可以使用类型,因此只能将允许的属性添加到.valueItemAttr.nameenumItem

另一种方法是为每个子类型设置表,例如ToyorCar并引用这些表Item(而不是相反)。

在任何情况下,您都可以JOIN轻松地使用这些表格,所以这完全取决于您。

于 2013-01-16T08:55:05.313 回答
1

听起来 Toy Items 和 Car Items 是 Items 类的子类。请参阅以下内容

关系型数据库设计多用户类型

于 2013-01-16T12:05:31.823 回答