ERD - Как смоделировать отношение между двумя объектами с третьим объектом как «атрибут» - PullRequest
3 голосов
/ 03 ноября 2010

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

У меня есть три объекта: сотрудник, проект и роль. Между Сотрудником и Проектом существует связь: сотрудник работает над проектом. Но этот сотрудник не просто работает над этим проектом, у него / нее есть область деятельности, которая определена как роль. Но разве отношение не описывается только атрибутами? Как я могу сделать что-то вроде "Сотрудник работает над этим проектом как ..."? Конечно, я использовал в качестве атрибута roleId, как и его базу данных, но какова связь с ERD?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2010

СОТРУДНИК

  • employee_id (pk)

PROJECT

  • project_id (pk)
  • project_description

ROLE

  • role_id (pk)
  • role_description

Если сотрудник может иметь только одну роль в проекте:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk to PROJECT)
  • employee_id (pk, fk to EMPLOYEE)
  • role_id (от fk до ROLE)

Если сотрудник может иметь только 1+ роль в проекте:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk to PROJECT)
  • employee_id (pk, fk to EMPLOYEE)
  • role_id (pk, fk to ROLE)

Разница между ними заключается в том, что составной первичный ключ включает в себя роль в последней версии.Будучи составным первичным ключом всех трех столбцов, комбинация значений должна быть уникальной, что делает допустимым следующее:

project_id  employee_id  role_id
---------------------------------
1           1            1
1           1            2

Принимая во внимание, что если role_id равен , не, включенный в составной первичный ключ, может быть создана только одна комбинация пользователя и проекта - это означает, что пользователь может иметь только одну роль.

Ограничение CHECK не будетне работает - он проверяет только строку, а не всю таблицу.Хотя триггер сработает, зачем беспокоиться, когда вы можете принудительно установить связь через составной первичный ключ или уникальное ограничение?Триггер не будет виден в ERD, а также такие операторы, как CREATE TABLE или DESC table_name.

3 голосов
/ 04 ноября 2010

Как смоделировать отношение ... сущность ... атрибут?

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

Это вполне понятно и совершенно правильно.Бумага дешева, объекты в базе данных немного дороже менять.Смоделируйте требование и продолжайте его улучшать, пока вы не будете уверены, затем реализуйте.

Проблема многих сайтов в том, что есть много плотников, которые, хотя и доброжелательно, рассматривают каждую проблему какгвоздь, и поставьте DDL, а не запрашиваемую помощь в моделировании.Чего не хватает, так это контекста и значения, поэтому конечным результатом является быстрая реализация с фиксированными «ключами», но без контекста и значения.Моделирование позволяет нам моделировать различные аспекты, которые имеют отношение к нам, не заботясь о том, как это будет выглядеть в DDL.

Еще один способ сказать, что OMG ответила на один вопрос как мне моделировать "Сотрудник работает над этим проектом как ... "? в изоляции;Я отвечаю на весь ваш вопрос в контексте.

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

... и это не входит в область нотации уценки SO, чтобы предоставить ее.IME, такие инструменты, как Oracle Designer, генерируют такие диаграммы после того, как вы создали сущности

Ерунда.Вся идея моделирования заключается в том, чтобы разработать и улучшить что-то на бумаге, используя диаграммы, задолго до написания строки кода, или покупки платформы, или необходимости внедрения DDL.Комментарий касается просто реверс-инжиниринга существующей базы данных, после того, что предоставляют многие продукты.

Пример моделирования, прогрессия

Используйте любые символы, которые значат для вас, для моделирования того, что вынеобходимость.Конечно, стандартные символы более понятны.Вот вам
ERD
(я понятия не имею, как «Нотация уценки SO» накладывает ограничение на предоставление рекомендаций по моделированию до факта).Я привел пример прогрессии, которая может произойти .Ничто не является «правильным» или «неправильным», это все кусочки бумаги;пока вы не решите, какие элементы заслуживают подтверждения, и тогда возможна следующая прогрессия.

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

  2. Проект, сотрудники и ролевые организации ясны, и мы кое-что о них знаем.Здесь я оставил основные сущности неразработанными, потому что они «сильные», и они не являются тем, на что вы фокусируете.

  3. В прогрессии используются примеры атрибутов отношения , вы можете использовать свой собственный.(Наш бельгийский коллега уже обозначил проблему на словах, я просто представляю ее на рисунках.) Многие люди не делают обычной практики, которую они должны делать;Я обеспокоен истинным моделированием сверху вниз, чтобы прогрессировать и прийти к правильной модели данных.Удалите все, что является мусором, и продолжайте прогрессировать.

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

  5. Здесь наступает момент, когда мы можем ясно видеть: мы не хотим Project :: Employee :: Role, потому что это будетразрешить Сотруднику выполнять любую Роль;мы хотим, чтобы сотрудники выбирались только в том случае, если они были предварительно утверждены на эту роль.Итак, Employee :: Role становится «сильнее».

  6. Следовательно, Employee :: Role является сущностью.И розовая вещь - дитя этой конкретной комбинации или сотрудника + роли, а не всего сотрудника или всей роли.

  7. Точно так же мы не хотим, чтобы какие-либо сотрудники брали какую-либо возможную работув любом возможном проекте мы хотим, чтобы они брали только утвержденные рабочие места в утвержденных проектах.Таким образом, Project :: Role становится сильной личностью и в любом случае имеет атрибуты.

  8. Следовательно, Project :: Role является сущностью.И этот оставшийся овал является потомком этой конкретной комбинации Project + Role, а не всего Project.

  9. Наш розовый ребенок получает статус Entity со своими специфическими атрибутами.Что еще более важно, его ограничения получены из ранее ограниченных сущностей, а не простых.

  10. Данные имеют естественный порядок или иерархию, и диаграмму, составленную с учетом этого, очень легко понять.,Теперь у нас есть возможность взглянуть на атрибуты.Они могут показаться одинаковыми, похожими или запутанными;тогда как теперь они имеют ясное значение, благодаря контексту и иерархии.

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

В общих чертах (ваш вопрос, в отличие от моего примера прогрессии)Когда мы добираемся до нормализации, три начальных овала могут закончиться как один или два или остаться как три объекта;простые ассоциативные таблицы без атрибутов;или как истинные сущности с атрибутами ... но мы не заботимся об этом и не должны заботиться об этом прямо сейчас.И снова, это слишком рано для DDL или для нормализации на данном этапе.Мы понятия не имеем, что это за ключи;какие атрибуты связаны с ними;и в каком отношении к ним.Более того, нам все равно.С точки зрения примера, да, сущности понятны и недвусмысленны.

Пожалуйста, оставьте отзыв, чтобы вы могли прогрессировать.

Редактировать: диаграмма обновлена, многостраничная.

1 голос
/ 03 ноября 2010

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

Если отношение «работает» между ними (Сотрудник и проект) много-ко-многим, И у этого отношения есть дополнительные атрибуты, описывающие (/ обеспечивающие более подробную информацию о) (событиях) отношения, то вы часто У нас нет другого выбора, кроме как «создать» отношения, то есть определить их как дополнительную сущность. Некоторые инструменты поддерживают диалект ERD, который позволяет указывать дополнительные атрибуты для любого отношения (в виде круглой рамки со стрелкой на отношении), но это не является обычной практикой.

...