2015-02-24 49 views
0

我試圖實施產品配方(這就是我們的供應商稱之爲),但似乎無法包裝我的頭周圍如何正常正常化。正常化產品配方數據

我已經添加了一些示例數據來說明它的樣子。

以R ***開頭的值是對配方標識符的引用。 數字值是對產品標識符的引用。食譜是產品的分組(不多不少) 配方唯一的屬性是名稱。這應該是產品分組的邏輯名稱。

正如你所看到的產品反過來也可以連接到食譜。 產品可以直接連接到其他產品。

對此的唯一限制是配方(R ***)永遠不能直接連接到另一個配方。所以要明確,產品可以直接連接,但食譜不能。

事實上,一個子項可以有許多不同的父母,這使得我有點模糊。

enter image description here

+0

什麼是文章的含義與一subarticle關聯?如果完全不同於與產品相關的食譜,那麼它又有什麼不同呢? – 2015-02-24 17:05:45

+0

刺傷它。產品從任何子產品或子配方中生產出來。因此,如果產品1有顆粒2,3和R4,R4是由5和6組成的配方,您需要產品2,3,4,5,6來製造產品1? – 2015-02-24 17:08:45

+0

「產生」並不是真正的東西。它不像產品材料清單一樣由xxxx組件組成。它更多地關於你何時購買產品A.這也很好,也購買產品B.產品B補充產品A.在分組的情況下(例如R0001),您可以選擇幾乎相同產品的多種替代品。 – Marc 2015-02-24 18:00:11

回答

0

好吧......想出了以下解決方案,這似乎工作就不錯。

enter image description here

並且如果有人有興趣,這裏是SQL創建:

CREATE TABLE recipe_node (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    recipe_id INT, 
    product_id INT, 
    created_at DATETIME NOT NULL, 
    updated_at DATETIME, 
    deleted TINYINT NOT NULL DEFAULT 0, 
    deleted_at DATETIME, 
    PRIMARY KEY (id), 
    UNIQUE INDEX UNQ_PRODUCT_ID (product_id), 
    UNIQUE INDEX UNQ_RECIPE_ID (recipe_id), 
    CONSTRAINT FK_RECIPE_NODE_RECIPE_ID_RECEPT_RECEPTID FOREIGN KEY (recipe_id) REFERENCES recept(receptid) ON UPDATE RESTRICT ON DELETE CASCADE, 
    CONSTRAINT FK_RECIPE_NODE_PRODUCT_ID_PRODUCT_PRODUCTID FOREIGN KEY (product_id) REFERENCES product(productid) ON UPDATE RESTRICT ON DELETE CASCADE 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci; 

CREATE TABLE recipe_graph (
    id int(10) unsigned NOT NULL AUTO_INCREMENT, 
    parent_id int(10) unsigned NOT NULL, 
    child_id int(10) unsigned NOT NULL, 
    quantity int(10) unsigned NOT NULL DEFAULT '1', 
    sequence_number int(10) unsigned NOT NULL DEFAULT '1', 
    created_at datetime NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY UNQ_PARENT_ID_CHILD_ID (parent_id,child_id), 
    KEY IDX_CHILD_ID_PARENT_ID (child_id,parent_id), 
    CONSTRAINT FK_RECIPE_GRAPH_CHILD_ID_RECIPE_NODE_ID FOREIGN KEY (child_id) REFERENCES recipe_node (id) ON DELETE CASCADE, 
    CONSTRAINT FK_RECIPE_GRAPH_PARENT_ID_RECIPE_NODE_ID FOREIGN KEY (parent_id) REFERENCES recipe_node (id) ON DELETE CASCADE 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;