我一直在对 mysql db 的规范化进行一些研究。我意识到拥有多张桌子而不是一张桌子要容易得多。我猜想为不同的值设置一列比将其组合在一列中要容易得多。我的问题是,如果我正在设计一个具有固定信息的页面,并且我总是需要将这些信息整合在一起,该怎么办。例如,我在 CLOTHES 表下有一列名为 T 恤颜色。然后我会存储值“红 - 蓝 - 绿 - 黄 - 橙 - 粉 - 深红”等,假设列值将有一个很长的字符串,因为它将包含超过 1,000 种颜色。我确信这些是我的商店将出售的唯一颜色,所以我不必担心添加或删除颜色......
我被建议为颜色创建一个链接表......但是:
数据库设计A:(链接表设计)
表产品 - ProductID: - 名称: - 衬衫:
表格颜色 - ColorID: - 名称:
表 product_colors - ProductID: - ColorID:
基于 1,000 种颜色的 T 恤,我将获得的表格和行数将是:
桌数:3
列数:6
行数:2,002 -----> 2(来自表格产品)、1,000(来自表格颜色)和 1,000(来自表格产品颜色)
如果我要设置一个包含三列的表格,并将所有颜色一起存储在一个长字符串中作为列颜色(并在需要时将其分解为一个列表)......我会得到的行和列的数量是:
数据库设计 B:(将 1,000 种颜色存储在一个长字符串中,然后将其分解为一个列表)
表 shirt_colors
产品编号:
姓名:
颜色:
桌数:1
列数:3
行数:3
谁能向我解释数据库设计选项 A 如何比将颜色设置为一个长字符串值然后分解它(除了更易于阅读和维护)更优化(开销和性能方面)?
数据库设计选项 A:将导致创建 3 个表、6 列和 2020 行。
数据库设计选项 B:将导致创建 1 个表、3 列和 3 行。
从开销和性能的角度来看,我很难理解数据库设计选项 A如何成为更优的选择。我确实意识到价值超过 1,000 个单词的列可能很长,但我认为拉长字符串没有问题,因为 mysql 在文章和论坛站点中非常流行。
此外,如果在开销和服务器速度上扩展值(即使它更难维护)更有效,那么它的效率大约会提高多少倍......快 1 倍、快 2 倍、快 3 倍等,或者也许太少以至于无法注意到?提前致谢
(请记住,这 1,000 种颜色总是会一起使用......因为它们总是会被拉出并一起使用,以便为客户提供可供选择的颜色选项......)