MySQL выражает ограничение как вычисляемый столбец? - PullRequest
0 голосов
/ 08 октября 2011
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 ]

3 голосов
/ 08 октября 2011

Информация будет избыточной, если вы сохраните ее в таблице дополнительно. Это идеальный кандидат для представления.

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

Подробнее о создании видов см. В руководстве .

0 голосов
/ 08 октября 2011

может быть вам не нужно is_provinceВы можете просто выбрать провинции, добавивWHERE id = province_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...