Rat*_*r B 7 mysql database-design
我是数据库设计的新手。我正在为一个电子商务网站设计一个数据库,有很多产品要更新,但是在为产品规格表设计时我不明白我是否需要在一个表中指定所有规格还是需要使用不同的不同产品的表?
例如,考虑产品 Mobile 和 book,它们中的每一个都有独特的规格(例如颜色、尺寸、成本、手机型号和书名、ISBN、作者、成本、出版年份等),如果只有更少产品的数量那么我可以设计,但是当有成千上万的产品时,需要很多时间。
谁能告诉我如何设计我的数据库来管理这种情况?
如果您提前知道您的产品将具有的大部分属性,您可以将它们硬编码到不同产品类型的表中,例如:
图书 ----- ID 价钱 标题 作者 书号 等等.... 移动设备 ------------- ID 价钱 尺寸 颜色 模型 等等...
你也可以尝试这样的事情:
基础产品 ------------ ID 基本价格 产品类别 book_product_attributes ----------------------- base_product_id(FK 到 base_product) 标题 作者 mobile_dev_product_attributes ----------------------------- base_product_id(FK 到 base_product) 模型 颜色
这样,您可以在基本产品表中对常用属性进行分组,并在必要时将更具体的属性存储在其他表中。
如果您的产品类型主要是静态的,这将起作用。另一方面,如果您不知道将来需要什么产品类型或属性,那么基于实体-属性-值的系统可能会更好地工作。该模型背后的想法是,您有一个表用于您可能拥有的不同属性,一个表用于您系统中的不同实体,以及一个表用于实体具有的属性值。例子:
实体 -------- ID 属性 ---------- ID 姓名 价值观 ------ ID entity_id 属性 ID 价值
数据可能如下所示:
实体 ID ---- 1 属性 身份证 | 姓名 ---------- 1 | 标题 2 | 作者 价值观 身份证 | 属性_id | entity_id | 价值 -------------------------------------------------- ------- 1 | 1 | 1 | 《大期望》 2 | 2 | 1 | “查尔斯·狄更斯”
此数据非常简要地描述了具有两个属性的产品:标题和作者,值分别为“远大期望”和“查尔斯·狄更斯”。
请注意,使用 EAV 数据库会使查询变得非常尴尬。有了足够的数据和错误的模型设计,也有可能遇到性能问题。我给出的例子非常简单,但更现实的设计往往比这更复杂。使这种数据库正确可能需要时间,而且它并不总是最好的解决方案。