0

我一直在对 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 种颜色总是会一起使用......因为它们总是会被拉出并一起使用,以便为客户提供可供选择的颜色选项......)

4

0 回答 0