开发者

MySQL express constraint as calculated column?

开发者 https://www.devze.com 2023-04-12 02:46 出处:网络
Columns: id INT, provice_id INT, is_province BIT Foreign key: province_id references City (id) I\'d like to express the concept: when id == province_id then is_province == 1. How can i express this?
Columns: id INT, provice_id INT, is_province BIT
Foreign key: province_id references City (id)

I'd like to express the concept: when id == province_id then is_province == 1. How can i express this? Maybe with a calculated colu开发者_运维技巧mn or another constraint?

EDIT: ok so many comments, i will explain why there is is_province attribute. I know it's redundant, but the table will hold about 8000 entries so the wast of space is not important at all. I'm adding is_province because (using DOctrine2) i can query for provinces more easly:

$provinces->findByIsProvince(true)

And yes, i'm mixing provinces and cities in one table, because a province is actually a city and share all attributes of it.

So my question is still, how can enforce constraint that if (id == province_id) then is_province == 1?


The information would be redundant if you stored it in the table additionally. It's a perfect candidate for a 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;

That gives you TRUE / FALSE for is_province. If you want 1 / 0, then substitute:

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

More on how to create views in the manual.


may be your dont need is_province
your could just select provinces by add
WHERE id = province_id

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号