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

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


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


Да это не совсем вопрос религии, это теор. вопрос - хотите, что бы у вас хранились избыточные данные, пожайлуста делайте составной ключ, особенно это будет заметно, если у вас на эту таблицу ссылаются более 2ух таблиц.
...
Рейтинг: 0 / 0
15.03.2004, 14:52
    #32441980
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
2 bas\r
Избыточные данные - это как раз введение суррогатного ключа\r
А уж использование (для ссылок) суррогатного ключа вместо естественного - легко может привести к нежелательным артефактам. Вспомни топик Нормальные формы - там именно использование составного ключа (в таблице IDXS) избавляло от артефактов, имеющим место быть при нарушениях 4НФ\r
\r
Так что это действительно вопрос не религии, а теории. Если с таблицей связей нет и не будет - да хоть какой ключ. Если связи есть - уже надо смотреть, что это за связи такие.
...
Рейтинг: 0 / 0
15.03.2004, 16:03
    #32442149
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
А уж использование (для ссылок) суррогатного ключа вместо естественного - легко может привести к нежелательным артефактам. Вспомни топик Нормальные формы - там именно использование составного ключа (в таблице 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
15.03.2004, 16:48
    #32442247
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
Так...
Все это весьма спорно. Мне думается, что применительно к данному топику не следует забывать еще про 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
15.03.2004, 17:06
    #32442283
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
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
15.03.2004, 18:14
    #32442446
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
2ЛП
t5(t4_id, t1_id, t3_id)

Так... А так делать не надо. С самого начала видно, что если t5 зависит от t3, то она уже зависит и от t1.
(Если вспомнить топик про нормализацию, получается, что если поля в индексе зависят от суррогатного ключа индекса, то это автоматом делает их связанными с таблицей, на которой этот индекс (и тогда вязать с t1 не надо), а если, как в том топике, ключ был не суррогатный, то указанного построения здесь и не возникает ;-)).
Вообще говоря, теорию мне тоже надо бы перечитать, но использовать суррогатные ключи я вряд ли перестану - даже если тем самым и буду рисковать нарушить 4НФ ;-)
...
Рейтинг: 0 / 0
15.03.2004, 18:26
    #32442466
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
С самого начала видно, что если t5 зависит от t3, то она уже зависит и от t1
Да вот как раз не видно.
Ссылки на t3 и t1 - могут быть независимыми аттрибутами t5. А могут быть и зависимыми.
...
Рейтинг: 0 / 0
15.03.2004, 18:45
    #32442502
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
Сейчас нет время (и охоты) писать много и убеждать, как должно быть по теории (может я в чем и сам не прав)....
ЛП, ты говоришь что всегда надо ссылаться по сурогатному ключу, но а если есть такая структура, ты то же все по составному ключу будешь делать???
Код: 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
16.03.2004, 10:18
    #32442910
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтетический ключ для таблицы many-to-many
2 bas
ЛП, ты говоришь что всегда надо ссылаться по сурогатному ключу
матьматьмать
факфакфак
епт
слов нет, одни эмоции остались

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

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

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

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

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

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


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


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