我只是第一次尝试外键,我担心自己会被带走。
对于我的几个类变量及其相应的数据库记录,我有一组常量限制了可以选择的值。这些当前使用PHP进行设置和验证。
我想知道的是,我应该在MySQL中创建这些常量的表并将它们锁定到外键吗?这是值得的,还是PHP定义足够?
例如,假设我有一个表transactions
,其中PHP常量定义为'credit'
和'debit'
。
transactions
有一个type
字段,用于指示交易是信用还是借记。
我是否应该创建另一个表(transactions_constants
或其他)来定义transactions(type)
中使用的常量并将它们外键键在一起?
答案 0 :(得分:2)
是的,你应该。有了FK:
但你也可以在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)
如果您的代码完美,则无法运行上述查询。这取决于你。