我想为智能手机及其功能创建带有功能类别的数据库。
Feature Category
------------------------
|id name
------------------------
|1 Processor
|2 Memory
|3 Display
|_______________________
Features
------------------------------------------------
|id name feature_category_id
------------------------------------------------
|1 Process Speed 1
|2 Process Technology 1
|3 RAM 2
|4 Screen Size 3
|_______________________________________________
Product
----------------------------------------
|id name Description
----------------------------------------
|1 Moto G4
|2 Iphone 6s plus
|3 Lenovo K4
|______________________________________现在我想存储特定产品的功能,例如iPhone6s+产品有ram = 2GB,屏幕大小=5英寸等等.但我想要数据库设计的最佳解决方案。
发布于 2017-07-02 09:46:51
根据您最初的设计,您需要在已有的基础上添加多到多的关系:
CREATE TABLE features_x_products
(
product_id integer NOT NULL REFERENCES product (id),
feature_id integer NOT NULL REFERENCES feature (id),
PRIMARY KEY (product_id, feature_id),
value varchar(200) NOT NULL,
unit varchar(50)
) ;这将创建一个EAV模型(实体-属性值)。它有很多警告。最令人讨厌的是,您必须将所有值存储为text (或varchar),除非您有各种value列(即:value_number decimal ; value_text varchar(200) ; value_timestamp timestamp ; .),但是您还需要一些关于属性的额外元信息来查找要检索的列。
参考资料和替代办法:
边注:最佳设计的概念实际上并不存在。对具体问题有很好的解决办法。有些解决方案适用于许多不同的问题,而另一些则只适用于极少数的问题。根据查询数据库的方式,使用一种编程语言或另一种编程语言访问数据库,可能会使使用JSON特别吸引人,或者非常糟糕。EAV也是如此。
https://dba.stackexchange.com/questions/177785
复制相似问题