好吧......想出了以下解決方案,這似乎工作就不錯。
並且如果有人有興趣,這裏是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;
什麼是文章的含義與一subarticle關聯?如果完全不同於與產品相關的食譜,那麼它又有什麼不同呢? – 2015-02-24 17:05:45
刺傷它。產品從任何子產品或子配方中生產出來。因此,如果產品1有顆粒2,3和R4,R4是由5和6組成的配方,您需要產品2,3,4,5,6來製造產品1? – 2015-02-24 17:08:45
「產生」並不是真正的東西。它不像產品材料清單一樣由xxxx組件組成。它更多地關於你何時購買產品A.這也很好,也購買產品B.產品B補充產品A.在分組的情況下(例如R0001),您可以選擇幾乎相同產品的多種替代品。 – Marc 2015-02-24 18:00:11