当前位置:  开发笔记 > 编程语言 > 正文

我应该使用ENUM作为主键和外键吗?

如何解决《我应该使用ENUM作为主键和外键吗?》经验,为你挑选了2个好方法。

关联者已创建一个模式,该模式ENUM()在查找表上使用主键列.该表将产品代码"FB"转换为其名称"Foo Bar".

然后,该主键在其他地方用作外键.而目前,FK也是一个ENUM().

我认为这不是一个好主意.这意味着要连接这两个表,我们最终会进行四次查找.这两个表加上两个ENUM().我对么?

我宁愿让FK CHAR(2)减少查找次数.我也更喜欢PK也CHAR(2)完全减少它.

ENUM()s 的好处是要对值进行约束.我希望有类似的东西:CHAR(2) ALLOW('FB', 'AB', 'CD')我们可以用于PK和FK列.

什么是:

    最佳实践

    你的偏好

这个概念也在别处使用.如果ENUM()价值更长怎么办?ENUM('Ding, dong, dell', 'Baa baa black sheep').ENUM()从空间的角度来看,这是有用的.如果有几百万行使用这些值,我应该只关心这个吗?在这种情况下,ENUM()节省存储空间.



1> David Segond..:

ENUM应该用于定义给定字段的可能值范围.这也意味着您可能有多个行,这些行具有相同的值.

我不建议将ENUM用于主键类型的外键类型.

使用ENUM作为主键意味着添加新密钥将涉及修改表,因为必须先修改ENUM,然后才能插入新密钥.

我猜你的同事试图限制谁可以插入一个新行,并且该行数是有限的.我认为这应该通过数据库级​​别或应用程序的适当权限设置来实现,而不是通过使用ENUM作为主键.

恕我直言,使用ENUM作为主键类型违反了KISS原则.



2> Rami Jamleh..:

但是,当您仅困于10行或更少的行时,这将不是问题

例如

CREATE TABLE `grade`(
    `grade` ENUM('A','B','C','D','E','F') PRIMARY KEY,
    `description` VARCHAR(50) NOT NULL
) 

这张表很难获得DML

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有