powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Синтетический ключ для таблицы many-to-many
25 сообщений из 33, страница 1 из 2
Синтетический ключ для таблицы many-to-many
    #32440002
Романыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть стандартная связь User-UserRoles-Roles. Вопрос, чем грозит подмена PK в таблице UserRoles (UserID, RoleID) на пару PK(UserRoleID) + unique index(UserID, RoleID)?
По теории получается т.н. Non-identifying relationship.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32440106
f2f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
f2f
Гость
Ну я обычно так и делаю
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32440118
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничем особым не грозит. Только некрасивостью структуры - лишним сурроатным ключом.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441192
Фотография Quark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НАсколько понял,
связку
Код: plaintext
 PK(UserRoleID) + unique index(UserID, RoleID)

Вы хотите создать для быстрого поиска по имени пользователя?
лучше создайте для этого дополнительный индекс.
Возможно место будет и больше занимать(но не факт), но красивее будет точно.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441348
Романыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, здесь именно подмена PK(UserID,RoleID) на ключ, состоящий из одного поля - UserRoleID плюс альтернативный ключ (уник. индекс ) АК(UserID,RoleID)
Подобная же практика сделана для всех FK таблиц - подмена какого-нить (OrderId(FK),LineNo) на PK(LineID) + AK(OrderId(FK),LineNo).
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441686
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структура PK(UserRoleID) + unique index(UserID, RoleID) нужна когода хочешь, что бы на эту таблицу кто-то ссылался (по UserRoleID), иначе структура должна быть PK(UserID, RoleID)
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441793
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторPK(UserRoleID) + unique index(UserID, RoleID) нужна когода хочешь, что бы на эту таблицу кто-то ссылался (по UserRoleID)
А что, этому кому-то религия не позволяет ссылаться по составному ключу (UserID, RoleID)?
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441857
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП
Да! Именно так! Это - вопрос скорее религии, чем чего-то еще ;-)))
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441952
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, этому кому-то религия не позволяет ссылаться по составному ключу (UserID, RoleID)?


Да! Именно так! Это - вопрос скорее религии, чем чего-то еще ;-)))


Да это не совсем вопрос религии, это теор. вопрос - хотите, что бы у вас хранились избыточные данные, пожайлуста делайте составной ключ, особенно это будет заметно, если у вас на эту таблицу ссылаются более 2ух таблиц.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32441980
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bas\r
Избыточные данные - это как раз введение суррогатного ключа\r
А уж использование (для ссылок) суррогатного ключа вместо естественного - легко может привести к нежелательным артефактам. Вспомни топик Нормальные формы - там именно использование составного ключа (в таблице IDXS) избавляло от артефактов, имеющим место быть при нарушениях 4НФ\r
\r
Так что это действительно вопрос не религии, а теории. Если с таблицей связей нет и не будет - да хоть какой ключ. Если связи есть - уже надо смотреть, что это за связи такие.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442149
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А уж использование (для ссылок) суррогатного ключа вместо естественного - легко может привести к нежелательным артефактам. Вспомни топик Нормальные формы - там именно использование составного ключа (в таблице IDXS) избавляло от артефактов, имеющим место быть при нарушениях 4НФ


Не хочется вспоминать - слишком много пришлось писать....
В том топике шла речь о сурогатном ключе(ссылки) из одной таблицы, что как раз получиться если таблица будет ссылаться на таблицу-связку по составному ключу, т.е.
t1(t1_id), t2(t2_id)
t3(t1_id, t2_id)
t4(t4_id, t1_id, t2_id, text) -- вот это уже нарушение как раз получается, если следовать тому топику

а если сделать так:
t1(t1_id), t2(t2_id)
t3(t3_id, t1_id, t2_id)
t4(t4_id, t3_id, text) -- то все нормально
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442247
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так...
Все это весьма спорно. Мне думается, что применительно к данному топику не следует забывать еще про unique index(UserID, RoleID).

если сделать так:
t1(t1_id), t2(t2_id)
t3(t3_id, t1_id, t2_id)
t4(t4_id, t3_id, text) -- то все нормально
Если t4 зависит от t3, то получается, что t3 - самоценная сущность, и у нее должен быть собственный ключ... С другой стороны, если t3 не рассматривается как самостоятельная сущность, а служит только своей единственной цели обеспечить M:M...

t1(t1_id), t2(t2_id)
t3(t1_id, t2_id)
t4(t4_id, t1_id, t2_id, text) -- вот это уже нарушение как раз получается, если следовать тому топику - то это все построение или вырождается в
t1(t1_id), t2(t2_id)
t3(t1_id, t2_id, text)
или же t4 можно рассматривать как не зависимую от t3 сущность, которая существует наравне с t3 и, кстати, если есть t4_unique_index(t1_id, t2_id), вырождается в t3-подобие. ;-) Так же завися (или завиша ;-))) только от t1 и t2.
С другой стороны, действительно, в процессе проектирования t3-подобные таблицы имеют неприятное свойство "внезапно" становиться самостоятельными сущностями, поэтому себе дешевле заранее запланировать суррогатный ключ типа t3_id. Вот и вся религия.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442283
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bas
авторt4(t4_id, t1_id, t2_id, text) -- вот это уже нарушение как раз получается, если следовать тому топику
Откуда нарушение???????? Исходя из чего?
если бы было
Код: plaintext
1.
2.
3.
4.
t1(t1_id)
t2(t2_id)
t3(t3_id, t1_id, t2_id) - связи с t1 и t2
t4(t4_id, t1_id)        - связь с t1
t5(t4_id, t1_id, t3_id) - связь с t4 по t4_id, t1_id и с t3 по t3_id

то было бы нарушение в t5 - при условии, что в t5 ссылка на t3 должна относится к тому же самому t1.
если такого условия нет - то нарушения нихт. можно ссылаться по чему угодно.
если условие есть - то дефект лечится именно структурой t5(t4_id, t1_id, t2_id) со связями c t4 по t4_id, t1_id и с t3 по t1_id, t2_id. и в этом случае t3_id не нужен, бесполезен и вреден. Запланировать его можно, а использовать для ссылок - нельзя.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442446
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП
t5(t4_id, t1_id, t3_id)

Так... А так делать не надо. С самого начала видно, что если t5 зависит от t3, то она уже зависит и от t1.
(Если вспомнить топик про нормализацию, получается, что если поля в индексе зависят от суррогатного ключа индекса, то это автоматом делает их связанными с таблицей, на которой этот индекс (и тогда вязать с t1 не надо), а если, как в том топике, ключ был не суррогатный, то указанного построения здесь и не возникает ;-)).
Вообще говоря, теорию мне тоже надо бы перечитать, но использовать суррогатные ключи я вряд ли перестану - даже если тем самым и буду рисковать нарушить 4НФ ;-)
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442466
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С самого начала видно, что если t5 зависит от t3, то она уже зависит и от t1
Да вот как раз не видно.
Ссылки на t3 и t1 - могут быть независимыми аттрибутами t5. А могут быть и зависимыми.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442502
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас нет время (и охоты) писать много и убеждать, как должно быть по теории (может я в чем и сам не прав)....
ЛП, ты говоришь что всегда надо ссылаться по сурогатному ключу, но а если есть такая структура, ты то же все по составному ключу будешь делать???
Код: plaintext
1.
2.
3.
4.
5.
6.
t1(t1_id)               t3(t3_id)
 |   t2(t2_id)           |   t4(t4_id) 
 |     |                 |      |
 t5(t1_id, t2_id)      t6(t3_id, t4_id)
     |                       |    
   t7(t1_id, t2_id, t3_id, t4_id)
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32442910
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bas
ЛП, ты говоришь что всегда надо ссылаться по сурогатному ключу
матьматьмать
факфакфак
епт
слов нет, одни эмоции остались

Я НЕ ГОВОРЮ ЧТО НАДО ССЫЛАТЬСЯ ПО СУРОГАТНОМУ КЛЮЧУ !!!
я говорю как раз наоборот

матьматьмать
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32443180
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПЯ НЕ ГОВОРЮ ЧТО НАДО ССЫЛАТЬСЯ ПО СУРОГАТНОМУ КЛЮЧУ !!
bas...ты говоришь что всегда надо ссылаться по сурогатному ключу...
Извиняюсь, по естесвенному ключу имелось ввиду....

Вот статья на эту тему, немного не наш случай, но объясняют, почуму надо использовать сурогатн. ключ и в чем его приемущества, так же сдесь интересен вопрос про НФ:
Естественные ключи против искусственных ключей
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32443503
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bas
Твоей бы ссылкой - да разработчиков аксапты по харе
А то эти уроды все идентификаторы хранят в текстовых полях. Причем даже если это число - приводят к тексту и хранят как текст. И естественные ключи используют, так что переименование единицы измерения вызывает каскадное обновление всех таблиц. Руки оборвать по самую жопу.

Но статья мало относится к теме обсуждения. Против таких суррогатных ключей - нечего возразить.
А вот заменять составной первичный ключ суррогатным - это бред имхо.
Мне вот в наследство база досталась, так ее разработчик видать эту статью прочитал и воспринял как руководство к действию. Научи дурака богу молиться... Пять таблиц, последовательно связанные отношениями один-ко-многим - и везде ключи-счетчики... Поубивал бы.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32443544
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Но и всегда использовать только составные ключи - тоже бред. У меня вон недавно в подобной связке (t1_id, t2_id) одно поле стало необязятельным. Использовал бы составной ключ для связи - была бы развлекуха.
В общем эта... По ситуации смотреть надо.
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32443718
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП,
ладно закончим на этом, главное, на что я надеюсь, что автор понял, что в его случае не нужен сурогатный ключ.
А мы с тобой и так знаем как и что в каких ситуациях делать и спорить из-за неодназначной ситуации и раздувать флейм на 10 страниц нет времени...
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32444239
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bas&Urri правы - несоставной (именно несоставной - суррогатным он быть не обязан) ключ имеет смысл ввести если эта таблица не просто реализует связь - но, так же, соответствует какой-то сущности в системе.

ЛП
Про разработчиков Axapt'ы - смешно...
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32447642
Романыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вся фигня в том, что у меня в базе везде такие синтетические ключи - счетчики.
В итоге Order - OrderLine связаны только через FK и строки заказа нумеруются насквозь через Identity.
Я объяснить не смог, что это бред :-(
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32447652
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому объяснить не смог???
...
Рейтинг: 0 / 0
Синтетический ключ для таблицы many-to-many
    #32447685
f2f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
f2f
Гость
2 Романыч

Вся фигня в том, что у меня в базе везде такие синтетические ключи - счетчики.
В итоге Order - OrderLine связаны только через FK и строки заказа нумеруются насквозь через Identity.
Я объяснить не смог, что это бред :-(


Я тоже не понимаю почему это бред - поясни
Понимаю, что можно делать по разному, но почему бред ?
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Синтетический ключ для таблицы many-to-many
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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