我们经常将 VARCHAR 用于本质上是枚举值。我知道将它们提取到单独的查找表中并使用整数 ID 作为外键通常很聪明,但有时没有其他表正在使用它,而且我们不想要另一个 JOIN,所以我们选择将它们保留在主表。
所以,问题是,是否有一些数据库功能可以让我标记这些列,然后使用一些内部查找表来节省空间并提高我的查询性能?类似于 Postgres 的ENUMs的东西,但这不需要预先明确声明可能的值。
例如,我想做一个 INSERT:
INSERT INTO table (date, status) VALUES ('2011-01-25', 'pending');
并且'pending'
将在内部被视为整数,仅保留实际字符串的一个实例,即使多行包含相同的 value 'pending'
。
在某些编程语言(LISP、Ruby)中,类似的特性称为符号,实际上是“命名整数”。
我主要对 Postgres 和 MySQL 感兴趣,但任何其他指针也将不胜感激。