MySQL常量表

时间:2013-05-23 04:43:33

标签: php sql foreign-keys constants

我只是第一次尝试外键,我担心自己会被带走。

对于我的几个类变量及其相应的数据库记录,我有一组常量限制了可以选择的值。这些当前使用PHP进行设置和验证。

我想知道的是,我应该在MySQL中创建这些常量的表并将它们锁定到外键吗?这是值得的,还是PHP定义足够?


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

transactions有一个type字段,用于指示交易是信用还是借记。

我是否应该创建另一个表(transactions_constants或其他)来定义transactions(type)中使用的常量并将它们外键键在一起?

3 个答案:

答案 0 :(得分:2)

是的,你应该。有了FK:

  • 您的数据库具有更具体的界面。
  • DB具有清晰的结构(无论代码如何,DB都应该是可读的。)
  • 您可以避免其他数据库客户端(如PMA)插入/更新事故。

但你也可以在PHP中拥有带有consts的表副本(我使用代码生成)。

是的,你可以使用枚举。但请先阅读8 Reasons Why MySQL's ENUM Data Type Is Evil

答案 1 :(得分:2)

在您的情况下,为事务类型创建单独的表可能有点过分。您可以将type列设为enum,以帮助限制数据库端的允许值。

如果事务类型的数据与您想要存储在数据库中的数据相关联,则可以采用单独的表和外键关系。

答案 2 :(得分:2)

如果你的值设置很少变化,你应该使用MySQL ENUM datatype,你应该打开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)

如果您的代码完美,则无法运行上述查询。这取决于你。