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