2012-11-22 32 views
3

我是數據庫設計的新手,我在查找有關如何定義「多對一」關係的信息時遇到了一些問題。我可以找到關於「一對多」和「多對多」的各種信息,但對「多對一」沒有任何信息。我的掛斷是如何存儲數據。我所擁有的是一個名爲「類別」的表格,然後我有另一個名爲「庫存」的表格,每個「庫存」項目可以屬於多個「類別」。MySql「多對一」桌面設計

如何在單個「庫存」行中存儲多個「類別」?我是否應該有一個存儲「類別」ID和相應的「庫存」ID的中間表?或者添加類似JSON字符串的「Inventory」行中的「Categories」ID是否是正確的方法?或者有沒有辦法在「庫存」行中存儲「類別」ID的數組?

感謝分配的幫助!

回答

4

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) 
); 
3

「多對一」只是「一對多」從另一端來看待。

只需在Categories表中添加一列inventory_id即可。

如果不僅每個「庫存」項目可以屬於多個「類別」,而且每個「類別」項目可以屬於多個「庫存」項目,而不是您擁有需要的多對多關係中間表與category_idinventory_id

4

首先我建議你下載mysql workbench - 它給你一個很好的可視化db設計模式,這樣你就可以看到事物如何掛在一起(爲你創建外鍵關係等)。

在這種情況下,這實際上是一個多對多的關係。因此您需要一個類別表,一個庫存表和一個category_has_inventory表(或inventory_has_category,具體取決於語義),您可以在其中存儲每個元組中的庫存和類別的id - 當使用many-to時,workbench甚至會爲您創建此表多種關係工具。

如果您需要進一步的幫助,請回到這裏。

如果一個類別只能包含一個庫存項目,那麼您可以通過將inventory_id添加到類別表格來創建一對多關係,但這對我來說聽起來是錯誤的。

+0

謝謝伊恩......這正是我一直在尋找......我不知道,這是一個「多對多」的關係......我只是想着一排不是整個桌子......再次感謝! –

+0

如果一個廣告資源可能出現在多個類別中,並且某個類別可以顯示多個廣告資源(這是我認爲您實際需要的),那麼這是一種多對多的關係。如果某個類別可以包含一個且僅包含一個廣告資源(我腦海中的類別不多),那麼您應將廣告資源ID存儲在相應類別的類別表中。 –