|
|
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Есть вопрос, касающийся зависимых сущностей и идентицифирующих связей. Есть две таблицы, связанных идентифицирующей связью, например: "Организации" и "Телефоны организации". У "Организаций" простой первичный ключ (ID). У "Телефонов" кроме собственного ID в состав первичного ключа входит ID организации. Т.е. как обычно описывается в литературе: Если внешний ключ сущности используется в качестве ее первичного ключа (PK) или как часть составного первичного ключа , то сущность является зависимой от родительской сущности. Если внешний ключ не является первичным и не входит в составной первичный ключ, то сущность является независимой от родительской сущности. Появилась необходимость ввести такой атрибут "Организации" как "Основной телефон". Соответственно, для этого в таблицу "Организации" добавляется ссылка на запись дочерней таблицы "Телефоны". А поскольку первичный ключ у "Телефонов" составной, то получается нечто странное и некрасивое: "Организация" ссылается на "Телефон", который зависит от "Организации". И вот получается, что внешний ключ "Организации" так же как и первичный "Телефонов" тоже должен состоять из двух полей.... Но какой смысл в таблице "Организации" иметь свой собственный ID в составе внешнего ключа.... А если ссылаться только на ID "Телефона", то тогда и его первичный ключ должен состоять только из одного поля? Но тогда "Телефоны" по определению, данному в литературе, не будут являться зависимыми сущностями?... Вопрос собственно: как правильнее поступать в данном случае? 1. не включать ID организации в PK телефона? 2. включать ID организации в состав внешнего ключа самой же организации? (бред...) 3. или так связывать эти таблицы вообще нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 15:33 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan ShkuropadskyПоявилась необходимость ввести такой атрибут "Организации" как "Основной телефон". Это не атрибут "Организации", это атрибут табл. "Телефоны" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 16:29 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Все нормально, только не надо было делать составной примарный ключ у дочерней таблицы. Нужен был просто внешний ключ. С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 17:28 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Naf, А всё ж таки действительно, как лучше (какие подводные камни м.б.): поле в главной - указатель на дочернюю (на основной телефон) или поле в дочерней с указанием "типа" телефона (основной/неосновной)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 17:43 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
tanglir, а что ты упёрся в поля телефонов и организаций. Можно завести таблицу связей между телефонами и организациями, так что телефон не будет содержать атрибутов организации (ID организации и признак "основной") и наоборот Организация ничего не будет знать о телефонах. Но вообще решение зависит от того, что ты моделируешь. Если речь идёт о "Карточке организации" (т.е. это не две сущности "Организация" и "Телефон", а на самом деле одна) без первичного учёта телефонов, то телефоны надо рассматривать как часть этой карточки (как запись детализации счёта есть неотъемлемая его часть и без него не существует) со всеми необходимыми атрибутами, например с признаком "основной". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 19:00 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan ShkuropadskyПоявилась необходимость ввести такой атрибут "Организации" как "Основной телефон". Соответственно, для этого в таблицу "Организации" добавляется ссылка на запись дочерней таблицы "Телефоны". А поскольку первичный ключ у "Телефонов" составной, то получается нечто странное и некрасивое: "Организация" ссылается на "Телефон", который зависит от "Организации". И вот получается, что внешний ключ "Организации" так же как и первичный "Телефонов" тоже должен состоять из двух полей.... Но какой смысл в таблице "Организации" иметь свой собственный ID в составе внешнего ключа....А в чем трагедия-то ? Как раз это и является гарантией, что основной телефон будет принадлежать именно этой организации, а никакой другой. Так что нет повода к панике, все нормально. А вот если сделать телефоны независимой сущностью с собственным идентификатором, то организации можно будет привязать в качестве основного любой телефон, даже никак не относящийся к этой организации. Или придется контролировать корректность номера кодом в тригере или процедуре. P.S. IMO, предпочтительнее контролировать корректность данных стандартным механизмом СУБД с помощью внешних ключей. Не надо бояться составных ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 19:24 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, нехорошесть в том, что придётся сначала создать организацию, потом прописать к ней телефоны, а потом в организации указать основной телефон. Т.е. в транзакции как минимум лишний update нужен, а то ещё и запрос к телефонам за ID основного, или такая экзотика, как отложенная проверка ограничений целостности. Поиск по основному номеру будет очень неэффективным, поскольку для определения этого признака придётся заглядывать в "Организации" (или наоборот, перебирать все организации и смотреть какие у них основные телефоны). Видимо от таблиц нужно подняться на более высокий уровень абстракции и повторно выполнить нормализацию и поосторожнее обходиться с сурогатными ключами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 20:37 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модIvan ShkuropadskyПоявилась необходимость ввести такой атрибут "Организации" как "Основной телефон". Это не атрибут "Организации", это атрибут табл. "Телефоны" Вот за все случаи не скажу, но именно в своей БД пошел именно подобным путем. Признак "главности" прописывается в поле дочерней таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 20:42 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
mcureenabChA, нехорошесть в том, что придётся сначала создать организацию, потом прописать к ней телефоны, а потом в организации указать основной телефон. Т.е. в транзакции как минимум лишний update нужен, а то ещё и запрос к телефонам за ID основного, или такая экзотика, как отложенная проверка ограничений целостности.А зачем собственно ? Ссылка на телефон запросто может быть nullable, в постановке явно не указывается наличие основного телефона в организации. Посему необходимость в столь длинной транзакции или отложенной проверки не очевидна. Но если уж номер указан, то обязан принадлежать этой организации, что и будет контролировать составной внешний ключ. Хотя, честно скажу, пока писал предыдущий пост, также склонялся к варианту с дополнительной таблицей. Он, IMO, лучше всего соответствует озвученной постановке проблемы. mcureenabПоиск по основному номеру будет очень неэффективным, поскольку для определения этого признака придётся заглядывать в "Организации" (или наоборот, перебирать все организации и смотреть какие у них основные телефоны).Вы же не считаете все запросы в которых участвует больше одной таблицы неэффективными ? При нормальной нормализации, простите за тавтологию, таких запросов большинство. К тому, что не увидел сути проблемы, что куда-то надо будет "заглядывать", так как в большинстве случаев это приходиться делать всегда. mcureenabВидимо от таблиц нужно подняться на более высокий уровень абстракции и повторно выполнить нормализацию и поосторожнее обходиться с сурогатными ключами.При условии, если мы начнем расширять постановку задачи, например, в сторону ранжирования телефонов. Пока она не кажется очевидной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 21:44 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, авторНо если уж номер указан, то обязан принадлежать этой организации, что и будет контролировать составной внешний ключ. Если этот признак в таблице "Телефоны", то принадлежность телефона организации выполняется автоматически без каких либо вспомогательных FK и проверок. Код: plaintext В данном случае есть простое решение, которое позволяет не делать лишних движений. Довольно странно плодить "тяжёлые" запросы только потому что в системе таковые уже имеются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 22:03 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
mcureenabChAНо если уж номер указан, то обязан принадлежать этой организации, что и будет контролировать составной внешний ключ.Если этот признак в таблице "Телефоны", то принадлежность телефона организации выполняется автоматически без каких либо вспомогательных FK и проверок.Правильно, но тогда могут быть нарушены другие условия. От отсутствия основного номера, что по постановке не страшно, до того что все существующие могут стать основными, что явно некорректно. Декларативным механизмом стандартных ограничений СУБД уже сложно выразить наличие только одного(!) основного номера, посему контроль придется переложить на некий исполняемый код. Не то, чтобы это смертельно, но, IMO, где можно обойтись без него, лучше обойтись. В некоторых СУБД в CHECK можно использовать запросы, но всё равно вариант с полем "основной" в таблице телефонов мне кажется сомнительным. Бросается его явная избыточность, из множества телефонов только один является основным, но признак присутствует у всех. Таким образом вариант с отдельной таблицей "основной номер организации" считаю наиболее правильным. mcureenabChAК тому, что не увидел сути проблемы, что куда-то надо будет "заглядывать", так как в большинстве случаев это приходиться делать всегда.В данном случае есть простое решение, которое позволяет не делать лишних движений. Довольно странно плодить "тяжёлые" запросы только потому что в системе таковые уже имеются.Честно говоря уже перестал понимать, о каком множестве "тяжелых" запросов идет речь. Пользователю не нужны идентификаторы организации и телефонов, а то, что за ними стоит, т.е., наименование организации и номер телефона в его естественной форме. В таком случае, с учетом раздельности сущностей организации и телефонов, слияние между ними придется делать по любому. А вот если номер телефона ввести в основной ключ таблицы телефонов(ид_орг,номер), то, при обратной связи в таблицу организаций, номер в своём естественном виде и так будет представлен в таблице организаций, что как раз и удовлетворяет пожелание избегать любых мало-мальских осложнений при выполнении запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 22:42 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
> Т.е. как обычно описывается в литературе: Не читайте такую литературу. Примите как аксиому: независимая сущность - независимый идентификатор. В вашем случае проблема вот в чем: предприятие не является собственником телефонного номера, она арендует его у оператора. Т. е. фактически идентификатор телефонного номера выглядит как-то так [оператор][тип сети]...[характеристики сети, связанные с маршрутизацией, протоколами, способами соединения и пр.]...[способ идентификации абонентского устройства][публичный идентификатор абонентского устройства]. На самом деле в большинстве случаев поддерживать настолько глубокую идентификацию нет необходимости, используется только публичный идентификатор абонентского устройства. Но при этом важно понимать, что это ничто иное, как оправданное упрощение, подразумеваемые связи остались, несмотря на то, что не регистрируются. Т. о. в данном случае правильной будет структура данных отдельно для номерной емкости, отдельно для предприятий и отдельно - для связей. В таблице связей легко можете использовать дополнительные атрибуты (типа желаемого "основного" телефонного номера. На самом деле это тоже неправильная реализация, телефонный номер не может быть ни основным, ни вспомогательным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2009, 12:26 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky пишет: > Появилась необходимость ввести такой атрибут "Организации" как "Основной > телефон". Соответственно, для этого в таблицу "Организации" добавляется > ссылка на запись дочерней таблицы "Телефоны". А поскольку первичный ключ > у "Телефонов" составной, то получается нечто странное и некрасивое: > > "Организация" ссылается на "Телефон", который зависит от "Организации". Ну и что ж некрасивого ? Только то, что ты не сможешь сразу создать организаию с телефоном, сначала нужно будет создать организацию без телефона, создать телефон, и потом прописать его в организацию. > > И вот получается, что внешний ключ "Организации" так же как и первичный > "Телефонов" тоже должен состоять из двух полей.... Смысла иметь одно и то же поле с двумя значениями нет. Но какой смысл в > таблице "Организации" иметь свой собственный ID в составе внешнего ключа.... У тебя будет два поля -- ссылки на телефон в организации. "IDОрганизации" -- первичный ключ, NOT NULL, и одновременно первое поле ссылки на телефон. "IDТелефона" -- второе поле ссылки на телефон, NULL. > А если ссылаться только на ID "Телефона", то тогда и его первичный ключ > должен состоять только из одного поля? Можно делать телефоны как с одним полем в ПК -- как независимую сущность, так и с двумя полями -- как зависимую. Но тогда "Телефоны" по > определению, данному в литературе, не будут являться зависимыми > сущностями?... Зависимые сущности и зависимые данные -- это не совсем одно и то же. Даже если телефон будет независимой сущностью, а это значит только, что в его ПК не входят ссылки на другие сущности, запись о телефоне может быть связана в БД с записью о организации. Отличие будет только в том, можно ли будет создать телефон без организации (при независимой сущности "Телефон") или нельзя (при зависимой). > Вопрос собственно: как правильнее поступать в данном случае? Можно и так, и так. Тебе только надо посмотреть с точки зрения предметной области, что будет правильнее. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 02:03 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за ответы! Со многими согласен, все точки зрения поняты ;) Подведу промежуточный итог... (варианты с дополнительными таблицами не рассматриваем) 1. Организация и Телефон - независимые сущности , т.е. телефонный номер выдается организации и может теоретически существовать без самой организации. Здесь все вроде просто: Организация: -------------------------- IDОгранизации (Identity) IDТелефонаОсновного -------------------------- PK(IDОгранизации ) FK(IDТелефонаОсновного) _______________________ Телефон организации: -------------------------- IDТелефона (Identity) IDОгранизации -------------------------- PK(IDТелефона) FK(IDОгранизации) _______________________ Никаких вопросов здесь нет, все понятно. Действительно - это тот случай, когда суцщности независимые, а данные - зависимы. 2. Организация и Телефон - зависимые сущности , т.е. телефонный номер организации не может существовать без самой организации на уровне сущностей. Если создавать структуру с помощью CASE-средства (например, MySQL Workbench OSS), то добавление идентифицирующей связи приводит к следующему: Организация: -------------------------- IDОгранизации (Identity) IDОгранизации2 - поле автоматически добавлено при создании ссылки на Телефон IDТелефонаОсновного -------------------------- PK(IDОгранизации ) FK(IDОгранизации2, IDТелефонаОсновного) - внешний ключ включает в себя два поля _______________________ Телефон организации: -------------------------- IDТелефона (Identity) IDОгранизации -------------------------- PK(IDТелефона, IDОгранизации) - составной первичный ключ - зависимая сущность FK(IDОгранизации) _______________________ А вот тут возникает два вопрос: Если все-таки Организация ссылается на Телефон, то как видно выше - в таблице Организация появляется автоматически поле "IDОрганизации2", дублирующее (де-факто) IDОрганизации !!!! это ведь дополнительное место на диске! Была идея удалять это "лишнее" поле, но тогда возникали проблемы с программированием на LINQ (MS .NET Enitity Framework): насколько я понял - необходимо чтобы внешний и первичный ключ полностью соответствовали друг другу. Так вот - стоит ли терпеть это "лишнее" поле? Или нужно любыми способами избавляться от такой неприятной по своим последствиям идентифицирующей связи между этими двумя сущностями? Еще раз спасибо за отклики! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 15:03 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky wrote: > Если все-таки Организация ссылается на Телефон, то как видно выше - в > таблице Организация появляется _автоматически_ поле "IDОрганизации2", > дублирующее (де-факто) IDОрганизации !!!! это ведь дополнительное место > на диске! Это -- проблема твоего CASE-средства. Например, ErWin бы так не сделал. Но решается это легко -- поставь у них одинаковые rolename-ы, т.е. у атрибута, генерирующего "IDОрганизации2" нужно поставить rolename "IDОрганизации". Будет одно поле. Если не понятно, что такое "rolename", то нужно просто поле переименовать в "IDОрганизации" CASE их должен слить в одно поле. Если не сольёт -- это баг. Если не даёт сливать, говорит, что уже такое поле есть -- ну, это уже не баг, это -- фича, брак функциональности. Ну, тогда либо руками его переименовывать в выходном скрипте, либо CASE менять. > Так вот - стоит ли терпеть это "лишнее" поле? Или нужно любыми способами > избавляться от такой неприятной по своим последствиям идентифицирующей > связи между этими двумя сущностями? НеТ, не стоит его терпеть. Не нужно оно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 15:19 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
> составной первичный ключ Просто забудьте, что они бывают. Типичный признак структуры данных, спроектированной баранами. Исключительно фактологических баз данных, для которых это можно было бы использовать, в природе не существует, это миф. И структуры данных, и данные темпоральны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 15:27 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621 wrote: > Просто забудьте, что они бывают. Типичный признак структуры данных, > спроектированной баранами. Вовсе нет. Как раз в рассматриваемом случае есть два пути (которые автор только что изложил). С независимой сущностью "Телефон" и -- с зависимой. Во втором случае, если делать правильно, без составного ключа не обойтись. В общем, мнение твоё, guest_20040621, очень экстремистское. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 15:31 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Я знаю два типа логики: Галилея и Аристотеля. Боюсь, MasterZiv, оба прошли мимо Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 16:12 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky Организация: -------------------------- IDОгранизации (Identity) -------------------------- PK(IDОгранизации ) _______________________ Телефон организации: -------------------------- IDТелефона (Identity) IDОгранизации прочие атрибуты телефона -------------------------- PK(IDТелефона) FK(IDОгранизации) _______________________ и никаких проблем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 16:30 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_мод, вопрос то он задает по тупому чеку хотся, щоб допустим в гриде был "Организация, телефон основной" и при этом хотелось бы этот телефон из лукапа менять по желанию из "Телефоны организации" и при этом НЕ вводить дополнительный признак "основности" в "Телефоны организации" и при этом обойтис только ДДЛ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 18:07 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621Я знаю два типа логики: Галилея и Аристотеля. Боюсь, MasterZiv, оба прошли мимо Вас.Судя по лёгкости перехода на личности, рядом с Вами они тоже не задерживались. Отсутствие логики и вменяемых аргументов всегда можно заменить оскорблениями. Непонятно, зачем временами прикрываетесь Дейтом, он ведь тоже типичный баран. И вместо железной уверенности, что основной ключ может быть только атомарным, блеет какую-то ерунду про фунциональные зависимости подмножеств атрибутов и выбор основного ключа из множества потенциальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 18:12 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, Дейт и вправду баран. БД НЕ есть модель предметной области. В БД НЕТ макрообъектов (множества типов) с указанием конечного числа отношений построенных на этом множестве, нет описания точки входа в макротип. Ключ в БД просто уникальный идентификатор на всякую непонятную фигню....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 18:24 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
> Судя по лёгкости перехода на личности Дружище, задолбало, когда одни и те же люди дают одни и те же идиотские советы. > зачем временами прикрываетесь Дейтом, он ведь тоже типичный баран Как раз Дейт не баран. Проблема в том, что он пишет для баранов, его работа так и называется "Введение...". Понимаете? Т. е. он очень доступно излагает примитивные вещи, чтобы бараны получили хотя бы поверхностное представление о проектировании. Соответственно, примеры из его работы носят исключительно теоретический характер. И если бы бараны внимательно читали Дейта, то безусловно обратили бы внимание на требование независимости ключа. Доступно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 19:36 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Кстати, ChA, раз уж Вы взяли на себя смелось рассуждать о логике, вопрос: объясните, почему при проектировании баз данных следует использовать логику в интерпретации Галилея, а не Аристотеля. Опционально: в чем с точки зрения проектирования заключается принципиальная разница между логикой Аристотеля и логикой Галилея? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 20:24 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621Дружище, задолбало, когда одни и те же люди дают одни и те же идиотские советы.Меня тоже, дружище. Один и тот же участник нередко несёт откровенный вздор без всяких пояснений. Вероятно, считает категоричность достаточным критерием истины. Сдается, мне, что кто-то сильно его обманул. То ли Галилей, то ли Аристотель.guest_20040621Проблема в том, что он пишет для баранов, его работа так и называется "Введение...". Понимаете? Т. е. он очень доступно излагает примитивные вещи, чтобы бараны получили хотя бы поверхностное представление о проектировании. Соответственно, примеры из его работы носят исключительно теоретический характер. И если бы бараны внимательно читали Дейта, то безусловно обратили бы внимание на требование независимости ключа.Браво. В то время как Дейт рассуждает о подмножествах ключевых и неключевых атрибутов, нормализации и функциональных зависимостях, активно пользуясь примерами с составными ключами, некто из независимости ключа легко выводит его атомарность. Аристотель с Галилеем в этот момент явно были в другом месте.guest_20040621объясните, почему при проектировании баз данных следует использовать логику в интерпретации Галилея, а не Аристотеля. Опционально: в чем с точки зрения проектирования заключается принципиальная разница между логикой Аристотеля и логикой Галилея?Если этот вопрос Вас действительно сильно беспокоит, то настоятельно рекомендую погуглить, можете даже начать с Википедии. Доступно излагаю ? Сами справитесь ? Потом доложите. Ну, а если не одолеете, ничего страшного, просто не чешите, само пройдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 00:26 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, дружище, Вам даже Дейта читать рано, несмотря на то, что он пишет очень просто. Начните с логики. Любой. > без всяких пояснений Дорастете до пояснений - получите их. Пока просто читайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 09:31 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифовчеку хотся, щоб допустим в гриде был "Организация, телефон основной" Я с гридами на редактирование не работаю ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 15:28 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621ChA, дружище, Вам даже Дейта читать рано, несмотря на то, что он пишет очень просто. Начните с логики. Любой.guest_20040621, дружище, если судить по дефектам Вашей, то читать вообще вредно. Хотя, надеюсь, что выборка непредставительная и просто имеет место индивидуальная непереносимость.guest_20040621Дорастете до пояснений - получите их. Пока просто читайте.Дружок, от Вас никто никогда ничего не получит. Кроме раздутых щёк и непомерного самомнения. Боюсь, это неизлечимо. P.S. Благодаря таким вот "проектировщикам" базы и "засраны" суррогатными ключами при одновременном дублировании фактической информации и нарушении ссылочной целостности. Тоже наверное читали Галилея с Аристотелем, а потом много думали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 15:47 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, меняйте работу. Мало того, что Вы напрасно получаете деньги за проектирование баз данных, Вы просто глупый человек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 16:41 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621ChA, меняйте работу. Мало того, что Вы напрасно получаете деньги за проектирование баз данных, Вы просто глупый человек.Дружище, не плюйтесь в экран. Посмотритесь в зеркало и Ваше душевное равновесие будет восстановлено. Кстати, неплохо также познакомиться с Гегелем и Кантом, они тоже сильно помогают в проектировании БД, надо только их внимательно слушать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 16:52 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Друзья, не ссорьтесь! :) guest_20040621 , если я правильно вас понял - вы против того, чтобы в состав первичного ключа зависимой сущности входил первичный ключ родительской сущности ? (считаем, что все ключи - суррогатные (int, автоинкремент)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 16:57 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов чеку хотся, щоб допустим в гриде был "Организация, телефон основной" и при этом хотелось бы этот телефон из лукапа менять по желанию из "Телефоны организации" и при этом НЕ вводить дополнительный признак "основности" в "Телефоны организации" и при этом обойтис только ДДЛ. Сахават Юсифов , не обязательно грид, но в целом все правильно :) Или вы считаете такой подход к интерфейсу и/или структуре БД неправильным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 16:59 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ИМХО, примарный ключ должен быть: 1. суррогатным 2. атомарным 2.1 возможное исключение распределенные БД, тогда составной: ключ базы и ключ В базе С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 17:18 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, с равновесием у меня все в порядке, спасибо. Я испытываю сожаление, что напрасно потратил время на контакт с Вами: тупость - худшее из человеческих качеств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 17:49 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_мод, Ivan Shkuropadsky, я воще то сделал акцент ДОПУСТИМ в гриде :) Да нормальная практика, "основное место работы", "старшая жена", "любимый ресторан" ... вся жисть из этого интерфеса и состоит. а вот РСУД не может адекватно все это отразить, там кроме ссылочной целостности (и то до первого селекта без ключа :):):), т.е офигенные возможности трансформации без учета семантики) нифига нету :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 19:03 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621Я испытываю сожаление, что напрасно потратил время на контакт с Вами: тупость - худшее из человеческих качеств.Поздравляю, дружок, осознание своих недостатков - верный путь к выздоровлению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 19:33 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
NafИМХО, примарный ключ должен быть: 1. суррогатным 2. атомарным Можете обосновать необходимость суррогатного атомарного основного ключа в таблицах, реализующих, например, связи сущностей M:N ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 19:38 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Naf пишет: > ИМХО, примарный ключ должен быть: > 1. суррогатным > 2. атомарным > 2.1 возможное исключение распределенные БД, тогда составной: ключ базы и > ключ В базе Это всё верно, но для независимой сущности. Есть сущности исключительно зависимые. Там лишний суррогатный ключ -- это зло. А составной -- нормальное и правильное решение. Пример: Счёт-фактура -- независимая сущность с суррогатным ключём. Позиция счёта-фактуры -- зависимая сущность с составным ключём: идентификатор счёта-фактуры и номер (идентификатор) позиции счёта-фактуры. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 20:58 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA пишет: > Дружище, не плюйтесь в экран. ChA, не надоело ещё на троллей время и нервы тратить ? Ты не пиши ничего -- он и заткнётся. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 21:11 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
MasterZiv ChA, не надоело ещё на троллей время и нервы тратить ? Ты не пиши ничего -- он и заткнётся. Да, нет, даже забавно стало :) Впрочем, ты прав, общаясь с троллем сам понемногу в него превращаешься, надо завязывать. P.S. Просто "задолбало" наблюдать, как любой топик с участием анонима превращается в топик самолюбования. Вот все вокруг такие бараны, и один он, весь из себя такой красивый, прямо в центре стада ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2009, 21:21 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChANafИМХО, примарный ключ должен быть: 1. суррогатным 2. атомарным Можете обосновать необходимость суррогатного атомарного основного ключа в таблицах, реализующих, например, связи сущностей M:N ? Пример: 2 сущности - Организации, ФизЛица множественная ассоциация между ними: Работник(Организация,Физлицо) - многие-ко-многим Организация может содержать множество работников, Физлицо может быть работником нескольких организаций: в разный период действия, а также быть внешним или внутренним совместителем. Сущности начислений и удержаний работников имеют ссылки именно на ассоциативную сущность Работник: именно от параметров ассоциации (оклад, срок выслуги) зависят расчеты по ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 10:02 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
MasterZiv Naf пишет: > ИМХО, примарный ключ должен быть: > 1. суррогатным > 2. атомарным > 2.1 возможное исключение распределенные БД, тогда составной: ключ базы и > ключ В базе Это всё верно, но для независимой сущности. Есть сущности исключительно зависимые. Там лишний суррогатный ключ -- это зло. А составной -- нормальное и правильное решение. Пример: Счёт-фактура -- независимая сущность с суррогатным ключём. Позиция счёта-фактуры -- зависимая сущность с составным ключём: идентификатор счёта-фактуры и номер (идентификатор) позиции счёта-фактуры. Почему не сделать атомарный первичный ключ и внешний ключ на документ-владелец? Если понадобится отразить в агрегированной таблице по какой строке начислен НДС, то достаточно будет добавить атомарный внешний ключ на таблицу позиций. Если же позиция изменится, то в вашем случае придется ее менять и во внешней таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 10:07 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за высказанные мнения! :) Я чувствую, моя проблема сейчас в том, что не могу выработать самостоятельно принципы, по которым сущности следует рассматривать как зависимые... "Независимая сущность не нуждается в информации из другой сущности для идентификации уникального экземпляра." (http://www.interface.ru/ca/comp.htm) Т.е. если не отвлекаться на суррогатность ключей, то исходить нужно именно из возможностей самоидентификации. Поэтому, например: - Банковский счет (организации) - это независимая сущность (от организации). - Сотрудник (организации) - это независимая сущность (идентифицируется как конкретный человек). - Подразделение (организации) - это зависимая сущность. - Адрес (один из нескольких адресов организации) - это независимая сущность. А вот, например, - Контракт (с одним и только одним клиентом) - это зависимая (от клиента) сущность? Ведь у контракта есть свой номер и дата. Следовательно ссылка на клиента для идентификации не требуется. Т.е. контракт - независимая сущность. И еще: Страна, Регион, Город. Регион - зависимая от Страны сущность, поскольку без страны не идентифицируется. Город - зависимая от Страны сущность, НО! независимая от Региона, поскольку есть страны без регионов и город идентифицируется только с учетом страны. Я нигде не ошибаюсь в рассуждениях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 11:18 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовДа нормальная практика, "основное место работы", "старшая жена", "любимый ресторан" ... вся жисть из этого интерфеса и состоит( Есть сущность Человек, у него есть атрибут Список мест работы, один из элементов этого списка имеет атрибут Основное, а остальные - По совместительству. И только так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:36 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChAМожете обосновать необходимость суррогатного атомарного основного ключа в таблицах, реализующих, например, связи сущностей M:N ? Элементарно: аудит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:37 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модСахават ЮсифовДа нормальная практика, "основное место работы", "старшая жена", "любимый ресторан" ... вся жисть из этого интерфеса и состоит( Есть сущность Человек, у него есть атрибут Список мест работы, один из элементов этого списка имеет атрибут Основное, а остальные - По совместительству. И только так.у человека нет основного места работы, а есть основное место работы на такую-то дату ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:42 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Nafу человека нет основного места работы, а есть основное место работы на такую-то дату Все значения атрибутов сущности действительны на дату ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:46 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky, Проблема в том, что все сильно зависит от задачи, области применения. И у всех участников свое видение, собственно спор отчасти из-за этого, мне кажется. Например, сущность Адрес является возможно независимой в БД регистрации граждан по месту проживания. Однако, в бухгалтерской программе адрес контрагента вообще может не являться сущностью, а быть просто строковым реквизитом или сильно зависимой от контрагента сущностью - контакт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:46 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модNafу человека нет основного места работы, а есть основное место работы на такую-то дату Все значения атрибутов сущности действительны на датуопять же, на какую. вам возможно достаточно на текущую, а в другой задаче нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:47 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky Я нигде не ошибаюсь в рассуждениях? Все сущности независимы по определению. Просто между ними м.б. ссылки. Например: есть Организации и Подразделения, Подразделения ссылаются на Организации. Но можно получить список всех подразделений независимо от Организации по какому-либо признаку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:52 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Naf wrote: > Пример: 2 сущности - Организации, ФизЛица > множественная ассоциация между ними: Работник(Организация,Физлицо) - > многие-ко-многим Ну так вы будете суррогатный ключ лепить в работнике ? К слову, у нас в БД он таки налеплен. Но там это диктовалось методологией разработки. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:52 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
MasterZiv Naf wrote: > Пример: 2 сущности - Организации, ФизЛица > множественная ассоциация между ними: Работник(Организация,Физлицо) - > многие-ко-многим Ну так вы будете суррогатный ключ лепить в работнике ? К слову, у нас в БД он таки налеплен. Но там это диктовалось методологией разработки. видите у вас он тоже есть)) и внешний ключ-ссылка из других таблиц к этой ассоциации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:56 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Naf wrote: > Почему не сделать атомарный первичный ключ и внешний ключ на > документ-владелец? Потому что не нужно. Вы его никогда по-хорошему не будете использовать. его можно использовать только при CRUD-операциях с одной записью позиции. Но эти же операции можно делать и с составным ключём, с тем же успехом. > Если понадобится отразить в агрегированной таблице по какой строке > начислен НДС, то достаточно будет добавить атомарный внешний ключ на > таблицу позиций. А можно - составной. Эффект один и тот же. И ещё -- обычно (вроде бы как) по позиции счёта-фактуры НДС не начисляют, начисляют по всей фактуре вместе. Я это к тому, что если на эту таблицу есть ссылки, то уже появляется резон в суррогатном ключе, но я как раз хотел привести пример, когда этого не происходит. > Если же позиция изменится, то в вашем случае придется ее менять и во > внешней таблице PK никогда не меняется, что вы. Если PK меняется, это -- к доктору. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 14:57 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_мод Все сущности независимы по определению. Просто между ними м.б. ссылки. Хм... А как же теория баз данных с её сильными и слабыми сущностями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 15:24 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 15:41 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky, есть сильные и слабые ограничения на связи между сущншстями а не силь и слаб сущности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 15:45 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модСахават ЮсифовДа нормальная практика, "основное место работы", "старшая жена", "любимый ресторан" ... вся жисть из этого интерфеса и состоит( Есть сущность Человек, у него есть атрибут Список мест работы, один из элементов этого списка имеет атрибут Основное, а остальные - По совместительству. И только так. необязательно никто не мешает Чек(ид, (ЧМР)основноместоработы) ЧМР(ид, Чек(работник), МР (местоработы)) МР(ид) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 15:50 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифовнеобязательно А как получить список МР с указанием основной ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 16:46 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Ivan Shkuropadsky Хм... А как же теория баз данных с её сильными и слабыми сущностями? Все теории придумали, когда уже существовали СУБД и практика проектирования БД. Стоят они немного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 16:57 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_мод, а "Основное место" это просто дополнительная роль МР в допотношении Чек_МР1 (Основное место) а список получается от Чек_МР ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 17:44 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Naf wrote: > видите у вас он тоже есть)) > и внешний ключ-ссылка из других таблиц к этой ассоциации У нас совсем другая причина. У нас в БД всё -- объекты, и идентификация у них унифицированная. Только поэтому там суррогатный ключ. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 17:49 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовMasterZiv, А что за картинко ? Я не понял. Только интересно, в каком тулзе нарисовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 17:51 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов, не лучше так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 17:56 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 18:12 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
MasterZiv, своя будет называтся ViPRoS :) проходит регистрацию и сертификацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 18:14 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Визуализтор, интерпретатор, Построитель Реляционно-Объектных Структур :):):) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 18:15 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Т.е. как обычно описывается в литературе: Не читайте такую литературу. Примите как аксиому: независимая сущность - независимый идентификатор. В вашем случае проблема вот в чем: предприятие не является собственником телефонного номера, она арендует его у оператора. Т. е. фактически идентификатор телефонного номера выглядит как-то так [оператор][тип сети]...[характеристики сети, связанные с маршрутизацией, протоколами, способами соединения и пр.]...[способ идентификации абонентского устройства][публичный идентификатор абонентского устройства]. На самом деле в большинстве случаев поддерживать настолько глубокую идентификацию нет необходимости, используется только публичный идентификатор абонентского устройства. Но при этом важно понимать, что это ничто иное, как оправданное упрощение, подразумеваемые связи остались, несмотря на то, что не регистрируются. Т. о. в данном случае правильной будет структура данных отдельно для номерной емкости, отдельно для предприятий и отдельно - для связей. В таблице связей легко можете использовать дополнительные атрибуты (типа желаемого "основного" телефонного номера. На самом деле это тоже неправильная реализация, телефонный номер не может быть ни основным, ни вспомогательным. Да, именно такой подход и используем. Сильно упрощает жизнь. Всегда интересно знать Ваше мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 20:36 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
NafChAМожете обосновать необходимость суррогатного атомарного основного ключа в таблицах, реализующих, например, связи сущностей M:N ? Пример: 2 сущности - Организации, ФизЛица множественная ассоциация между ними: Работник(Организация,Физлицо) - многие-ко-многим Организация может содержать множество работников, Физлицо может быть работником нескольких организаций: в разный период действия, а также быть внешним или внутренним совместителем. Сущности начислений и удержаний работников имеют ссылки именно на ассоциативную сущность Работник: именно от параметров ассоциации (оклад, срок выслуги) зависят расчеты по ним.Честно говоря, не ожидал столь широкой трактовки таблицы связи, под которую можно подвести любую таблицу, из которой есть ссылки на пару любых сущностей. Ваш пример описывает скорее процесс, чем состояние. Не то, чтобы это принципиально что-то меняет, но суть вопроса затемняет. Поэтому поправлюсь, подразумевались таблицы, в которых для идентификации любой из её строк достаточно упомянутых ссылок. Навскидку: "Фильм"-"Жанр" "Книга"-"Автор" "Рецепт"-"Ингредиент" "Диагноз"-"Симптом" "Сплав"-"Элемент" и т.п. При этом, таблица связи может иметь какие-то дополнительные поля, это неважно. Но ключ уже есть - идентификаторы обоих сущностей(пусть каждый из них суррогатен и атомарен). Что даст добавления в такую таблицу ещё одного поля - суррогатного атомарного идентификатора ? И выбор его в качестве основного ключа ? А вот если отказаться от идентифицирующей пары, хотя бы, в качестве альтернативного ключа, то возникает реальная опасность, получить сколько угодно повторяющихся пар с одинаковыми значениями. И зачем ? _модЭлементарно: аудитВ принципе, та же проблема. Для идентификации строки недостаточно ссылок, нужны дополнительные поля, например, время события. Но тогда столкнемся с другой проблемой, дискретность, с которой можно получить время от компьютера, да и хранить тоже. Не говоря уж о том, что, в многозадачной среде события могут происходить "одновременно". Поэтому лучшим вариантом здесь действительно является суррогатный ключ, благодаря тому, что генератор суррогатных значений сериализует обращения. _модВсе сущности независимы по определению. Просто между ними м.б. ссылки. Например: есть Организации и Подразделения, Подразделения ссылаются на Организации. Но можно получить список всех подразделений независимо от Организации по какому-либо признаку.Хотелось бы увидеть это определение. На мой взгляд, выглядит спорно. Иначе зачем говорить о том, что они независимы, если других(по определению) не бывает. Возможность независимого доступа, IMHO, вовсе не означает независимости описываемых в БД сущностей, это свойство РБД, так как все данные хранятся в раздельных равнодоступных плоских таблицах. В иерархических же системах хранения данных такой доступ был бы "нелегален". В данном примере, удаление организации автоматически подразумевает удаление всех его подразделений. Они попросту не могут существовать вне организации. Что это, если не зависимость ? Да и ценность получения списка подразделений независимо от организации сомнительна. P.S. Удобство и применимость суррогатных ключей не оспаривалось. Они нужны для решения разного рода практических задач, начиная с упрощения запросов, физического размера БД, скорости слияний, для той же сериализации, наконец. Оспаривалась необходимость автоматического их включения в любую таблицу и полный отказ от составных ключей. Хуже того, суррогатный ключ может провоцировать на отказ от альтернативных ключей. К сожалению, это реальность, приходилось сталкиваться с таким подходом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2009, 01:28 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChAОни попросту не могут существовать вне организации. Что это, если не зависимость ? Сущности ссылаются друг на друга - вот и появляется иллюзия зависимости. Так подразделение просто нельзя добавить, если нет организации - это просто обязательное поле. И удалить ничего нельзя, если есть ссылки. ChAДа и ценность получения списка подразделений независимо от организации сомнительна. Ну например все ИТ подразделения всех организаций Проще говоря - сурр. ключ никому не мешает, но может оказаться полезен в любой момент развития системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2009, 13:33 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модChAОни попросту не могут существовать вне организации. Что это, если не зависимость ?Сущности ссылаются друг на друга - вот и появляется иллюзия зависимости. Так подразделение просто нельзя добавить, если нет организации - это просто обязательное поле. И удалить ничего нельзя, если есть ссылки.Сущности равнодоступны, вот и появляется иллюзия независимости. IMHO, вполне симметричный аргумент. У меня создалось впечатление, что со стандартом IDEF1X Вы совсем не знакомы, равно как и с понятиями идентифицирующей и неидентифицирующей связи. Судя по всему, определения не будет._модChAДа и ценность получения списка подразделений независимо от организации сомнительна.Ну например все ИТ подразделения всех организацийКак-то уже обсуждалось нечто подобное. В большинстве случаев, полезность такой информации имеет разве что статистический характер. "Есть ложь, есть наглая ложь, а есть статистика"©. Не то, чтобы она вовсе бесполезна, но в данном примере её ценность стремится к нулю. Например, в данном случае, станет известно, что из 10 организаций 5 имеют IT-отделы, хотя лично я бы не взялся определить их только по названию подразделения. И что ?_модПроще говоря - сурр. ключ никому не мешает, но может оказаться полезен в любой момент развития системы.Т.е., места он не просит, индекс тоже обходится бесплатно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 06:20 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChAУ меня создалось впечатление, что со стандартом IDEF1X Вы совсем не знакомы, равно как и с понятиями идентифицирующей и неидентифицирующей связи. Бесполезные понятия. Т.е., места он не просит, индекс тоже обходится бесплатно ?[/quot] Это да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 10:06 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модChAУ меня создалось впечатление, что со стандартом IDEF1X Вы совсем не знакомы, равно как и с понятиями идентифицирующей и неидентифицирующей связи.Бесполезные понятия.Следовательно, бесполезна и декларативная ссылочная целостность. Удручающая тенденция. P.S. Наткнулся на забавный пример из практики одного из "светочей", близкого соратника Дейта, автора Practical Issues in Database Management: A Reference for the Thinking Practitioner . Вместо 4 сущностей сделал 5, но так и не обеспечил декларативной ссылочной целостности. Но все таблицы с обязательным атомарным суррогатным ключом и никаких идентифицирующих связей. Печальное зрелище, IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2009, 23:41 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChA, Тупой товарищ какой-то этот паскаль, как и дейт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 00:55 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
А так конечно не хватает в СКЛ CHECK ограничени Plan.Company.ID=Employee.Company.ID вот как только эту фигню вводишь, сразу все становися кайф :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 01:03 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
ChAСледовательно, бесполезна и декларативная ссылочная целостность. С чего бы это ? Если атрибут сущности есть ссылка на другую сущность, то необходимо обеспечить отсутствие битых ссылок. Кто и как это будет делать - вопрос второй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 09:25 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_мод, Т.е., предлагается перетащить составные ключи? Таким образом СКЛ решает указанную ChA пробему, но это решение не красивое. Во первых составной ключ-мигант РАЗДЕЛЕН, его частей можно убить, можно интерпретировать по отдельности, их нельзя без допусилий нормаотно редактировать и т.д. А суррогат все это опеспечивает, но имеет свои недостатки (указанное выше + невозможен нормальный лукап без доп усилий). Если ввести чек констрейнт для целостности + лукап поле для суррогата (да хоть вычислимое поле) в метаданных, то суррогат намного лучше составных ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 13:53 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
Что интересно, в NET DataSet этот механизм реализован. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 14:04 |
|
||
|
Зависимые сущности и идентифицирующие связи: ссылки основной таблицы на записи дочерней
|
|||
|---|---|---|---|
|
#18+
_модChAСледовательно, бесполезна и декларативная ссылочная целостность.Если атрибут сущности есть ссылка на другую сущность, то необходимо обеспечить отсутствие битых ссылок.До тех пор, пока это касается только пары соседних отношений, не вопрос. Но переходя на уровень БД в целом и отказываясь от составных ключей, автоматически отказываемся от одной из удобных возможностей обеспечить логическую непротиворечивость данных стандартными механизмами СУБД. Я ведь не зря дал эту ссылку . Типичная ситуация, возникать может совершенно с разными "действующими лицами". В случае варианта BF , проверка на участие работника только в проектах "своей" организации(или подразделения в рамках одной организации, не суть) лежит на СУБД. При любой попытке подключить его к плану "чужой" организации сработает ограничение по FK. Вариант Fabian Pascal будет честно отрабатывать только на "соседей", обеспечивая, так сказать, целостность на уровне домена, но зато в таблице участников проекта может запросто оказатся противоречивая информация, т.к, формально, работника легко подключить к проекту "чужой" организации. При этом, он был вынужден добавить ещё одну сущность, чтобы остаться в рамках атомарности ключей. _модКто и как это будет делать - вопрос второй.В этом, IMO, и заключается основное противоречие между "остроконечниками" и "тупоконечниками". Мне более правильным кажется подход, когда непротиворечивость данных в БД, по максимуму, держится на стандартных механизмах декларативных ограничений. Это последний бастион, так сказать. И в этом случае, составные ключи могут играть очень важную роль, в том числе, и повышая производительность определённого вида запросов. Понятно, что это не панацея от всех бед, так как не все ограничения бизнес-логики возможно решить декларативно на уровне современных РСУБД. И хотя в стандарте SQL 2003 появились любопытные, на первый взгляд, вещи, которые могли бы улучшить ситуацию, но, судя по темпам миграции ведущих игроков на рынке РСУБД в сторону стандартов, боюсь, они нескоро войдут в стандартный арсенал. Вы же, насколько понимаю, сторонник упрощённого подхода и большинство проблем с непротиворечивостью данных на уровне БД, может за исключением самых простых, готовы решать процедурно. У меня он не вызывает принципиальных возражений, если грамотно реализован, но это, скорее, исключение, чем правило. Был неоднократным свидетелем картины, когда проектировшик БД, похоже, полагал, что его роль заключается в простом добавлении во все таблицы атомарного суррогатного ключа и дело в шляпе. Всё, что потом натягивалось на это сверху, выглядело нисколько не лучше. Результат был предсказуем, в данных можно было найти немало "мусора", что подчас приводило к странного вида запросам, например, активного использования DISTINCT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2009, 06:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1543054]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
107ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 412ms |

| 0 / 0 |
