我是DB设计的新手,我在寻找如何定义“多对一”关系的信息时遇到了一些麻烦。我可以在“一对多”和“多对多”上找到各种信息,但在“多对一”上找不到任何信息。我的问题是如何存储数据。我有一个名为“类别”的表,然后我有另一个名为“库存”的表,每个“库存”项目可以属于多个“类别”。
如何在一个“库存”行中存储多个“类别”?我是否应该有一个中间表来存储"Categories“ID和相应的"Inventory”ID?或者,在"Inventory“行中添加具有"Categories”ID的JSON字符串是正确的方法吗?或者,有没有办法在“库存”行中存储“类别”ID的数组?
感谢allot的帮助!
发布于 2012-11-23 00:42:04
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)
);
发布于 2012-11-23 00:40:36
首先,我建议你下载mysql workbench -它为你提供了一个很好的可视化数据库设计模式,这样你就可以看到事物是如何挂在一起的(创建外键关系等等)。
在这种情况下,这实际上是一种多对多关系。因此,您将需要一个category表、一个inventory表和一个category_has_inventory表(或inventory_has_category,视语义而定),在每个元组工作台中存储库存和类别的id -甚至在使用多对多关系工具时为您创建此表。
如果你需要进一步的帮助,请回到这里。
如果一个类别只能包含一个库存项目,那么您可以通过将inventory_id添加到category表来创建一对多关系,但在我看来这是错误的。
发布于 2012-11-23 00:40:17
“多对一”只是从另一端看“一对多”。
只需向Categories
表添加一个列inventory_id
即可。
如果不仅每个“库存”项可以属于多个“类别”,而且每个“类别”项也可以属于多个“库存”项,那么您就有了一个多对多关系,为此您需要一个带有category_id
和inventory_id
的中间表。
https://stackoverflow.com/questions/13516839
复制相似问题