Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
отношения...
|
|||
|---|---|---|---|
|
#18+
интересует Ваше мнение: 1. Какой PK лучше использовать и в каких ситуациях в отношении many2many (суррогат, составной по внешним ключам, ...) спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 17:35 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
составной по fk Я понимаю, что пишу правильно и призываю всех следовать моему примеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 17:37 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
а я бы все равно сделал "еще один" первичный, а составной по fk - определил бы как альтернативный (уникальный) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 17:42 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
объясню... если понадобиться сослаться на отношение many2many то понадобиться в ссылающейся таблице создать два поля для fk на many2many. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 17:46 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Роман Дынник... если понадобиться сослаться на отношение many2many то понадобиться в ссылающейся таблице создать два поля для fk на many2many. тоже так думаю, особенно если ключ будет использоваться как внешний во многих таблицах. Еще - иногда надо поменять ПК чтоб что то поправить в данных, при использовании суррогата в качестве ПК все решается безболезненно, да и запросы легче. Хотя если отношение m2m в других отношениях не учавствует видимо оптимальный вариант - составной ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 18:19 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Роман Дынника я бы все равно сделал "еще один" первичный, а составной по fk - определил бы как альтернативный (уникальный) Posted via ActualForum NNTP Server 1.1 Мне тоже кажется, что такой подход обеспечивает большую гибкость и от его использования имеет смысл отказываться только если количество записей предполагается очень большим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 19:33 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Я в many-to-many использую unique-индекс по 2 полям из внешних таблиц и дополнительный ID. Пример: есть справочник субъектов, есть справочник ролей, соответственно для каждой роли есть дополнительные атрибуты. Они как раз привязаны к таблице, описывающей отношение m:n м/у этими таблицами. Они связаны именно по ID. Нельзя искуственно себя ограничивать, утверждая, что такого не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 09:30 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Хотя если отношение m2m в других отношениях не учавствует видимо оптимальный вариант - составной ПК Согласен Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 09:33 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Если есть на эту таблицу (таблицу связи, реализующую N:M) нет ссылок из других таблиц - однозначно составной по внешним ключам. Если есть - то тогда уже думат надо - смотреть на суммарную длину составного ключа в кол-ве полей и в байтах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:28 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Роман Дынника я бы все равно сделал "еще один" первичный, а составной по fk - определил бы как альтернативный (уникальный) Posted via ActualForum NNTP Server 1.1 ... и получил бы артефакты при необходимости ссылок на эту связь. не всегда конечно. Роман Дынник Хотя если отношение m2m в других отношениях не учавствует видимо оптимальный вариант - составной ПК Согласен Posted via ActualForum NNTP Server 1.1 LOL Как раз если в других отношениях не участвует - то хоть каким делай ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 22:24 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
и получил бы артефакты при необходимости ссылок на эту связь. не всегда конечно какие артефакты? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 09:12 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
Простенький пример. Составляем словарь базы данных - таблицы, поля, связи между таблицами. Храним это добро в следующей структуре: Tables ( TableID , Name, Owner, other attributes) TableFields ( TableID , FieldID , Name, Type, Size, other attributes) Relations ( RelationID , TableID , ForeignTableID , Name, other attributes) RelationFields ( RelationID , TableID , FieldID , ForeignTableID , ForeignFieldsID ) PK выделены болдом TableFields.TableID, Relations.TableID, Relations.ForeignTableID - внешние ключи на Tables RelationFields.(RelationID & TableID & ForeignTableID) - внешний ключ на Relations RelationFields.(TableID & FieldID) и RelationFields.(ForeignTableID & ForeignFieldID) - внешние ключи на TableFields Relations является реализацией связи многие-ко-многим с дополнительным ключевым аттрибутом (RelationID, необходим для возможности задания множественных реляций между одной парой таблиц). Для простоты можно принять, что между парой таблиц может быть только одна связь, выкинуть RelationID отовсюду, и получить классическую связь многие-ко-многим. Ну да не суть. Пытаемся избавиться от составного PK в таблице Relations, чтобы не тянуть его дальше по всем связанным таблицам (в нашем случае это RelationFields). Если в Relations составной PK заменить суррогатным несоставным, и соответствующим образом переделать RelationFields, то получим: Tables ( TableID , Name, Owner, other attributes) TableFields ( TableID , FieldID , Name, Type, Size, other attributes) Relations ( RelationID_Ersatz , RelationID, TableID, ForeignTableID, Name, other attributes) RelationFields ( RelationID_Ersatz , TableID , FieldID , ForeignTableID , ForeignFieldsID ) TableFields.TableID, Relations.TableID, Relations.ForeignTableID - внешние ключи на Tables RelationFields.RelationID_Ersatz - внешний ключ на Relations RelationFields.(TableID & FieldID) и RelationFields.(ForeignTableID & ForeignFieldID) - внешние ключи на TableFieldsПри этом имеем очевидную кривизну - в RelationFields могут быть ссылки на TableFields, относящиеся к каким угодно таблицам, в том числе и не входящим в реляцию. Правда пример не очень красивый получился, т.к. от замены составного PK не несоставной в связанной таблице ключ не сократился, ну да ничего. Если избавится от составного ключа в таблице TableFields, то получим сокращение ключа в таблице RelationFields до (RelationID_Ersatz, FieldID_Ersatz, ForeignFieldID_Ersatz). Только вот данные все равно кривые будут. Так что аккуратнее надо избавляться от составных ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 13:37 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
мне что то влом пока доконца вникнуть в предыдущий пост, но ввреху я говорил что составной ключ никуда не пропадает, он просто из первичного превращается в альтернативный(уникальный) так что никакой кривизны в данных не будет. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:42 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
но ввреху я говорил что составной ключ никуда не пропадает, он просто из первичного превращается в альтернативный(уникальный) так что никакой кривизны в данных не будет. ага, точно точно. ссылаться на эту таблицу ты по какому ключу будешь? по новому несоставному - будут кривые данные. по старому составному (который из первичного стал альтернативным уникальным) - тогда нафига тебе вообще этот новый несоставной ключ, если ты его даже не используешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:53 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный - OFF: замечательный ник :) авторага, точно точно. ссылаться на эту таблицу ты по какому ключу будешь? по новому несоставному - будут кривые данные. по старому составному (который из первичного стал альтернативным уникальным) - тогда нафига тебе вообще этот новый несоставной ключ, если ты его даже не используешь? Дело говоришь. Но не стоит ли здесь задуматься над использованием альтернативных способов обеспечения целосности (тех же триггеров напримет) дабы не тащить за собой эти составные ПК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:16 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
2Лох Позорный Бизнес-логику пытаемся навесить на структуру данных? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:31 |
|
||
|
отношения...
|
|||
|---|---|---|---|
|
#18+
2 zdraste Но не стоит ли здесь задуматься над использованием альтернативных способов обеспечения целосности (тех же триггеров напримет) дабы не тащить за собой эти составные ПК? Задуматься - можно и нужно. Описанный случай - это пример нарушения 4-й нормальной формы. В принципе можно всякими триггерами, хранимками, констрейнтами и прочей лабудой компенсировать отсутствие 4-й НФ. И даже 3-ей. И даже 1-ой, если очень хочется :). Иногда так и приходится делать. Только я вряд ли пойду на то, чтобы сознательно устраивать денормализацию только из-за того, что лениво составные ключи таскать за собой. 2 Роман Дынник Бизнес-логику пытаемся навесить на структуру данных? Причем здесь бизнес-логика? Если уж ее упоминать, то не "бизнес-логику" на структуру навесить, а сделать нормальную структуру исходя для затребованной логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32865259&tid=1546110]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 344ms |

| 0 / 0 |
