如何为电子商务网站设计数据库?

1mrurvl1  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(366)

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

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

或单独的table:汽车

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 |

请告知。

dtcbnfnu

dtcbnfnu1#

你定义的任何一种方法都可以,是的。但随着网站的扩展和发展,你很可能会遇到问题。
你建议的第一种方法有几个问题。
例如,当添加新的产品类型“hats”时,您可能需要添加额外的列来描述与汽车或书籍没有关系的hats的属性。这将导致一个填充稀疏的表。i、 e.每个产品/行将只包含列的一个子部分的数据。这可能会影响存储数据所需的存储(您的数据库是否为这些空白列分配了空间?如果是这样,您的空间需求可能会迅速膨胀。)
在对表进行修改(添加列、重命名列、删除列)时,在执行修改时可能会有巨大的性能损失,因为myisam实现会将整个表复制到临时表,删除旧表,并将临时表重命名为原始表(如本文所述)
第二种方法有助于解决上述两个问题,但引入了值得考虑的新问题。
如果您的策略是为每种产品类型创建一个新表,那么这可能会在大量相似但略有不同的表中迅速扩展。想象一下,如果amazon或newegg采用这种方法,表计数将接近荒谬的大数字,维护将成为一个问题。此外,所有新产品都需要修改数据库结构,以及数据库顶部的webapp代码。
调整索引以保持数千个产品表的性能似乎是一项不必要的繁重任务。
解决:
正如另一张海报所建议的,从两个简单的表开始——一个“product”表(id,name)和一个“attribute”表(id,productid,name,value),可以解决很多复杂性问题,并且允许在不修改底层表结构的情况下发布新产品,这是一个巨大的成功。这种方法需要使用索引来优化性能,但是由于只使用两个表,因此可以更好地集中精力。

相关问题