Exi*_*xit 2 mysql database database-design
好的,我将要处理大约1,000,000件商品,这些商品将由数量有限的商店共享.商店数量限制在5个左右,但这可能会发生变化.产品表已经有大约60到70个字段需要管理.
这是我正在考虑的三种方法:
将值内嵌到一个小的varchar中,比如大约20个字符长,分隔符可以存储大约10个商店来关联产品.MySQL select可以使用LIKE'%| 2 |%'来匹配商店ID为2的任何产品.
关于使用MySQL程序的讨论也很多.
优点:一个领域,容易容纳更多商店,使用更少的内存?
缺点:文本搜索,需要更长时间?
为每个创建一个TINYINT(1)和一个新字段是最简单的也可能是最好的.问题是,如果添加新商店,则必须添加新字段,从而改变数百万种产品.
优点:易于选择
缺点:添加商店需要改变表格结构,需要管理更多字段 - 如果他们有20个商店需要管理(面向未来)
我期望的标准响应是使用链接表将产品与商店关联,只是两个字段表.我担心的是,如果大多数商店都使用大多数产品,那么突然之间,该表中可能会有大约500万行.
我可以打破链接表以减少行数,例如通过产品名称的第一个字母,并有26个链接表.
优点:LEFT JOIN易于使用
缺点:除非爆发,否则几乎每个查询都需要搜索500万个链接表
我真的应该在一起进行一些测试,以找出最佳的响应/处理时间,但这需要一些时间.我很想知道什么是最好的解决方案,可以保证数据的存储能够满足更多商店的需求,并有效地存储.
您在赞成和反对清单中遗漏了一个非常重要的考虑因素:参照完整性.如果一个快速的数据库可以让你轻松查询,如果它充满了破碎的数据,只会让你更快地犯错误,犯错误是人类需要帮助的最后一件事.允许外键(即引用完整性)的唯一选项是选项(3).
链接表也是处理此类事物的标准方法,数据库通常用于处理标准用例.
就(1)而言,做a LIKE '%x%'几乎每次都会进行表扫描,而表扫描是你想要的最后一件事.您还必须确保|在字符串的开头和结尾处有分隔符,否则您将需要三个LIKE(或正则表达式)而不是一个.某些数据库可以使用索引LIKE 'x%'但不适用于您的情况.
方法(2)使用了太多列,你的查询将是一团糟,你的表将太宽.您还必须担心确保一个表中的每一行在另一个表中都有相应的列.
| 归档时间: |
|
| 查看次数: |
3190 次 |
| 最近记录: |