MySQL表的常量


MySQL tables of constants

我只是第一次尝试外键,我担心我有点忘乎所以。

对于我的几个类变量和它们对应的数据库记录,我有一组常数来限制可以选择的值。

我想知道的是,我应该在MySQL中制作这些常量的表并将它们锁定到外键中吗?这样做值得吗?或者PHP定义足够了吗?


例如,假设我有一个表transactions,其中为'credit''debit'定义了PHP常量。

transactions有一个type字段,该字段指示交易是贷方还是贷方。

我应该创建另一个表(transactions_constants或其他)来定义transactions(type)和外键中使用的常量吗?

是的,你应该。颗:

  • 你的数据库有一个更具体的接口
  • 数据库有一个清晰的结构(一个数据库应该是可读的,不管代码)。
  • 可以避免其他数据库客户端(如PMA)插入/更新的意外。

但是你也可以在PHP中复制带有const的表作为const(我使用codedegeneration)。

是的,你可以使用enum。但请先阅读MySQL的ENUM数据类型是邪恶的8个原因。

在您的示例中,为事务类型创建单独的表可能有些多余。您可以将type列设置为enum,以帮助限制数据库端允许的值。

如果事务类型有更多与它们相关的数据,那么您希望存储在数据库中,那么单独的表和外键关系将是一种方法。

如果你的值设置很少改变,你应该使用MySQL ENUM数据类型,并且你应该打开MySQL限制模式。例如:

如果你的表是这样的:

CREATE TABLE `table` (
    id int unsigned primary key auto_increment,
    type enum('credit','debit') not null,
);
当你执行像 这样的查询时,

严格模式将会帮助你。

update table `table` set `type` = 'credit1 ' where id = 2
# strict mode on: an error will be raised
# strict mode off: `type` will be '' (empty string)

如果你的代码是完美的,上面的查询不能运行。