【问题标题】:how to design database for ecommerce website?如何为电子商务网站设计数据库?
【发布时间】:2018-12-05 21:27:14
【问题描述】:

如何为不具有相同属性的产品创建数据库;例如,最好有一个产品表:

id|category|Description   |Mileage|Author_name |Print_length|Language|
1 |cars    |honda cvic ...|12315  |            |            |        |
2 |books   |Stranger's... |       |Albert Camus|208 page    |English |

或单独的表格: 汽车

 id|brand|Description   |Mileage|Body Type|yeasr|
 1 |Honda|honda cvic ...|12315  |sedan    |2015 |   

书籍:

id|Name          |Description   |Author_name |Print_length|Language|
1 |The Stranger's|Stranger's... |Albert Camus|208 page    |English |

请指教。

【问题讨论】:

  • 恐怕这两种方法都不是。您可能想要一个只有 id 和名称的产品表。然后,您需要一个包含 product_id、attribute_name、attribute_value 的属性表,其中的属性是 description、author_name 等。但这是一个过于简单化的答案。如果您真的打算从头开始构建电子商务网站和数据库,我强烈建议您对数据库设计的基本概念进行一些认真的研究。我不想听起来刻薄,但这个问题让我觉得在开始之前你需要更多的知识。

标签: mysql sql database oracle postgresql


【解决方案1】:

您定义的任何一种方法都可以,是的。但是随着您的网站扩展和增长,您可能会遇到问题。

您建议的第一种方法存在一些问题。

  1. 添加新产品类型(例如“帽子”)时,您可能需要添加额外的列来描述与汽车或书籍无关的帽子的属性。这将导致一个稀疏填充的表。即每个产品/行将只有列的一个子部分的数据。这可能会影响存储数据所需的存储空间。 (您的数据库是否为这些空白列分配空间?如果是,您的空间需求可能会迅速膨胀。)
  2. 在对表进行修改(添加列、重命名列、删除列)时,执行修改时可能会出现巨大的性能损失,因为 MyISAM 实现会将整个表复制到临时表,删除旧的表,并将临时表重命名为原始表。 (如here 所述)

您的第二种方法有助于解决上述两个问题,但引入了值得考虑的新问题。

  1. 如果您的策略是为每种产品类型创建一个新表,这可能会在大量相似但略有不同的表中迅速爆发。想象一下,如果 Amazon 或 Newegg 采用这种方法 - 表数将接近荒谬的大数,并且维护将成为一个问题。此外,所有新产品都需要修改数据库结构以及位于数据库顶部的 webapp 代码。
  2. 调整索引以维持数千个产品表的性能似乎是一项不必要的繁重任务。

解决方案:

正如另一位发帖人建议的那样,从两个简单的表开始——一个“产品”表(ID、名称)和一个“属性”表(ID、ProductID、名称、值),将解决很多复杂性问题并允许无需修改基础表结构即可推出新产品,这是一个巨大的胜利。这种方法需要使用索引来优化性能,但由于只会使用两个表,因此您可以更好地集中精力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2018-09-03
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多