Columns: id INT, provice_id INT, is_province BIT
Foreign key: province_id references City (id)
我想表达这样一个概念:当id == Province_id
时,is_province == 1
。我该如何表达这一点?也许有计算列或其他约束?
编辑:好的,这么多评论,我将解释为什么有 is_province 属性。我知道这是多余的,但该表将容纳大约 8000 个条目,因此空间浪费根本不重要。我添加 is_province 因为(使用 DOctrine2)我可以更轻松地查询省份:
$provinces->findByIsProvince(true)
是的,我将省份和城市混合在一个表中,因为省份实际上是一个城市,并且共享它的所有属性。
所以我的问题仍然是,如何强制执行约束 if (id == Province_id) then is_province == 1
?
最佳答案
如果额外将其存储在表中,该信息将是多余的。它是 View 的完美候选者。
CREATE TABLE my_tbl(id INT, provice_id INT);
CREATE VIEW my_view AS
SELECT id, provice_id, (id = province_id) AS is_province
FROM my_tbl;
这为您提供了 is_province
的 TRUE
/FALSE
。如果您想要 1/0,则替换为:
CASE WHEN id = province_id THEN 1 ELSE 0 END AS is_province
有关如何创建 View 的更多信息,请参阅 manual .
关于MySQL 将约束表示为计算列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694182/