MySql“多对一”表设计

And*_*ham 4 mysql database-design database-schema

我是数据库设计的新手,在查找有关如何定义“多对一”关系的信息时遇到了一些麻烦。我可以在“一对多”和“多对多”中找到各种信息,而在“多对一”中则找不到任何信息。我的难题是如何存储数据。我有一个表叫做“类别”,然后我有另一个表叫做“库存”,每个“库存”项目都可以属于多个“类别”。

如何在一个“库存”行中存储多个“类别”?我是否应该有一个中间表来存储“类别” ID和相应的“库存” ID?还是在JSON字符串中添加类似“清单”行中具有“类别” ID的东西是正确的方法?还是有一种方法可以在“库存”行中存储“类别” ID的数组?

感谢分配的帮助!

Ian*_*ood 5

首先,我建议您下载mysql 工作台- 它为您提供了一个很好的可视化数据库设计模式,因此您可以看到事物如何结合在一起(为您创建外键关系等)。

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

如果您需要进一步的帮助,请回到这里。

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


Joh*_*Woo 5

正确的术语Many to OneOne 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)
);
Run Code Online (Sandbox Code Playgroud)