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

一对一关系还是一对多?

  •  0
  • Mike  · 技术社区  · 16 年前

    也许今天早上我需要更多的咖啡,但现在…

    我有一个非常简单的库存系统。现在我有两张表:项目和库存。

    项目
    身份证件
    书名
    年份公布

    库存
    身份证件
    itemID(项的外键)
    数量
    定量手

    每个项目有一个库存,每个库存属于一个项目。两者之间的关系是一对一的。但是,当我画出这个图表时,基于我的设置的关系到目前为止是一对多的,这是由于我拥有的库存自动递增的ID。

    现在,我可以通过消除清单表中的自动递增ID来实现一对一,但这会让我感觉很不舒服。我总是使用内部ID作为主键。

    我看到一些选择:

    1.)删除“库存”中的“自动递增ID”字段,以脏的感觉生活。
    2.)保持桌子的原样。
    3.)将项目和库存合并到一个表中:items inventory。
    4.)还有别的吗?

    7 回复  |  直到 10 年前
        1
  •  1
  •   user359040    16 年前

    如果您确定映射始终为1:1,那么将两个表合并为一个表。

    但是,你确定这段关系会一直是1:1吗?

        2
  •  7
  •   Damir Sudarevic    10 年前

    如果您的关系真的是一对一的关系,请从库存表中除去ID,并使用itemID作为pk和fk。另外,将这两个键都命名为itemID--帮助。

    帮助。

    inventory_model

        3
  •  1
  •   D'Arcy Rittich    16 年前

    由于许多ORM需要一个自动增量pk,因此我将:

    4)向添加唯一索引 Inventory.ItemId 它应该表现为一对一的关系。

        4
  •  0
  •   Mark B    16 年前

    使itemID具有唯一的约束是否不够?这似乎满足了你的要求。

        5
  •  0
  •   ovais.tariq    16 年前

    如果您所提到的表结构将保持现状,那么我认为您应该将项目和库存合并到一个表中:items inventory。

    对于如此小的表,垂直地划分它们是没有意义的。这样您就可以删除一个额外的连接。在单个表上选择总是比联接更快。

        6
  •  0
  •   SimonGates    16 年前

    我会把这两个表合并在一起,我的主要原因是您将有重复的数据 如果你坚持使用两个表的话,还有不必要的数据。查询也会更快!看看这两张桌子,我肯定会合并成一张。

    项目 身份证件 书名 年份公布

    库存 身份证件 itemID(项的外键) 数量 定量手

    如果合并到一个表中,您将少有两列数据(可以删除id“itemid”)。编写逻辑以检索数据并将数据发送到数据库对您来说也更容易。

    我要这张桌子:

    **ItemsInventory**
    Id
    Title
    YearReleased 
    Quantity
    QuantityOnHand 
    

    但是,你必须确定这是一个,否则你可能会给自己很多工作,如果业务需要改变。

    西蒙

        7
  •  0
  •   JeffO    16 年前

    如果您真的想使它成为一个简单的库存系统,那么合并表。

    不合并表的原因并不简单。

    有多少项没有库存记录?您的示例只显示了一些库存字段,也许这就是它所拥有的全部内容。但是,如果你在库存中跟踪的字段不断增长,并且有很大一部分项目不在库存中,那么你将有很多空字段。

    多久更新一次库存?如果这些字段是经常更新其他交易记录表(采购和销售)的结果,则没有理由仅仅因为库存是采购或销售的,而不断更新物料表。在您当前的系统中,用户希望这些值是实时的(如果不是,那么他们知道什么不是最新的,因为他们没有进行更改)。