MySQL - " Lookup"列数据类型 - 存储简单查找的理想方式

时间:2017-03-25 01:35:14

标签: mysql database database-design relational-database innodb

我正在听一些在工作的人谈论数据库专栏。 本质上,我们想要添加一个新列作为查找表的FK。它基本上是您首选的联系方式(主要电话或主要电子邮件)。所以主表' User'有一个FK到' PreferredContactMethod'

第一人: "让我们将FK列存储为无符号的小int,并使PK查找表只有一个tinyint PK和一个文本描述/代码"

人#2 "我们是否将数据类型存储为无符号tinyint,或者在MySQL空间方面将char(x)存储为无关,那么为什么要让你必须进行连接以找出查找列的值是什么?相反,将FK设为char(x),并在实际表格上制作PK char(x)"

第3个人 "不,将PK表示为字符不是一个好主意。效率不高。处理像unsigned tinyint这样的东西比文本更好。由于只有两个值,为什么我们不将它存储为单个列(而不是FK),其值为0或1.这样它的效率更高,而且你不需要&# 39;必须加入任何东西。"

所以听了这一切之后,我开始想知道谁是对的。我怀疑这是如此微不足道,以至于在表现方面并不重要,但我现在很好奇我的爱情是什么利弊某人接受了这个。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

这样的问题通常没有正确或错误的答案。或者实际上,答案都是正确的,因为这取决于您将如何使用这些数据。

将int / tinyint存储到查找表的一个好例子是值会定期更改,并且您希望允许在查找表中进行更改而不更改引用它的所有行。

如果你有一个相对较小的查找表并且没有经常更改,并且字符串相当短,那么将PK存储为字符串是一件好事。如果字符串很长,这可能会使FK参考体积变得必要,并占用大量空间。

将PK存储为字符串的效率低下并不会对查找表产生太大影响。那张桌子很小。字符串PK的成本主要是由于频繁的随机插入。但这不会影响查找表。