2

我有一个表,其中包含有关特定对象的信息,说项目并有列

ItemID, ItemName, price, ItemListingType .....LastOrderDate

信息位之一,ItemListingType可以是 10 种不同类型之一,例如:

private、gov、non-gov、business... 等(字符串),将来可以扩展到更多类型。

我应该使用表ITEM中的列还是应该使用包含两列的单独表并在 Item 表中放置一个外键来引用它(一对多关系)?像:

  • 列表类型ID int

  • 列表类型名称 varchar(MAX)

编辑:一列有多少个值,您将考虑为此使用另一个表

2、4还是什么?

谢谢

4

6 回答 6

8

使用单独的表来存储此类参考数据。这是规范化的一个原则,并且还将使缓存更容易,因为您将只读数据和读写数据分开。我的两分钱...

于 2010-01-21T19:49:30.220 回答
3

单独的表。

  • 如果您的列表类型尚未使用怎么办?
  • 或者删除最后一个类型为 x 的项目?
  • 或者需要改变一个值?

这些是插入、更新和删除异常,这是规范化的原因之一

于 2010-01-21T19:50:58.937 回答
2

我肯定会选择“查找”风格的专栏;这样,当将来允许的列表类型列表中添加时,您就不会感到难过。您还可以减少冗余并更容易更改特定列表类型的名称(如果“gov”更改为“政府机构”,那么您只需在一个地方进行更改)。

于 2010-01-21T19:49:15.093 回答
2

您应该使用第二个包含 ListingTypes 的表并从带有 Objects 的表链接到该表的 id...

看看关系数据库关系模型

于 2010-01-21T19:50:39.807 回答
1

在这种情况下,我会问自己:Item 是否有未确定数量的列表类型?如果是,则不同的表。

规格是否说永远不会超过 3 种类型?依靠。有时我还是会选择一张单独的桌子,有时不会。一段时间后你会感觉到这一点。

商品是否总是只有一个列表类型?如果是,同一张表,单列。


现在让事情更进一步。如果一个项目有零个或多个列表类型并且这些列表类型实际上是共享的(换句话说,两个项目可能具有相同的列表类型,那么我们有 3 个表:项目、列表类型和一个支持多对多的交叉引用表关系。

于 2010-01-21T20:18:20.693 回答
0

Clasically,你应该使用一个额外的表,因为你不会有任何重复。它还允许您在一个地方更改此列表的值。但是,如果您非常确定不会添加任何类型,请保留该列。

于 2010-01-21T19:50:26.393 回答