|
|
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста. Имеется БД в MySQL. Есть таблицы Блоги Blog_id Комментарии к ним Blogcomment_id Фотки Photo_id Комментарии к фоткам Photocomment_id В данный момент к каждому типу (блоги, фотки) идет своя таблица с комментариями. Я хочу объединить комментарии для фоток блогов, т.к. они по сути полностью одинаковые (вообще имеются не и другие объекты БД с комментариями, но для примера это не важно) и добавить функционала. Создал таблицу comments В которой comment_id – id коммента Group_id – id фотки или блога, к которым пишется комментарий. И пришлось добавить еще type_id, 0 – комментарий к блогам, 1 – комментарий к фоткам. Хочу поставить внешнюю связь между group_id и ( blog_id или photo_id). По сути получается, в таблице должны быть две связи 1. Blog_id ->(group_id+type_id) 2. Photo_id->(group_id+type_id) А вопрос такой: Могу ли я средствами мускула задать такие связи? Или нужно создавать в блогах и фотках еще поле type_id, чтобы была железная связь, гарантирующая целостность данных, т.е. чтобы нельзя было удалить фотку или блог без удаления комментариев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2014, 10:57:27 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
artush Создал таблицу comments В которой comment_id – id коммента Group_id – id фотки или блога, к которым пишется комментарий. И пришлось добавить еще type_id, 0 – комментарий к блогам, 1 – комментарий к фоткам. Хочу поставить внешнюю связь между group_id и ( blog_id или photo_id). По сути получается, в таблице должны быть две связи 1. Blog_id ->(group_id+type_id) 2. Photo_id->(group_id+type_id) А вопрос такой: Могу ли я средствами мускула задать такие связи? Или нужно создавать в блогах и фотках еще поле type_id, чтобы была железная связь, гарантирующая целостность данных, т.е. чтобы нельзя было удалить фотку или блог без удаления комментариев? Это делается не так. Делается два поля Blog_id, и Photo_id, оба nullable, но в один момент одна запись обязательно должна содержать не-NULL в одном из этих двух полей (но не в обоих). Или же по-другому тебе нужно применить наследование, сделать общего предка у BLOG и PHOTO (скажем, таблица GOBJECT), и ссылаться из комментария на одно поле, но уже на этот GOBJECT, который будет и BLOG, и PHOTO. При этом пространство идентификаторов BLOG и PHOTO одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2014, 12:27:32 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ООП на SQL мне пока не доступно. А вот про два поля вопрос. А если будут не только блоги и фотки, а еще десяток объектов, например, комментарии к пользователям, к объединениям и т.п. Для каждого своё поле создавать? И это нормально будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2014, 13:24:18 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ООП на SQL мне пока не доступно. Это не так уж и сложно, почитай, тут быдо 200 раз уже в "проектировании БД". Поищи "наследование таблиц" или "отношение подкатегории", в том числе и мои посты. можно по моим постам поискать "отношение подкатегории". А если будут не только блоги и фотки, а еще десяток объектов, например, комментарии к пользователям, к объединениям и т.п. Для каждого своё поле создавать? Да. И это нормально будет? Да. Ну, относительно нормально, конечно. Можно вместо двух или более полей сделать 2 или более таблицы связи, Comment ( comment_id : comment_text ) PhotoComment( photo_id, comment_id : ) BlogComment ( blog_id, comment_id : ) и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 13:43:03 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
сперва наперво, надо было задаться вопросом, а зачем обьеденять таблицы коментариев??? похожи у тебя , и что? музыкальные форматы тоже похоже, и проигрываються у меня одним проигрываетелем, и мне не приходит в голову раз похожи, конвертировать все в один формат, и тебе думаю тоже. поэтому главный вопрос - а зачем обьеденять? есть код который работает c такой лабудой table name = <entity>_commencts(id,comment,fk_targer) <entity> = photo|blog.... при работе с кодом этим, инициализируешь его под нужный тип и работаешь. вот тебе и универсализация... ещо ОРМ называеться. что ты хочешь оптимизировать этим обьединением??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 14:59:07 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
MasterZiv, всё понял, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 21:03:39 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
[quot alex564657498765453]сперва наперво, надо было задаться вопросом, а зачем обьеденять таблицы коментариев??? похожи у тебя , и что? музыкальные форматы тоже похоже, и проигрываються у меня одним проигрываетелем, и мне не приходит в голову раз похожи, конвертировать все в один формат, и тебе думаю тоже. [.quot] не совсем удачное сравнение. можно было сравнить полностью одинаковые на бинарном уровне с разным расширением, было бы ближе. alex564657498765453поэтому главный вопрос - а зачем обьеденять? т.к. комментарии у всех объектов полностью одинаковые, то держать под каждый тип объекта свою таблицу, их все модифицировать, писать под них хранимки, мне кажется не верно. потом с каждым комментарием может быть связана информация об активности и т.п. тоже что ли в отдельную таблицу для каждого объекта загонять? так я напишу один набор хранимок, будет одна таблица, из которой одной подпрограммой я буду получать массив, который буду загонять в смарти. конечно под каждый тип объекта придётся писать свои пхп процедуры, но от этого не уйти. делать десять одинаковых таблиц, потом их все менять, дорабатывать, мне кажется не совсем верно. вот поэтому. это не оптимизация, а унификация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 21:12:26 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, т.е. я так вижу ситуацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 21:16:40 |
|
||
|
Индекс по двум и одному полю
|
|||
|---|---|---|---|
|
#18+
alex564657498765453сперва наперво, надо было задаться вопросом, а зачем обьеденять таблицы коментариев??? похожи у тебя , и что? музыкальные форматы тоже похоже, и проигрываються у меня одним проигрываетелем, и мне не приходит в голову раз похожи, конвертировать все в один формат, и тебе думаю тоже. поэтому главный вопрос - а зачем обьеденять? Автор справедливо заметил, что структура таблиц одинакова, и сделал логичный вывод (правильный), что сущность одна и та же, и она должна быть реализована одной и той же таблицей. alex564657498765453есть код который работает c такой лабудой table name = <entity>_commencts(id,comment,fk_targer) <entity> = photo|blog.... при работе с кодом этим, инициализируешь его под нужный тип и работаешь. вот тебе и универсализация... ещо ОРМ называеться. Это антипаттерн при работе в/с БД. alex564657498765453что ты хочешь оптимизировать этим обьединением??? Структуру БД. И код работы с ней. Вполне справедливое желание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 21:30:46 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=164&tid=1834299]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 339ms |

| 0 / 0 |
