MySQL表示约束为计算列?

时间:2011-10-08 01:18:09

标签: mysql sql foreign-keys constraints

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

2 个答案:

答案 0 :(得分:3)

如果您将信息另外存储在表格中,则信息将是多余的。它是观点的完美候选者。

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;

这为TRUE提供了FALSE / is_province。如果你想要1/0,那么替换:

CASE WHEN id = province_id THEN 1 ELSE 0 END AS is_province

有关如何在manual中创建视图的详细信息。

答案 1 :(得分:0)

可能是你不需要is_province
您可以通过添加WHERE id = province_id

来选择省份