Концептуальное моделирование данных: как читать рекурсивное отношение «многие ко многим»

Я понимаю, что простое бинарное отношение, подобное приведенному ниже, будет читаться слева направо: пользователь «может» иметь одно или несколько изображений. Кроме того, если вы читаете его справа налево, это будет... изображение "должно" принадлежать одному и только одному пользователю. введите здесь описание изображения

Однако я немного смущаюсь, когда вижу следующее. Кто-нибудь может сказать мне, как вы понимаете этот тип отношений? Кроме того, на изображении, следующем за изображением ниже, они говорят одно и то же по-разному? введите здесь описание изображения

введите здесь описание изображения

и, наконец, в этих рекурсивных отношениях, где пользователь может быть другом другого пользователя, имеет ли смысл, что оба конца указываются как необязательное множество, или один должен быть обязательным и многими?

Я вижу это так: если у пользователя может быть ноль или много друзей, то на другом конце у него должен быть один или много друзей, потому что, если пользователь A дружит с пользователем B, то у пользователя B больше нет возможности иметь ноль друзей. Верно ли это предположение или я ошибаюсь?

Любые мысли помогут. Я просто читаю книгу по концептуальному моделированию данных и действительно хочу понять это, прежде чем двигаться дальше и практиковаться на реальных таблицах.


person user3832583    schedule 08.11.2016    source источник
comment
Попробуйте выполнить поиск по рефлексивным отношениям или реентерабельным отношениям. Вы можете получить лучшие результаты.   -  person Walter Mitty    schedule 08.11.2016


Ответы (2)


Да, две диаграммы показывают одно и то же.

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

На второй диаграмме показано, что бы вы нарисовали, если бы вместо этого решили разрешить отношение «многие ко многим». Некоторые люди оставляют это до логического моделирования, и вы столкнетесь с той же конструкцией, когда будете читать об этом (что я бы рекомендовал в качестве следующего шага после изучения концептуального моделирования). Я бы прочитал отношения между Пользователем и Дружбой как что-то вроде «У Пользователя могут быть Дружбы».

Эти отношения всегда необязательны, потому что вы моделируете общую картину, а не один конкретный экземпляр. Отображение его как необязательного в правой части означало бы, что каждый пользователь должен иметь хотя бы одну запись во втором столбце таблицы Friendship в базе данных, которую вы в конечном итоге сделаете из этой модели: и это неправда.

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

person Jo Douglass    schedule 08.11.2016

Здесь есть что распаковать. Ответ от Джо Дуглас охватывает много вопросов.

Я полагаю, что часть вашего замешательства связана с тем, что люди используют диаграммы ER для изображения двух очень разных моделей. Первая — это модели сущность-связь, более известные как модели ER. Во-вторых, реляционные модели. Внешне обе модели выглядят практически одинаково. Но у них разные функции, и они созданы для разных целей.

Модель ER может облегчить общение между разработчиком базы данных и экспертом в предметной области. Специалист в предметной области может иметь глубокое понимание данных: как они выглядят, что означают, почему они важны и как их следует использовать. Тот же эксперт в предметной области может мало или совсем не интересоваться техническими темами, такими как внешние ключи, ссылочная целостность или нормализация данных.

Реляционная модель — хороший предварительный результат для проектировщика, намеревающегося спроектировать и построить базу данных в одной из популярных баз данных SQL, таких как SQL Server, Oracle или десятках других.

Ваша последняя диаграмма, на которой есть только поле с надписью «Пользователь», очень лаконична и ясна. Он подчеркивает природу отношения «многие ко многим». Это вполне допустимо в модели ER, но разработчик реляционных моделей скажет вам, что это недопустимо и что требуется распределительная коробка.

Однако у этих отношений нет названия, а именно «Дружба». Именование отношения полезно, если у вас могут быть два отношения, которые в остальном идентичны. Он также предоставляет имя, на которое вы можете повесить атрибуты. В некоторых случаях вас может заинтересовать дата начала данной дружбы.

Является ли отношение обязательным или необязательным, может зависеть от того, анализируете ли вы предмет или разрабатываете решение. Если это первый из них, вы смотрите на предмет, чтобы узнать, является ли он обязательным или нет. Присутствующие здесь технические эксперты не могут ответить на ваш вопрос, потому что мы не знаем вашего предмета, даже если думаем, что знаем.

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

Я надеюсь, что это касается некоторых вещей, с которыми вы боретесь. Дизайн базы данных не сложен. Но это абстрактно.

person Walter Mitty    schedule 08.11.2016
comment
Я нахожу мысленное разделение перехода от концептуальной модели к логической модели, а затем к физической модели очень полезным в этом отношении — начиная с чего-то очень абстрактного и оторванного от технологии, и со временем становясь менее абстрактным. Концептуальное моделирование может стать отличной общей основой для последующего моделирования и разработки — посредством логического моделирования оно может быть преобразовано в реляционную модель для базы данных, а посредством моделирования классов оно может быть преобразовано в проект объектно-ориентированной системы. - person Jo Douglass; 08.11.2016
comment
Согласованный. Концептуальное моделирование — это действительно анализ, а логическое и физическое моделирование — это дизайн. Однажды я сотрудничал с кем-то над новой базой данных, и мы построили логическую модель для DEC Rdb. В конце игры нам сказали перепроектировать для Oracle RDBMS. Логическая модель осталась нетронутой. Здорово! - person Walter Mitty; 08.11.2016