Там находятся две таблицы - сообщения и комментарии:Многие таблицы, ссылающихся на один стол поле
create table posts
(
id integer not null primary key auto_increment,
body text not null
);
create table comments
(
id integer not null primary key auto_increment,
body text not null,
post_id integer not null references posts(id)
);
Теперь я хочу создать еще одну таблицу - отчеты («плохой пост» флаги), и я хочу, чтобы хранить отчеты для обеих должностей и комментариев.
create table reports
(
id integer not null primary key auto_increment,
obj_type tinyint not null, /* '1' for posts and '2' for comments */
obj_id integer not null,
body text not null
);
alter table reports add foreign key(obj_id) references posts(id) on delete cascade;
alter table reports add foreign key(obj_id) references comments(id) on delete cascade;
Как вы видите, есть две ссылки в одном поле (я дифференцируются их OBJ_ID), и вопрос - Является ли все это правильно делать, как это?
Если нет, то что было бы лучшим решением?
Заранее благодарен.
На самом деле я использую фреймворк Yii php, и я могу обработать «на удалении каскада» оттуда. Мне нужны внешние ключи, чтобы использовать отношения уровня ORM. И важно то, что сообщения и комментарии - всего лишь пример, в действительности мне нужны флаги для 4 таблиц. Мне нужен гибкий способ без дополнительных 4 таблиц. – Acute
@ Акуйте, если честно, я понятия не имею, как MySQL хранит эти два внешних ключа =/возможно, это специальная функция? –
Я не знаю, но мне не нравится создавать несколько FK, не похоже на элегантное решение) Хорошо, если я решаю делать таблицы ссылок, я выберу ваш ответ как решение – Acute