Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Подскажите пожалуйста как организовать связь.
Есть таблицы:
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 таблицы больше. Зато все понятно что к чему. Но если ты хочешь сделать одной то можно так:
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 картинок всех пользователей не будут повторяться!
Неактивен
Ок. Спасибо за ответ. Оставлю три таблицы - кто знает, что ещё мне понадобится комментировать ))
Неактивен