powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по идентифицирующей и неидентирующей связи
14 сообщений из 14, страница 1 из 1
Вопрос по идентифицирующей и неидентирующей связи
    #38045799
juventine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Новичок в вопросах построения моделей БД, поэтому мои вопросы могут показаться "лузерскими". Тем не менее, прошу отнестись с пониманием.

Прошелестел кучу информации относительно идентифицирующей и неидентифицирующей связях. Вот, так сказать, кратенько о том, что вынес:

1. Если связь идентифицирующая ( то есть, первичный ключ родительской таблицы мигрирует в первичный ключ дочерней таблицы).
2. Если связь неидентифицирующая, то первичный ключ родительской таблицы просто мигрирует в дочернюю, но в первичный ключ не входит.

По этой теме не могу взять в толк (такое ощущение, что я просто не понимаю каких-то основополагающих вещей):

1. Зачем нам в первичный ключ ( при идентифицирующей связи) дочерней таблицы включать первичный ключ родительской? Какой в этом практический толк? В чем кроется суть? Почему мы не можем просто добавить первичный ключ родительской таблицы как NOT NULL, при этом не включая его в первичный ключ дочерней? В чем кроется разница?

Может, это каким-то образом ускорит выборку данных? Повлияет на целостность БД, консистентность данных?

Вот, к примеру, практический случай. Есть у нас ИС -- "телефонно-адресная книга". Все телефоны привязаны к какому-то конкретному адресу. Получаем идентифицирующую связь ( телефон (имеется ввиду городской) не может существовать без адреса). Практический смысл мне включать PK таблицы Адреса в PK таблицы Телефоны (в нашем случае, я так понимаю, в таблице Адреса получится составной первичный ключ -- из полей ID_адрес и из поля ID_телефон?).

Просветите, плиз, ситуацию... А-то как-то никак в толк не возьму.)
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046029
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот другой пример - телефоны предприятия с расширениями типа телефон 777-7777 ext 4444. Расширения имеют смысл и уникальность только в контексте родительского основного номера. Связь между основным номером 777-7777 и полным номером 777-7777 ext 4444 будет идентифицирующей.
1. Полный телефонный номер должен быть уникальным, т.е. оба основной номер и расширение должны быть частями первичного ключа дочерней таблицы. Одно расширение не может быть правильным первичным ключем поскольку запрещает записи типа 888-8888 ext 4444 в комбинации с 777-7777 ext 4444.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046042
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juventineДобрый день!
Новичок в вопросах построения моделей БД, поэтому мои вопросы могут показаться "лузерскими". Тем не менее, прошу отнестись с пониманием.
Прошелестел кучу информации относительно идентифицирующей и неидентифицирующей связях. Вот, так сказать, кратенько о том, что вынес:...
Ничего Вы не прошелестели. А вынесли что-то частное и субъективное:)
http://citforum.ru/database/case/glava2_4_2.shtml
Важно, что эти термины никакого отношения к моделям данных не имеют. Они носят весьма частный характер. Проще рассматривать такой атрибут связи, как обязательность связи со стороны одного из связываемых Типов сущностей. А что касается "ключей", то приведенные Вами идеи относятся лишь к таким системам, в которых не поддерживается идентификация сущностей (например, это относится к весьма распространенным "реляционным системам).
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046043
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juventine, возможно, имеет значение деление сущностей на независимые и зависимые (могут быть другие назваеия: сильные, слабые и т.д.). Зависимые типа нуждаются в независмых, чтобы представлять информационное значение. Например, в плановом отделе есть договоры и этапы этих договоров. Сущность "Этап договора", без свойств Сущности "Договор", неизвестно как какому Договору относится и, скорее всего, имеет малую информационную ценность. И связь Договоров с этапами можно, по видимому, считать идентифицирующей в том смысле, что с помощью этой связи, через договор, этап нельзя перепутать с этапми другого договора.
А вот сущность Подразделение, скорей всего тоже независимая как и договор. И их связи с этапми, не имеет, скорее всего, считать идентифицирующей: она мало поможе при идентификации, скорее всего
.
Первичные ключи часто считаются идентифицирующими. Потому, скорее всего, их использование в таких связях, как правило, уместно. Это улучшает семантичность модели.
Производительность - это физические аспкты, влияние которых на логические не желательно, скорее всего. А на концептуальную МД, вроде, вообще не уместна: оная стремится абстрагироваться от компьютерной реализации в принципе. Т.е. в общем случае даже от типа СУБД: на этапе концептуального проектирования может быть в общем случае не известно будет ли это реляционная, иерархическая, объектно-ориентированная или другая СУБД. Тем более о производительности. На этом этапе хоть бы понять что за данные в БД должны быть.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046311
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juventine 1. Зачем нам в первичный ключ ( при идентифицирующей связи) дочерней таблицы включать первичный ключ родительской?
Например чтобы не делать лишнего индекса. Если на этот первичный ключ нет ссылок, то это вполне имеет смысл.
juventine Практический смысл мне включать PK таблицы Адреса в PK таблицы ТелефоныОдним из популярных запросов будет - дайте все телефоны указанного адреса.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046313
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei.Agalakov,

Хороший пример. Насколько понял автора, там скорее всего, больше проблема с есстественными и суррогатными ключами.
В вашем примере - всё наглядно. А вот если в обе таблицы ввести суррогатный первичный ключ, то становится "неочевидно":

1. Телефоны - phones {pkey(id), vchar::number}
2. расширения - addings {pkey(id), fkey(phones.phone_id), vchar::addition}

Мне кажется, что вопрос у автора как раз тут: нафига включать внешний ключ к таблице телефонов в первичный ключ таблицы расширений? То есть чем лучше такое:

2а. расширения - addings { pkey(phones.phone_id, id), vchar::addition}

?

По мне, так "особой разницы нет", разве что первичные ключи часто выделены в движках в особое явление и по ним обработка идет таки "чуть быстрее"... или есть ещё нюансы?
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046377
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109А вот если в обе таблицы ввести суррогатный первичный ключ, то становится "неочевидно":


Возможно, вопрос навеян CASE средствами, которые зависимые сущности рисуют прямоугольниками, со скуругленными углами. Но для этого первичный ключь независимой входит в состав первичного в зависмой. Что характерно для естесвенных ключей. Для суррогатных не входит в первичный, как правило, а просто внешний ключ. На то он и суррогатный, что идентифицирует программные объекты, а не сущности реального мира. И потому включать их в первичные других может выглядеть удручающе в общем случае: одно из их преимуществ как раз и есть отсутсвие необходимости составных первичных ключей. И на диаграмме такое CASE средство рисует сущность как незавимую с суррогатами, хотя автор хотел как зависимую: лучше читаемость. Ну при юзании суррогатных не очевидно, наверное, завимая или нет.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046459
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo,

:) вывод: "не пользуйтесь такими CASE средствами" :)

насколько понял, ключевые вопросы автора были эти:
"Какой в этом практический толк?
Может, это каким-то образом ускорит выборку данных?
Повлияет на целостность БД, консистентность данных? "

, а вовсе не про "CASE средства". :)
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046463
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

P.S. я вижу только то, что можно встроенный первичный ключ зависимой сущности (2а) сделать существенно коротким: например однобайтовым, если максимальное количество записей, связанных с каждой отдельной первичной сущностью (таблицей) - невелико.

В примере: внутренних телефонов у одного номера меньше 256, или у автора: городских телефонов по одному адресу меньше 256. Ну или слово... или как ишо. Другого "практического" выхлопа - не вижу.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046495
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109:) вывод: "не пользуйтесь такими CASE средствами" :)


Возможно, такой вывод преждевременный. Если нельзя понять зависмая или не зависмая, то, может, и на CASE средство пенять не стоит. Ну будут все выглядеть как независимые.


Arhat109насколько понял, ключевые вопросы автора были эти:
"Какой в этом практический толк?
Может, это каким-то образом ускорит выборку данных?
Повлияет на целостность БД, консистентность данных? "

, а вовсе не про "CASE средства". :)
Вообще-то он типа про идентифицирующие связи спрашивал. Это вообще ближе к ER модели. Она на концептуальном уровне: еще может быть и тип СУБД не выбран на этом этапе. Какая тут производительность?
Сама же ER модель имеет значительно большее практическое значение чем производительность: неудачно спроектированную БД, возможено, сложно компенсировать программными ухищрениями.
Или этапы с моделированием - это чисто пустое теоретизирование?
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046578
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo,

Да, не, почему. (прямо по Задорнову) :)

Всё что Вы написали, безусловно важно на этапе пострения модели. В т.ч. и использование средств автоматизирующих проектирование. Просто мне показалось что автора интересовал другой круг вопросов. Совсем другой.
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38046606
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109, возможно, и на другой.
Но все же он явно упомянул идентифицирующие связи, и из связь с миграцией первичных ключей и вход их в другие первичные. И если его интересует другое, то он сможет, по крайней мере, предположить, что эти связи к этому другому, возможно, имеют слишком отдаленное отношение. Они как бы больше относятся к более важным вопросам в общем случае, чем это "совсем другое".
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38047888
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juventineПрошелестел кучу информации относительно идентифицирующей и неидентифицирующей связях. Вот, так сказать, кратенько о том, что вынес:
Искренне сочувствую. Это пожалуй наиболее дурацкий момент в существующей теории.

Понятие идентифицирующей связи имхо придумал сугубый теоретик просто "чтобы было красиво", никакого практического смысла в таком разделении нет. На практике гораздо удобнее и полезнее думать в терминах "есть атрибут", "есть связь (просто связь - без эпитетов)", "атрибут входит в первичный ключ", "атрибут входит во внешний ключ". То есть - делайте неидентифицирующие связи и не парьтесь; в тот момент, когда почувствуете желание включить атрибут внешнего ключа в первичный - обдумаете и может быть сделаете, вот и всё.

Позволю себе сразу добавить выжимку по остальным "ярким моментам" теории применительно к транзакционным системам (то есть БД, рассчитанным на ввод и редактирование данных пользователями). Пункт первый: первичный ключ таблицы практически всегда должен быть простым (из одного атрибута). Единственное более-менее частое исключение - развязки многие ко многим; иногда нужно сделать таблицу развязки между двумя-тремя другими, и тогда как правило вполне подходит ключ из внешних ключей на эти таблицы. Второе: если на таблицу есть ссылки (то есть у неё есть дочерние), ключ тем более должен быть простым. Третье: ключ практически всегда должен быть суррогатным. По факту, если Вы примете за правило делать у любой таблицы простой суррогатный ключ, то будьте уверены, получившаяся система будет мало отличаться в этом смысле от наилучшей возможной. С ростом опыта Вы нащупаете редкие случаи, когда от такой практики можно или даже стоит отступить, а пока - лучше не делайте этого.

Наконец, стоит упомянуть один особый случай - ромб. Представьте себе, что у нас есть таблица А, на неё ссылаются Б и В. Нам надо сделать таблицу Г, ссылающуюся как на Б, так и на В. В этом случае возможен следующий приём: у таблиц Б и В делается составной первичный ключ, включающий в себя ключ А. В Г, соответственно, внешние ключи, ссылающиеся на эту таблицу и использующие один и тот же атрибут a_id для значения ключа, мигрировавшего из А. Таким образом возможно элегантно реализовать бизнес-правило "Г должно ссылаться на Б и В, ссылающиеся на одну и ту же запись в А". Такая структура востребована, например, если А и Б - мастер и деталь (скажем, счёт и его позиции), а В и Г - другая мастер-деталь, порождённая первой (скажем, расходная накладная и её позиции). Для удобства работы при этом Б и В по-прежнему должны содержать поле суррогатного ключа (то есть их первичный ключ избыточен - из него можно исключить ключ А, и он всё равно останется ключом).
...
Рейтинг: 0 / 0
Вопрос по идентифицирующей и неидентирующей связи
    #38048113
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juventine,
возможно, теории тут вообще никакой нет (нет, скорее всего, собсно теорем никаких с этим связанных). В лучшем случае это может быть в каких-нибудь стандартах. Стандарты у них, у бржуа либеральные: хотите пользуйтесть, хотите нет. Выбор альтернатив за проекировщиком.
Это упоминается при описании ER. Оная испотльзуется на этапе концептуального проектирования (соглано методом от буржуа). Практичность, только если ER окажется выразительнее: представление предметной области может быть получше. Например, в общем случае Концептуальное проектирование и Логическое могут выполнять разные люди. Кроме того, концептуальная может быть использована для согласования с заказчиком информационных требований. Т.е. практичность, может быть, связана со снижениями рисков ухудьшения качества проектирования.

Если БД простая, то ER, может быть, вообще не нужна: проектирование снизу или вообще как получится. Чисто РМД может хватить: ее достоинства как раз в простоте интерпритации данных и позволяют многим вообще ниче не знать про ER.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по идентифицирующей и неидентирующей связи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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