Я ищу лучший способ сопоставления одной базовой таблицы с несколькими таблицами. Например, если бы у меня была одна из следующих базовых таблиц (комментарии, теги, избранное, рейтинги), она могла бы отображаться в одной или нескольких таблицах, таких как (запись в блоге, изображение, видео). Пример ниже может дать лучшее объяснение.
Подробнее:
Я хочу использовать эти таблицы для создания приложения Yii, использующего Active Record.
Мое предлагаемое решение (Mysql):
Моя базовая таблица
create table comment (
id int(4) unsigned not null auto_increment primary key,
attach_id int(4) unsigned not null, #used to attach to a specific post/photo/video
attach_type_id tinyint(1) unsigned not null, #foreign key to attach_type(id)
comment text not null,
user_id int(4) unsigned null,
datetime_added datetime not null,
foreign key (attach_type_id) references attach_type(id)
);
Моя таблица «Глобальное сопоставление»:
create table attach_type (
id tinyint(1) unsigned not null auto_increment primary key,
table_name varchar(20) not null #used for reference purposes only
);
Примитивный пример двух «множественных» таблиц:
create table blog_post (
id int(4) unsigned not null auto_increment primary key,
title varchar(100) not null,
post text not null,
user_id int(4) unsigned null,
datetime_added datetime not null
);
create table photo (
id int(4) unsigned not null auto_increment primary key,
title varchar(100) not null,
description varchar(255) null,
file_name varchar(100) not null,
user_id int(4) unsigned null,
datetime_added datetime not null
);
Для получения всех комментариев к записи в блоге id = 54
id таблицы blog_post для ее строки в таблице attach_type = 1
ID строки сообщения для его строки в таблице blog_post = 54
select * from comments where attach_type_id=1 and attach_id=54;
Таким образом, (комментарий, метка, избранное, рейтинг), комментарий, показанный выше, можно прикрепить как к blog_post, так и / или к фотографии. Аналогично, к одному blog_post / photo можно прикрепить несколько комментариев (позволяет комментировать несколько пользователей). Мой вопрос заключается в том, как лучше всего это сделать в MySQL. Вышеупомянутое выглядит как правильная установка, или Вы предложите лучший способ и почему. А также, если вы используете вышеупомянутое решение, кто-нибудь предвидит какие-либо явные минусы? Заранее спасибо за ваш ответ, я просто пытаюсь найти лучший способ сделать это.
Я считаю, что эта тема связана с тем, что я спрашиваю, но на самом деле не ответил на мой вопрос:
Таблицы базы данных, одна таблица ссылается на несколько несвязанных таблиц