Какова наилучшая практика для сопоставления таблицы комментариев с несколькими таблицами в MySQL? - PullRequest
1 голос
/ 11 января 2011

Я ищу лучший способ сопоставления одной базовой таблицы с несколькими таблицами. Например, если бы у меня была одна из следующих базовых таблиц (комментарии, теги, избранное, рейтинги), она могла бы отображаться в одной или нескольких таблицах, таких как (запись в блоге, изображение, видео). Пример ниже может дать лучшее объяснение.

Подробнее:
Я хочу использовать эти таблицы для создания приложения 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. Вышеупомянутое выглядит как правильная установка, или Вы предложите лучший способ и почему. А также, если вы используете вышеупомянутое решение, кто-нибудь предвидит какие-либо явные минусы? Заранее спасибо за ваш ответ, я просто пытаюсь найти лучший способ сделать это.

Я считаю, что эта тема связана с тем, что я спрашиваю, но на самом деле не ответил на мой вопрос:
Таблицы базы данных, одна таблица ссылается на несколько несвязанных таблиц

1 Ответ

0 голосов
/ 13 января 2011

Том Х. дал ответ на другой вопрос, который, как мне кажется, ответил на мой вопрос.Я не знаю, как дать ему должное признание, но ссылка на его решение здесь: Таблицы базы данных, одна таблица, ссылающаяся на несколько несвязанных таблиц

Спасибо за вашу помощь, Том.

Я по-прежнему открыт для предложений, но, учитывая информацию, размещенную по ссылке выше, я думаю, что собираюсь пойти по пути создания нескольких таблиц карт.

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