SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.03.2010 00:43:52

tema_604
Участник
Зарегистрирован: 20.03.2010
Сообщений: 2

Связь таблиц в InnoDB

Здравствуйте. Подскажите пожалуйста как организовать связь.

Есть таблицы:

User (id, name, pass)
Gallery (id, name, user_id)
Image (id, name, gallery_id)

Пользователи могут создавать галлереи, и загружать в них изображения. Gallery связана с User (Gallery.user_id -> User.id), Image связана c Gallery (Image.gallery_id -> Gallery.id). Пока всё просто и понятно.

Так же пользователи могут комментировать других пользователей, галлереи, созданные другими пользователями и изображения. Появляется таблица Comment (id, header, text, user_id).

Как правильно организовать связть комментариев с нужными таблицами? То есть, каждый комментарий он либо к пользователю, либо к галлерее, либо к изображению.

В настоящий момент, я сделал связь через дополнительные таблицы. Например, есть таблица CommentImage (id, comment_id, image_id). В этой таблице хранятся связи комментариев с изображениями. Аналогичные таблицы есть для пользователей и галлерей. Выглядит довольно громоздко.

Возможно ли реализовать связь без дополнительных таблиц? Например в таблице Comment добавить поля type и type_id. Поле type будет содержать название таблицы, а поле type_id будет содержать id. Как настроить внешний ключ, чтобы id брался из нужной таблицы, в зависимости от значения type_id? Или это неправильно и способ с тремя дополнительными таблицами хороший?

Спасибо!

Неактивен

 

#2 20.03.2010 18:20:05

Mirexzpalich
Завсегдатай
Зарегистрирован: 03.03.2010
Сообщений: 26

Re: Связь таблиц в InnoDB

Я думаю, что твой способ с тремя таблицами не плох. Ну м что, что на 2 таблицы больше. Зато все понятно что к чему. Но если ты хочешь сделать одной то можно так:
Comment (id,type, header, text, user_id).
Где type - тип коментария (картинка, галерея, пользователь)
id - id того, что комментируют(id картинки или id галереи или id пользователя)

Допустим тебе надо будет вывести все комменты к картинке id=3.

select header,text,user_id from comment where type=image and id=3;

Но это будет работать только тогда, когда id галерей и id картинок всех пользователей не будут повторяться!

Неактивен

 

#3 21.03.2010 12:44:43

tema_604
Участник
Зарегистрирован: 20.03.2010
Сообщений: 2

Re: Связь таблиц в InnoDB

Ок. Спасибо за ответ. Оставлю три таблицы - кто знает, что ещё мне понадобится комментировать ))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson