mysql - MySQL 中存储具有 N 个可能值的字段的最佳实践

标签 mysql database-design

在我的应用程序中,它依赖于数据表,每个条目都需要记录其状态,并且有四种可能的状态。我想知道在表列中表示这四种状态之一的最佳方法是什么,以及该方法如何使用 MySQL 推广到 N 个状态。

编辑

澄清我只想一次代表一个状态,而不是多个

最佳答案

`state` ENUM('ready', 'active', 'removed', 'foobared')

是为列提供“少量”互斥值的直接方法。尽管您可以有数百个选项,但 2 个是常见的,4 个是“可以”。添加另一个选项有点笨拙,但这是可能的。 ENUM 占用 1 个字节,因此非常高效;您可以通过指示的字符串引用值,从而使代码更加人性化。

如果“状态”不是互斥的,请参阅 SET 数据类型。

(使用 ENUM 有支持者和反对者——我预计会因为建议 ENUM 而受到批评。)

您仍然可以使用另一个表格来添加状态的详细描述:

CREATE TABLE StateMeanings (
    `state` ENUM(... (as above)),
    `description` VARCHAR(188) );

INSERT INTO StateMeanings (`state`, `description`)
    VALUES
    ('ready', "The horse is saddled, and the groom is standing by."),
    ...

关于mysql - MySQL 中存储具有 N 个可能值的字段的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54593551/

相关文章:

mysql - CakePHP 并不总是返回外来字符

sql - 在 SQL Server 表 : which type should I choose? 中创建新的文本列

数据库外键约束与编程外键约束

java - 用户表、评级表和位置表之间的关系是什么?

mysql - 从 ruby​​ 中的 sql 语句获取计数属性

带有特殊字符和数据库的java程序

javascript - 为 MySQL 创建池

具有特定格式值的 MySQl 更新列

database - Twitter 喜欢 JPA 中的关系

sql - 存储销售税信息的最佳方式