дизайн базы и работа с view

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Привет, я тут думаю над структурой.
У меня в проекте есть такие сущности, как новости, редакторские статьи, посты блогов юзеров и комменты ко всем.
Думаю как сделать таблицу comments, чтобы можно было юзать через AR.
В pg сделал бы sequence для id статей, новостей и постов, в mysql их нет. Если сделаю такой индекс в поле отдельной таблицы - не смогу юзать AR для сущностей.
Получается таблица на каждую сущность + таблица связка для комментов.
Код:
CREATE TABLE comment_binding(
	comment_id INTEGER NOT NULL,
	reference_id int,
	type enum('post','news','page')
)
+ 3 view для комментов по типам сущностей, чтобы не вписывать везде join-ы и условие по типу.
Можно ли в mysql делать делать delete/update для view, созданный по запросу с inner join, как в pg?

Или лучше сделать иначе?
Можно и в таблице комментариев прямо указывать тип.
Код:
CREATE TABLE comments(
	id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
	type enum('post','news','page'),
	post_id int REFERENCES `posts` (`id`),
	news_id int REFERENCES `news` (`id`),
	page_id int REFERENCES `pages` (`id`)
тут вариантов много.

Что думаете?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
кто не юзает ActiveRecord, не знает про сиквенсы и т.д. - пожалуйста, пройдите в соседние ветки :)
рядом есть очень интересные темы - вакансии, обсуждение книг
простите, но давайте здесь про структуру базы и фичи mysql ( если они есть )
 

vovanium

Новичок
Я бы делал по второму варианту зачем там вообще эта таблица связка, у тебя же один коммент не может касаться разных сущностей.
Так же не делал бы разных полей типа post_id,
Просто было бы
id - номер коммента
mid - код модуля
pid - номер родителя которого касается коммент

ну и индекс по mid+pid
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
> зачем там вообще эта таблица связка
ну, типа, нормализация :)
я просто мало с mysql работаю последние годы, все эти постоянные "нельзя, не работает, не реализовано, нестандартно" ... думал, может кто-то что-то расскажет

не делал бы разных полей типа post_id,
Просто было бы
id - номер коммента
mid - код модуля
pid - номер родителя которого касается коммент
разные поля позволяют сделать foreign key - контроль целостности, и удобный способ выборки комментариев для отдельной записи:
PHP:
Comment::model()->findAll('post_id=:postID',':post_id'=>$_GET['post_id']);
что ты имеешь ввиду под "mid - код модуля"?

----
upd: конструкция запроса другая будет:
PHP:
Post::model()->find($post_id)->with('comments');
оно сделает 2 запроса и вернет объект Post с вложенным массивом относящихся к нему Сomments (или LL, если надо),
а без уникального внешнего ключа надо будет добавлять еще условия какие-то,
так что пойду этим путем
 

vovanium

Новичок
ну у меня у каждого модуля есть свой id, т.е. к примеру если новости mid = 1, статьи mid = 2 и т.п. т.е. в данном случае просто больше универсальности, и структура таблицы комментов не зависит от количества модулей её использующих.
а выборка типа mid = 1 AND pid = 123, выводит комменты к новости № 123
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
понял, спасибо,
вижу для себя один недостаток в использовании mid - я очень не люблю магические константы,
т.к. надо или синхронизировать данные с приложением, типа mid='.MID_POSTS.' AND,
или join таблицы-справочника, Post::model()->find($post_id)->with('mids','post_module')->with('comments');
т.е. полюбому хрупкость и зависимость
 
Сверху