【发布时间】:2015-09-03 12:11:00
【问题描述】:
我正在努力就如何构建我的 MySQL 数据库做出正确的决定。
我可以通过例子来最好地解释这一点:
我有一张名为customers 的表。一个客户可以控制一个或多个sites。
Sites 有自己的桌子。
表customers 和sites 有一个主键id (AUTO-INCREMENT)。
大多数客户可以修改多个“站点”,我们正在向 100.000 个客户发展。我需要对这些信息做的就是检查客户是否可以编辑网站。
问题是:如果我想将查询保持在最低限度并保持最佳性能,如何才能最好地存储我的数据?
1. 我创建了一个客户可以编辑的所有“站点”的序列化数组,并将其放在customers 表的列中。
2. 我为customers 创建了一个名为customer-site 的子表,我在其中写入了客户可以访问的所有site_id。
正如您可能读到的那样,我知识不多,所以非常感谢任何信息!
最好的问候, 阿巴约布
【问题讨论】:
-
数组是一个非常糟糕的主意。寻找标准化数据 customer_site 表。每个人都将很容易理解,因为它是一个非常常见的选择,易于使用且查询速度足够快。数组没有这些优点。你甚至在 mysql 中都没有原生数组支持。除了选项 2 之外,没有其他好方法。
-
任何带有序列化数组的东西都很难在 MySQL 中处理(它可以完成 - 但可能只值得向某人展示令人讨厌的 SQL 以说服他们不要这样做!)。以逗号分隔的站点 ID 列表稍好一些(可以使用 FIND_IN_SET 访问),但效率不高或不够灵活。将查询数量保持在最低限度和高效的选项 2 是最佳选择。