MySQL 将约束表示为计算列?

标签 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

最佳答案

如果额外将其存储在表中,该信息将是多余的。它是 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_provinceTRUE/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/

相关文章:

Mysql 重启后不持久

mysql - 预先计算每个可能组合的记录数

MySQL 字符串与百分比输出的比较(位置非常重要)

php - 为每个 id 添加元值,其中 post_type = ??文字新闻

ruby-on-rails - Rails 在一个表单上更新多个模型

mysql - SQL查询根据两个不同表的条件更新一个表的列值

MYSQL/Coldfusion 替换注册符号不起作用

mysql - 从两个表中选择整行

python - foreignKey 模型没有 Manager (即 'Foo' 对象没有属性 'foo_set' )

Django 内联模型管理过滤器外部字段