代码之家  ›  专栏  ›  技术社区  ›  Asad

基本数据库设计。使用另一张桌子或柱子

  •  2
  • Asad  · 技术社区  · 15 年前

    我有一个表,它保存关于某个特定对象的信息,比如 并且有专栏

    ItemID、ItemName、price、, ItemListingType …最后订购日期

    其中一点信息, ItemListingType 可能是10种不同类型中的一种 例如:

    我应该在表中使用列吗 或者我应该使用一个具有两列的单独表,并在Item表中放置一个外键来引用该表(一对多关系)?比如:

    • ListingTypeID int

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

    谢谢

    6 回复  |  直到 14 年前
        1
  •  8
  •   Bill Karwin    15 年前

    使用单独的表存储此类参考数据。这是规范化的一个原则,并且还可以实现更轻松的缓存,因为您正在分离只读和读写数据。我的两分钱。。。

        2
  •  3
  •   gbn    15 年前

    • 如果您的列表类型尚未使用,该怎么办?
    • 或删除类型为x的最后一项?

    这些是 insert, update and delete anomalies ,这是正常化的原因之一

        3
  •  2
  •   davek    15 年前

        4
  •  2
  •   Gabriele Petrioli    15 年前

    您应该使用包含ListingTypes的第二个表执行此操作,并从包含对象的表链接到该表的id。。。

    看看 Relational Database Relational model .

        5
  •  1
  •   ChrisLively    15 年前

    在这种情况下,我问自己: 该项目是否可以有未确定数量的列表类型?如果是,请选择其他表格。

    说明书上有没有说永远不会有超过3种类型?视情况而定。有时候我还是会选择单独的桌子,有时候不会。过了一段时间你就会有这种感觉。

    项目是否始终具有单一的列表类型?如果是,则为同一表格,单列。


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

        6
  •  0
  •   noio    15 年前

    原则上,您应该使用一个额外的表,因为这样不会有任何重复。它还允许您在单个位置更改此列表的值。但是,如果您非常确定不会添加任何类型,请保留该列。