Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Стоит ли делать связь между разными таблицами таким образом? / 12 сообщений из 12, страница 1 из 1
29.03.2016, 13:50
    #39203183
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
Доброго дня!

Есть допустим одна сущность, например "заявки"
Код: sql
1.
2.
3.
4.
TABLE zayavka (
   id          SERIAL,
   xayavkaData TEXT
)


И много разных сущностей к которым заявки могут быть прикреплены, допустим это:
"Автомобили", "Здания", "Оборудование".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
TABLE automobil (
   id          SERIAL,
   autoData    TEXT
)
TABLE building (
   id          SERIAL,
   buildData   TEXT
)
TABLE tehnika (
   id          SERIAL,
   techData    TEXT
)


Стоит ли организовывать связь между заявками и разными сущностями не через отдельные таблицы autoZayavkaRel, buildingZayavkaRel, tehZayavkaRel в которых всё правильно с внешними ключами, а таким образом:
Код: sql
1.
2.
3.
4.
5.
6.
TABLE objZayavkaRel (
   id         SERIAL,
   objType    ENUM ("auto", "building", "tehnika"),
   zayavkaID  SERIAL,
   FK (zayavkaID)
)


Какие минусы у такого способа организации связи между сущностями?
...
Рейтинг: 0 / 0
29.03.2016, 14:39
    #39203256
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
А какой смысл в этой промежуточной таблице?
И да - поле zayavkaID не может быть SERIAL.
...
Рейтинг: 0 / 0
29.03.2016, 14:46
    #39203268
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
Akina, смысл примерно такой же как у любой другой связующей таблицы. SERIAL - описка.
...
Рейтинг: 0 / 0
29.03.2016, 16:13
    #39203360
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
Да никакого смысла.

Возьми первую схему.
Этап 1. Добавь в неё поле objType (мотивируя тем, что можно без обращения к таблицам частных сущностей определить, к какой заднице прикручена заявка).
Этап 2. Полученную таблицу раздели на две в строгом соотношении 1:1.

В итоге получишь вторую схему.

Так вот - если первый этап хоть чем-то обоснован, то второй - полный тупизм.
...
Рейтинг: 0 / 0
29.03.2016, 19:06
    #39203581
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
Akina, ты уж извини, не знаю чем это обосновано, но я не понял что ты рассказал.
...
Рейтинг: 0 / 0
29.03.2016, 19:11
    #39203585
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
В описании кстати серьёзная ошибка, гораздо критичней чем неверно указанный SERIAL :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
TABLE objZayavkaRel (
   id         SERIAL,
   objType    ENUM ("auto", "building", "tehnika"),
   objectID   BIGINT UNSIGNED NOT NULL,
   zayavkaID  BIGINT UNSIGNED NOT NULL,
   FK (zayavkaID)
)


А то связи с объектом никакой нет у заявок.
...
Рейтинг: 0 / 0
29.03.2016, 19:20
    #39203594
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
А стоит или нет я имею в виду вопросы с производительностью.
Если в одной таблице для связи со всеми типами объектов по ключу (objType, objectID) UNIQUE .

Удобство например в том, что можно написать один запрос для разных типов объектов и распределять уже что и как отображать на уровне приложения.

Из минусов - это отсутствие гарантированной связности. Что если удалится допустим строка из automobil , то повиснет бесхозная связь ("automobil", [autoID]) . Но такие записи подчистить периодически не составляет никакого труда.

Или думаю такой способ хранения связей между сущностями использовать для каких-то маловажных в приложении данных. Наример там логи действий пользователя, или всякие стат. данные?
...
Рейтинг: 0 / 0
29.03.2016, 20:12
    #39203618
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
kormotДоброго дня!

Есть допустим одна сущность, например "заявки"
Код: sql
1.
2.
3.
4.
TABLE zayavka (
   id          SERIAL,
   xayavkaData TEXT
)


И много разных сущностей к которым заявки могут быть прикреплены, допустим это:
"Автомобили", "Здания", "Оборудование".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
TABLE automobil (
   id          SERIAL,
   autoData    TEXT
)
TABLE building (
   id          SERIAL,
   buildData   TEXT
)
TABLE tehnika (
   id          SERIAL,
   techData    TEXT
)


Стоит ли организовывать связь между заявками и разными сущностями не через отдельные таблицы autoZayavkaRel, buildingZayavkaRel, tehZayavkaRel в которых всё правильно с внешними ключами, а таким образом:
Код: sql
1.
2.
3.
4.
5.
6.
TABLE objZayavkaRel (
   id         SERIAL,
   objType    ENUM ("auto", "building", "tehnika"),
   zayavkaID  SERIAL,
   FK (zayavkaID)
)


Какие минусы у такого способа организации связи между сущностями?


не стоит, Если отношение между заявкой и другими объектами как 1:N.
Стоит, если M:N.

но делать это одной таблицей вместо трех особого смысла нет.
...
Рейтинг: 0 / 0
30.03.2016, 08:31
    #39203807
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
kormot,

******autoZayavkaRel, buildingZayavkaRel, tehZayavkaRel

если у вас приложение "регистрация заявок", то смысла нет городить огород с тремя справочными сущностями...

приведите хоть примерно характер использования приложения.
допустим "Прием заявок на ремонт "Автомобили", "Здания", "Оборудование".
...
Рейтинг: 0 / 0
30.03.2016, 13:27
    #39204061
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
Alex Ustinov, я эти три объекта и заявки придумал просто исключительно для иллюстрации мысли.
Если привести пример более наглядный, ну комментарии к чему угодно. Т.е. допустим есть на сайте много разных сущностей: События, Персоны, Географ. места, Картинки, Музыка и вот если комментарии ко всему этому хранить в одной таблице. Она одна для всех типов сущностей. Тогда например при добавлении новой сущности, не надо добавлять ещё таблицу связи.
Добавлять много где запросы именно для этой новой сущности не надо. Все обработки и работа с комментариями единообразно. И при появлении новыз разделов/объектов и чего угодно не требуют изменения базы.

Вариант с комментариями тоже выдуманный, а примеры придумываю для иллюстрации, предлагаю на примерах не заостряться.
...
Рейтинг: 0 / 0
30.03.2016, 13:46
    #39204094
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
смысл в том, что для записи Таблицы сущности как вы описали, вы достанете соответствующий комментарий, (в табл. коментарий доп поле ТипСущности, ИдСущности), а вот обратный механизм уже через PREPARE STATEMENT. Это надо иметь ввиду. (т.е. если надо будет посмотреть к чему были комментарии, допустим, определенного человека)

И при добавлении-удалении сущности objType ENUM ("auto", "building", "tehnika") надо будет менять.
...
Рейтинг: 0 / 0
30.03.2016, 14:00
    #39204126
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли делать связь между разными таблицами таким образом?
kormotя не понял что ты рассказал
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Стоит ли делать связь между разными таблицами таким образом? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]