我试着为此寻找明确的答案,但不能。
每次创建新数据库时,我都会为Marital Status和Gender等特定属性创建辅助表。这样在Customer表上,我只需在Marital Status列上放置一个ID。 1 - 单身 2 - 离婚 3 - 已婚
等等...
我一直这样做,这是我学习它的方式,我知道这是一种很好的做法,等等。但是有更好的参数和#34;或者为什么这么做的事实呢?
基本上,我与之合作的人想要构建一个新的数据库并使Customer_Type成为一个文本字段,而不将其链接到另一个表,我想解释为什么这是不好的做法。
由于
答案 0 :(得分:0)
这是一种不好的做法,因为您无法将文本列限制为只保留有效值。你可以把性别的马铃薯'例如。另一个原因是文本列将占用比链接到辅助表的int列更多的空间。这意味着该表将占用磁盘上较少的空间,并且行将更易于缓存。此外,索引整数列可能比索引文本列更快,具体取决于文本值的长度。
但是,在MySQL中,您可以创建仅具有有效值的枚举列。
答案 1 :(得分:0)
正如@Swoogan正确描述的那样,将gender
,status
和类似类型的字段声明为 varchar 是一种不好的做法,因为数据健全性将受到阻碍。
或者我们可以将它们enum。枚举数据类型在数据库中显示为文本,但更有效地存储,并且仅允许来自创建表时提到的特定可枚举值的值,例如如果是('male', 'female', 'others')
,则gender
。
gender enum('male', 'female', 'others')
您还可以为所有可能的性别创建单独的表,并将字段gender_id
指定为您在问题中提到的外键。这是一个理想的场景,但前者是问题的非规范化解决方案,否则您需要每次都需要加入以找到性别的价值。