Vic*_*tor 5 mysql database-design enum
假设我们有订单表,并且订单有状态。这三个选项中哪一个最好?
varchar状态栏enum状态栏status_id int和name varchar,并且在订单表中保留status_id作为外键。哪种方法是最好的?int我怀疑使用字典表也更好,因为通过, 而不是 来搜索状态会更快varchar。
嗯,我是 ENUM 的拥护者——至少在有限的使用中是这样。
status我会将它与一个小的、相当静态的可能值列表一起使用。我会从unknown发现拼写错误开始。 长期以来一直在优化以在列表末尾ALTER TABLE添加新选项。ENUM
我不会用于ENUM大陆。如果有标准缩写,我会使用缩写VARCHAR。对于国家来说,我主张
country CHAR(2) CHARACTER SET ascii
Run Code Online (Sandbox Code Playgroud)
使用查找表可能会降低效率。数据仓库中的“星型”模式效率可能非常低。JOINs当需要多个时会发生这种情况;ENUM避免了低效率。 VARCHAR体积庞大,这在DW应用中是一个大问题。
在许多情况下, An 的ENUM作用类似于字符串: WHERE status = 'OK'比任何一种替代方案都更具可读性。
比较两个整数与两个字符串:整数的速度还不够快,因此并不重要。
VARCHAR-- 当体积不成问题时使用ENUM-- 当体积庞大成为问题并且选择数量相当小且稳定时使用。