为了一个现有的客户项目,我开发了一个CMS来存储产品。产品是具有一些属性(如标题,文本等)的条目。然而,一些客户想要不同的属性,例如价格、颜色等。我试图使我的代码尽可能通用,因此我不想为每个客户修改代码。
我的问题是:如何设计这样一个数据库,使得一个产品可以拥有无限的、多个属性?如何为这样一个不同的设计创建/生成表单?
谢谢阅读。
我的问题是:如何设计这样一个数据库,使得一个产品可以拥有无限的、多个属性?如何为这样一个不同的设计创建/生成表单?
谢谢阅读。
A: 180, Red, 200$
B: 170, Blue, 270$
您的表格将包含以下元组:
产品(id,标题,文本):
(1,"A","desc1")
(2,"B","desc2")
(1,"height")
(2,"color")
(3,"price")
(1,1,"180")
(2,1,"179")
(1,2,"Red")
(2,1,"Blue")
(1,3,"200")
(2,3,"270")
SELECT P.title
FROM Product P,Properties Pr,Product_Properties PP
WHERE P.id=PP.ProductId AND PP.PropertyId=Pr.id AND Pr.name='height' AND PP.value='200'
您需要有两个表:
CREATE TABLE products( product_id INT, product_name VARCHAR, ... );
CREATE TABLE product_properties( product_id INT, property_name VARCHAR, property_value VARCHAR );
--------------------------------------------------------
| id | name | other common properties...
--------------------------------------------------------
| 1 | apple | ...
| 2 | bentley |
| 3 | ... |
| ... | ... |
----------------------------------------------------
| id | property_name | property_value |
----------------------------------------------------
| 1 | color | red |
| 1 | size | large |
| 2 | wheel count | 4 |
| 2 | top speed | 200 |
| 2 | airbags | yes |
| ... | ... | ... |
SELECT product_name, ... FROM products WHERE product_id = 2
SELECT property_name, property_value FROM product_properties WHERE product_id = 2