|
|
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
Есть несколько таблиц, связанных друг с другом, по сути дочерние не могут существовать независимо от родительских, и при этом из самой нижней дочерней нужно легко получить поле любой родительской. Самое красивое решение напрашивается - связать идентифицирующими отношениями. Когда стал рисовать, то задался вопросом: а если в самой нижней таблице есть часть ключа от самой верхней, то почему бы не связать ее сразу же с верхней, а не по цепочке? Ведь нет никакой разницы, из какой таблицы берется, допустим, contract_id, они во всех таблицах одинаковы, т.к. мигрируют между всеми. Для иллюстрации привожу две картинки, скажите, какая из них правильная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:19 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:20 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
Просто прописывать в SQL внешний ключ по одному полю вроде легче, чем один ключ сразу по нескольким полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:23 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
И я могу в обоих случаях написать запрос: Код: sql 1. 2. 3. А могу так: Код: sql 1. 2. 3. 4. 5. И как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:30 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
И два варианта создания таблицы для обеих схем. Какая из них правильная? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:55 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
Только в ключах NOT NULL конечно. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:57 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
svnvlad, В некоторых специфичных случаях денормализация по связям имеет место быть. Например, для хранения просчитанных деревьев, которые живут только на чтение. Для тех квадратиков, что вы нарисовали смысла отходить от феншуя нет. Какие цели преследуются? Для того, чтобы каждый раз не писать многоэтажные джойны есть вьюхи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 03:50 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
R7svnvlad, В некоторых специфичных случаях денормализация по связям имеет место быть. Например, для хранения просчитанных деревьев, которые живут только на чтение. Для тех квадратиков, что вы нарисовали смысла отходить от феншуя нет. Какие цели преследуются? Для того, чтобы каждый раз не писать многоэтажные джойны есть вьюхи. А что под феншуем имеете в виду? Разве миграция ключей не входит в феншуй? Предполагалось, что одна сущность (вагон) будет иметь связи с другими сущностями, которые ее обрабатывают (КПП, склад и т.д.) в соотношении 1:1. Т.е. к таблице вагон пристыковывается таблица отдела, через который вагон один раз проходит, затем другой отдел и т.д. Чем делать двухуровневое соединение, логично предположить, что это ближе к категориям, т.е. первичный ключ один и тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 08:13 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
R7Для тех квадратиков, что вы нарисовали смысла отходить от феншуя нет. Соотношение многие-ко-многим не является случаем, когда первичный ключ должен мигрировать? Ведь без одного из id дочерняя сущность не может существовать. Или решение сделать все связи НЕидентифицирующими определяется просто удобством (стандартностью) дальнейшего составления запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 08:16 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
svnvladR7Для тех квадратиков, что вы нарисовали смысла отходить от феншуя нет. Соотношение многие-ко-многим не является случаем, когда первичный ключ должен мигрировать? Нет, необязательно. Он должен мигрировать, если Вы по классике делаете в связующей таблице первичный ключ из ключей связываемых сущностей. Если Вы вводите суррогат, включать дополнительно в ключ еще и ключи родительских объектов - ну можно, конечно, но необязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 09:16 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
svnvladА что под феншуем имеете в виду? Вы спрашиваете, стоит ли нарушить 4НФ, чтобы стало что-то там хорошо. Да. На практике это почти всегда так. Только, за это придется доплатить. На вашем простом примере доплатить придется лишними контролями целостности. svnvladРазве миграция ключей не входит в феншуй? У вас слишком вольные представления о миграции ключей. Это же не физическая возможность лепить ФК куда станет удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 10:14 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
R7нарушить 4НФ третью с половиной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 10:16 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
svnvladКогда стал рисовать, то задался вопросом: а если в самой нижней таблице есть часть ключа от самой верхней, то почему бы не связать ее сразу же с верхней, а не по цепочке? Ведь нет никакой разницы, из какой таблицы берется, допустим, contract_id, они во всех таблицах одинаковы, т.к. мигрируют между всеми. Это не так. Если "связать сразу с верхней", то в первую очередь получится следующее: wagon связан с contract по contract_id, wagon связан с plan по plan_id, как следствие, contract_id в wagon может не совпадать с contract_id в plan. Если "связать сразу с верхней", и при этом contract_id также является полем первичного ключа в plan, то в результате в wagon окажется два атрибута для contract_id: один мигрировавший из contract, другой - из plan. Даже если средство моделирования позволит их объединить, то есть задать использование одного атрибута в двух внешних ключах, это не даст ничего по сравнению с первым вариантом - просто лишний внешний ключ, на проверку которого будут тратиться дополнительные ресурсы, но который не несёт никакой дополнительной надёжности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:20 |
|
||
|
Идентифицирующие отношения, как правильно сделать миграцию ключей?
|
|||
|---|---|---|---|
|
#18+
softwarersvnvladКогда стал рисовать, то задался вопросом: а если в самой нижней таблице есть часть ключа от самой верхней, то почему бы не связать ее сразу же с верхней, а не по цепочке? Ведь нет никакой разницы, из какой таблицы берется, допустим, contract_id, они во всех таблицах одинаковы, т.к. мигрируют между всеми. Это не так. Если "связать сразу с верхней", то в первую очередь получится следующее: wagon связан с contract по contract_id, wagon связан с plan по plan_id, как следствие, contract_id в wagon может не совпадать с contract_id в plan. Спасибо. Я это уже понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 02:51 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=23&tid=1540662]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 158ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...