5

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

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

感谢分配的帮助!

4

3 回答 3

7

的正确术语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)
);
于 2012-11-22T16:42:03.803 回答
5

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

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

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

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

于 2012-11-22T16:40:35.990 回答
4

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

inventory_id只需在表格中添加一列Categories

如果不仅每个“库存”项目可以属于多个“类别”,而且每个“类别”项目可以属于多个“库存”项目,那么您就有一个多对多关系,您需要一个中间表category_idinventory_id.

于 2012-11-22T16:40:16.833 回答