Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
пообсуждаем?... ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 17:58 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
gardenmanпообсуждаем?... Как-то бессмысленно обсуждать, не имея постановки задачи. Флейм получится. Из общих соображений - меня несколько смущает то, что people и organization обязаны быть customer-ами, ну и то, что я назвал "пляска с целостностью" - по понятным причинам аж в таблицу документов залезло техническое поле org_type. Наконец, в данной схеме чрезвычайно неудобен путь от "документа" к "общим атрибутам клиентов". Итого - во-первых, я бы скорее протянул foreign key в обратную сторону (от customer к people/organization). Во-вторых, в doc ссылался бы на customer_id. В-третьих, убрал бы поле типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 18:54 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
автор, в данной схеме чрезвычайно неудобен путь от "документа" к "общим атрибутам клиентов". Как раз наоборот. Все очень-очень просто. За общими отрибутами не надо ходить в People или Org - можно напрямую приджойнить customer. автор Итого - во-первых, я бы скорее протянул foreign key в обратную сторону (от customer к people/organization). Во-вторых, в doc ссылался бы на customer_id. В-третьих, убрал бы поле типа. Приведите пример пожалуйста. Для наглядности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 19:15 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
softwarer Из общих соображений - меня несколько смущает то, что people и organization обязаны быть customer-ами, Можно несколько переформулировать определение кастомера: это любой субъект, с которым приходится иметь дело. Тогда не жалко валить туда и физиков, и юриков. Контрагентом субъект становится в тот момент, когда с ним заключается соответствующий договор. Тогда, чтобы определить контрагента, надо идти от договора, а не от справочника клиентов. Вполне жизнеспособный подход. softwarer ну и то, что я назвал "пляска с целостностью" - по понятным причинам аж в таблицу документов залезло техническое поле org_type. Тоже жизнеспособный подход -- составной первичный ключ, часть которого является внешним ключом. Он тоже может кому-то не нравиться (как мне, например, не нравятся физические FK :)), но, тем не менее, это работает и в OLTP иногда очень удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 12:05 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
2 gardenman Структурно ключом все-таки должен быть customer_id Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Во-вторых в косметических целях поменял бы название customer на party (действующее лицо). Клиент - это скорее роль. У одного действующего лица ролей может быть много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:15 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
авторСтруктурно ключом все-таки должен быть customer_id Сможете обосновать? автор customer на party Я подумаю над этим. Однако привычка - знаете ли большое дело. По мне так абсолютно никакой разницы первичный ключ составной или из одного поля. Для меня существенно другое - Если клиент существует, то для него обязательно должна быть запись в таблице Customer. И опять же Customer должен быть упомянут только один раз и должен иметь совершенно определенный тип. Единственная проблема которую я тут вижу - можно удалить строку из People а в Customer она останется. Поэтому без триггеров такая схема до конца не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:35 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
hardsignМожно несколько переформулировать определение кастомера: это любой субъект, с которым приходится иметь дело. "Субъект" - согласен, будет нормальная сущность. А вот кастомер - не нравится; захочется внести туда собственных сотрудников и выяснится, что приходится обозвать их кастомерами :) Тогда, чтобы определить контрагента, надо идти от договора, а не от справочника клиентов. Вполне жизнеспособный подход. Идти от договора - правильно. В данном случае мне не нравится другое: для того, чтобы получить "общие атрибуты клиента", например категорию, нужно писать запрос типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Получается так, что наиболее нужная информация засунута максимально далеко. Тоже жизнеспособный подход -- составной первичный ключ, часть которого является внешним ключом. Жизнеспособный и иногда очень удобный. Я сам им пользуюсь. Но в данном случае не вижу в его применении никаких преимуществ, только если из принципа показать, что можно ввести признак типа и при этом сделать целостность на внешних ключах. Как неформальный признак - imho такой подход оправдан, когда не нужно вносить дополнительных технических полей, то есть когда поля составного ключа по своему смыслу должны присутствовать в каждой из таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:37 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
автор"Субъект" - согласен, будет нормальная сущность. А вот кастомер - не нравится; захочется внести туда собственных сотрудников и выяснится, что приходится обозвать их кастомерами :) А что, собственный сотрудник разве не может быть кастомером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:43 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
2 softwarer Таблицу Doc я привел в пример лишь для того, чтобы показать как можно накрутить ссылочную целостность на такую схему. Например, если потебуется хранить организацию и ее сотрудников и обеспечить связь между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:48 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
gardenmanА что, собственный сотрудник разве не может быть кастомером? Может. Но совершенно не обязан им быть. Поэтому внешние ключи, например, кастомер -> физик и сотрудник -> физик вполне удобны, а вот notnull-овский физик -> кастомер - искусственен, не отражает реальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 13:56 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
gardenman авторСтруктурно ключом все-таки должен быть customer_id Сможете обосновать? Общеэстетические соображения: Party_idParty_type1'O'1'P' вызывает вопрос так '1' у нас человек или организация? Ответ ясен O1 это одно а P1- другое, но все же.... во-вторых включение смыслового атрибута в суррогатный ключ в общем случае не лучшая практика. Производительность, кодирование: короткие ключи безусловно лучше. А главное, цель (контроль целостности Party - Organization xor Person) достигается и при коротком ключе, зачем усложнять. Наконец, если имеется существующая база, то одно дело добавить UNIQUE, другое реорганизовать PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 14:01 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
ModelRНаконец, если имеется существующая база, то одно дело добавить UNIQUE, другое реорганизовать PK. Хм. Возможно тупой вопрос, но - а в чем разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 14:07 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
2 ModelR взвесил, что вы написали. действительно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Я б на такую схему вообще поставил - "рекомендовано к использованию" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 14:16 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
softwarer ModelRНаконец, если имеется существующая база, то одно дело добавить UNIQUE, другое реорганизовать PK. Хм. Возможно тупой вопрос, но - а в чем разница?Нет тупых вопросов, есть тупые ответы. Надеюсь не этот. Имеется ввиду, что в действующей системе многие запросы, функции и другой код как правило составлены с учетом ПК. Переделываем ПК - переделывает джойны по ПК и еще массу кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 16:05 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
[quot softwarer]В данном случае мне не нравится другое: для того, чтобы получить "общие атрибуты клиента", например категорию, нужно писать запрос типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. М-да, видать я недостаточно внимательно читал исходное сообщение. Конечно, маразм. Мне казалось, что тот факт, что ключ "субъекта" является уникальным (т.е. грубо говоря, и для физиков и для юриков берётся из одной последовательности), очевиден для всех и обсуждению не подлежит. А если взять из договора subject_id, то он будет ключом в subject, а также в одной из таблиц "физик" и "юрик"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2005, 17:16 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
ModelRИмеется ввиду, что в действующей системе многие запросы, функции и другой код как правило составлены с учетом ПК. Переделываем ПК - переделывает джойны по ПК и еще массу кода. Cовершенно не обязательно. Если "старый ПК перестает быть уникальным" - тогда да, геморрой. Если же идет именно реорганизация, типа "старый ПК сделали просто уникальным, а ПК объявили что-то еще" - проблемы будут только у изрядно кривых приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2005, 16:37 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
hardsignМне казалось, что тот факт, что ключ "субъекта" является уникальным (т.е. грубо говоря, и для физиков и для юриков берётся из одной последовательности), очевиден для всех и обсуждению не подлежит. А если взять из договора subject_id, то он будет ключом в subject, а также в одной из таблиц "физик" и "юрик"... Виноват, не подумал об этом. Похоже, просто сказалась привычка к другому типу структур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2005, 16:44 |
|
||
|
Внешний ключ на две таблицы (+)
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли "старый ПК перестает быть уникальным" - тогда да, геморрой. Если же идет именно реорганизация, типа "старый ПК сделали просто уникальным, а ПК объявили что-то еще" - проблемы будут только у изрядно кривых приложений.Согласен, смысл моего поста как раз в этом и был - сохранить уникальность как она есть. Но я под "реорганизацией" понимал именно то, что будет разрешено Party_id; Party_type 1; 'O' 1; 'P' "старый ПК (K1) сделали просто уникальным, а ПК объявили что-то еще (K2)" - мне не пришло в голову, я бы просто создал новый UNIQUE K2. Для чего может потребоваться перестановка ПК = K2 , UNIQUE = K1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2005, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33341077&tid=1545593]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 411ms |

| 0 / 0 |
