【问题标题】:MySql "Many to One" table designMySql“多对一”表设计
【发布时间】:2012-11-11 02:18:07
【问题描述】:

我是数据库设计的新手,在查找有关如何定义“多对一”关系的信息时遇到了一些麻烦。我可以找到关于“一对多”和“多对多”的各种信息,但没有关于“多对一”的信息。我的挂断是如何存储数据。我有一个名为“Categories”的表,然后我有另一个名为“Inventory”的表,每个“Inventory”项目可以属于多个“Categories”。

如何在单个“库存”行中存储多个“类别”?我是否应该有一个存储“类别”ID 和相应“库存”ID 的中间表?或者在“Inventory”行中添加类似 JSON 字符串的“Categories”ID 是正确的方法吗?或者有没有办法在“Inventory”行中存储一个“Categories”ID 数组?

感谢您的帮助!

【问题讨论】:

    标签: mysql database-design database-schema


    【解决方案1】:

    Many to One 的正确术语是One to Many。只需创建一个这样的表,

    CREATE TABLE Categories
    (
        CategoryID INT Primary KEY,
        CategoryName
    );
    
    CREATE TABLE InventoryList
    (
        ProductID INT Primary KEY,
        CategoryID INT,
        ProductName VARCHAR(50),
        CONSTRAINT tb_fk FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
    );
    

    【讨论】:

    • 嗨,我也是mysql新手,请问tb_fk是什么?我了解 (CategoryID) 字段正在引用 Categories(CategoryID) 的输入
    • @theo123490 这里 tb_fk 是约束的名称。好吧,这可能没有必要。如果省略,Mysql引擎会自动分配。
    【解决方案2】:

    首先我建议你下载mysql workbench - 它为你提供了一个很好的可视化数据库设计模式,这样你就可以看到事情是如何联系在一起的(为你创建外键关系等)。

    在这种情况下,这实际上是一个多对多的关系。因此,您将需要一个类别表、一个库存表和一个 category_has_inventory 表(或inventory_has_category,取决于语义),您将在每个元组中存储库存和类别的 id - 工作台甚至在使用多对时为您创建此表- 多关系工具。

    如果您需要进一步的帮助,请返回此处。

    如果一个类别只能包含一个库存项目,那么您可以通过将 inventory_id 添加到类别表来创建一对多的关系,但这对我来说是错误的。

    【讨论】:

    • 谢谢伊恩...这正是我正在寻找的...我没有意识到这是一个“多对多”的关系...我只是想一排不是整张桌子……再次感谢!
    • 如果一个库存可以出现在多个类别中并且一个类别可以显示多个库存(这是我认为您真正需要的),那么它是多对多的关系。如果一个类别可以包含一个且只有一个库存(在我看来,这不是一个类别),那么您可以将库存 ID 存储在类别表中,针对相应的类别。
    【解决方案3】:

    “多对一”只是从另一端看的“一对多”。

    只需在Categories 表中添加一列inventory_id

    如果不仅每个“Inventory”项目可以属于多个“Categories”,而且每个“Categories”项目也可以属于多个“Inventory”项目,那么您需要一个多对多关系带有category_idinventory_id 的表。

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多