我需要知道哪种数据库模型对性能更好。用于MYSQL产品特性的电子商务数据库结构(innoDB)
首先数据库模型
三表。功能,产品,功能值。
功能表
+----+-----------+
| id | name |
+----+-----------+
| 1 | Brand |
| 2 | Color |
| 3 | Dimension |
| 4 | Model |
+----+-----------+
和特征值表
+----+---------+------------+
| id | name | feature_id |
+----+---------+------------+
| 1 | Sony | 1 |
| 2 | Samsung | 1 |
| 3 | Red | 2 |
| 4 | Blue | 2 |
| 5 | 20 " | 3 |
| 6 | 30 " | 3 |
| 7 | Model A | 4 |
| 8 | Model B | 4 |
+----+---------+------------+
和产品表。
+----+--------------------+----------+
| id | product_name | features |
+----+--------------------+----------+
| 1 | Sony Television | 1-3-5-7 |
| 2 | Samsung Television | 2-4-6-8 |
+----+--------------------+----------+
正如你在这个结构中看到,如果用户想根据功能搜索产品,我需要在我的查询中使用REGEXP或全文搜索。
二数据库模型
在第二个数据库模型,我会删除产品表的功能,我会添加新的表称为product_features。
+----+--------------------+
| id | product_name |
+----+--------------------+
| 1 | Sony Television |
| 2 | Samsung Television |
+----+--------------------+
和新表product_features;
+----+------------+------------+
| id | feature_id | product_id |
+----+------------+------------+
| 1 | 1 | 1 |
| 2 | 3 | 1 |
| 3 | 5 | 1 |
| 4 | 7 | 1 |
| 5 | 2 | 2 |
| 6 | 4 | 2 |
| 7 | 6 | 2 |
| 8 | 8 | 2 |
+----+------------+------------+
现在,如果用户想根据功能搜索产品,我需要搜索product_features然后加入产品。
问题
我的问题是,如果我使用第二种模式,我有在产品表20十亿行,并认为至少有10种功能的每一个产品,所以product_features表将有超过200亿行。根据功能查询也许会很慢。
如果我使用第一个模型,当用户根据要素进行搜索时,我必须用全文搜索或REGEXP以20亿行查询。
我不知道哪种方式更好?你有什么建议?
谢谢您的回答。是的第一个模型不是1NF形式,但是第二个模型的性能如何。如果我在产品中有20亿个行,并且认为每个产品至少有10个功能,那么product_features表就会有200多亿行。 – 2014-10-31 06:54:04
什么是您的搜索参数和预期输出是什么,那么我将能够更好地为您提供帮助。 – 2014-10-31 06:55:53
我只需要知道这两个模型之间对于大型数据集的性能。当用户想要根据功能查找产品时,产品表中有20亿个行,哪种模式可以更快地获得结果。 – 2014-10-31 07:05:13