发布
社区首页 >问答首页 >MySql“多对一”表设计

MySql“多对一”表设计
EN

Stack Overflow用户
提问于 2012-11-23 00:30:35
回答 3查看 15.5K关注 0票数 5

我是DB设计的新手,我在寻找如何定义“多对一”关系的信息时遇到了一些麻烦。我可以在“一对多”和“多对多”上找到各种信息,但在“多对一”上找不到任何信息。我的问题是如何存储数据。我有一个名为“类别”的表,然后我有另一个名为“库存”的表,每个“库存”项目可以属于多个“类别”。

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

感谢allot的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-23 00:42:04

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

代码语言:javascript
代码运行次数:0
复制
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)
);
票数 7
EN

Stack Overflow用户

发布于 2012-11-23 00:40:36

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

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-11-23 00:40:17

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

只需向Categories表添加一个列inventory_id即可。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13516839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档