有幾種方法可以做到這一點。您可以將副產品放在單獨的表中,並在主產品表中使用FOREIGN KEY引用產品ID。
如果產品屬性有些類似,也可以將它們放在同一個表中,但使用parentID列來引用父級產品。然後可以使用FOREIGN KEY來強制約束,即使它是同一個表。不是子產品的產品可以具有NULL的parentID。
例如:
ALTER TABLE products ADD FOREIGN KEY (parentID) REFERENCES products (productID) ON UPDATE CASCADE ON DELETE CASCADE;
而且例如:
INSERT INTO products VALUES ('p1', 'Product 1', '55 dm3', 59.99, 1, NULL);
...
INSERT INTO products VALUES ('p1-1', 'Subproduct 1.1', '8 dm3', 19.99, 4, 1);
...
mysql> SELECT * FROM products WHERE parentID = 1;
+-------------+--------------------+------------------+-------+-----------+----------+
| productName | productDescription | productDimension | price | productID | parentId |
+-------------+--------------------+------------------+-------+-----------+----------+
| p1-1 | Subproduct 1.1 | 8 dm3 | 19.99 | 4 | 1 |
| p1-2 | Subproduct 1.2 | 4 dm3 | 19.99 | 5 | 1 |
+-------------+--------------------+------------------+-------+-----------+----------+
2 rows in set (0.00 sec)
如果要權衡優勢關係表,並與更靈活的JSON數據,而走時,MySQL 5.7支持過。看看https://dev.mysql.com/doc/refman/5.7/en/json.html
你可以例如有一個JSON對象表示一個產品,其中包含一個子產品對象的數組。
我會考慮一個產品表和單獨的product_subproduct表。 – jarlh