Я относительно новичок в разработке баз данных, и я решил создать свою собственную гипотетическую базу данных для практики. Однако у меня возникли проблемы с моделированием и нормализацией, так как я считаю, что существует множество отношений «многие ко многим» (M: N).
Общее описание сценария
База данных предназначена для хранения данных о различных людях , которые работали над серией Zelda. Я хочу , чтобы следить за консоли (с) , что игра может быть воспроизведена на, сотрудниках , которые имели участие в играх развитии, Работа сотрудников были (многие сотрудники работали на разные рабочих местах на нескольких игр ) и т.д.
Бизнес правила
- Несколько сотрудников могут работать в нескольких играх .
- Несколько игр могут быть на одной консоли .
- Несколько консолей могут быть платформой для одной и той же игры .
- Несколько сотрудников могут иметь одну и ту же работу .
- Сотрудник может иметь несколько рабочих мест .
- Игра может иметь несколько сотрудников .
- Игра может иметь несколько типов рабочих мест в его развитии
- Несколько игр могут иметь один и тот же тип заданий .
- Консоль может иметь несколько людей работают над этим.
- Человек может работать на нескольких консолях .
Имена атрибутов и примеры значений
- Имя сотрудника , который может быть разделен на First и Last (например , «Джон» и «Doe»)
- Название игры (например, «Окарина времени»)
- Название должности (например, «Дизайн уровней», «Директор», «Композиция», «Дизайнер уровней», «Программист», «Локализация» и т. Д.).
- Имя консоли (например, «Game Boy Advance»)
Проблема
До сих пор кажется, что независимо от того, что я проектирую, существуют избыточность данных и отношения M: N между интересующими типами сущностей повсюду. Однако я чувствую, что разработчики баз данных должны постоянно сталкиваться с такой проблемой, поэтому должно быть решение.
Примечание : я хорошо могу найти данные для заполнения таблицы, проблема заключается в организации их в базу данных с таблицами в нормализованной форме.
источник
Ответы:
Да, идентификация ассоциаций или отношений «многие ко многим» (для краткости M: N) - это ситуация, с которой практикующий специалист по базам данных довольно часто сталкивается при разработке концептуальной схемы. Связи указанных коэффициентов кардинальности возникают в бизнес-средах очень различной природы, и при правильном представлении на логическом уровне посредством, например, соглашения SQL-DDL, они не вносят вредных избыточностей.
Таким образом, цель упражнения по моделированию базы данных должна заключаться в том, чтобы с высокой точностью отражать соответствующие характеристики интересующего бизнес-контекста ; следовательно, если вы правильно определили, что существует множество ассоциаций M: N, вы должны выразить их в (а) концептуальной схеме, а также в (б) соответствующих декларациях логического уровня, независимо от того, сколько соединений этого - или любого другой - вид коэффициентов кардинальности должны быть рассмотрены.
Бизнес правила
Вы поставили хорошо контекстуализированный вопрос, а также пояснили, что база данных, над которой вы работаете, является чисто гипотетической, что является важным моментом, поскольку я считаю, что бизнес-сценарий «реального мира», такой как рассматриваемый, будет гораздо более обширным и, следовательно, предполагает более сложные информационные требования.
Я решил (1) внести несколько модификаций и дополнений в предоставленные вами бизнес-правила, чтобы (2) создать более описательную концептуальную схему - хотя все еще довольно гипотетическую -. Вот некоторые из формулировок, которые я собрал:
1 Сторона - это термин, используемый в правовом контексте, когда он относится к какому-либо лицу или группе лиц, которые составляют единое целое, поэтому данный термин подходит для обозначения людей и организаций .
Диаграмма IDEF1X
Впоследствии я создал диаграмму IDEF1X 2 , показанную на рисунке 1 (не забудьте нажать на ссылку, чтобы увидеть ее в более высоком разрешении), консолидируя в одном графическом устройстве представленные выше бизнес-правила (наряду с некоторыми другими, которые кажутся актуальными):
2 Определение интеграции для информационного моделирования ( IDEF1X ) - это очень рекомендуемый метод моделирования данных, который был установлен в качестве стандарта в декабре 1993 года Национальным институтом стандартов и технологий США (NIST). Он основан на (а) раннем теоретическом материале, автором которого является единственный создатель реляционной модели, то есть доктор Э. Ф. Кодд; (b) представление данных об отношениях между сущностями, разработанное доктором П.П. Ченом ; а также о (c) методике проектирования логических баз данных, созданной Робертом Г. Брауном.
Как вы можете видеть, я изобразил только три ассоциации M: N с помощью соответствующих типов ассоциативных сущностей , то есть:
Среди других аспектов, есть две отличные структуры подтипа супертипа , где:
Персона и Организация являются взаимоисключающими подтипами сущностей Стороны , их подтипами
Продукт - это супертип System и Game , которые, в свою очередь, являются взаимоисключающими подтипами.
Если вы не знакомы с ассоциациями супертип-подтип, вы можете найти помощь, например, мои ответы на вопросы, озаглавленные:
Иллюстративная логическая компоновка SQL-DDL
Соответственно, мы должны убедиться, что на логическом уровне:
Поэтому я объявил следующую схему DDL на основе ранее показанной диаграммы IDEF1X:
Уместно подчеркнуть, что существуют объявления составных ограничений PRIMARY KEY для нескольких таблиц, которые обозначают иерархию соединений, которые имеют место между концептуальными типами сущностей, расположение, которое может быть очень полезным в отношении извлечения данных, когда, например, выражается SELECT операции, включающие предложения JOIN для получения производных таблиц.
Да, (i) каждая ассоциация M: N и (ii) каждый из связанных типов объектов обозначается (iii) соответствующей таблицей в логической структуре DDL, поэтому обратите особое внимание на ограничения PRIMARY и FOREIGN KEY (и примечания, которые я оставил в качестве комментариев) таблиц, представляющих эти концептуальные элементы, поскольку они помогают гарантировать, что соединения между соответствующими строками соответствуют применимым коэффициентам кардинальности.
Использование составных ключей было введено д-ром Э.Ф. Коддом с самого начала реляционной парадигмы, что продемонстрировано на примерах, которые он включил в свою основополагающую работу 1970 года, озаглавленную «Реляционная модель для больших совместно используемых банков данных» (которая точно также представляет самый элегантный метод обработки концептуальных ассоциаций M: N).
Я установил db <> fiddle и SQL Fiddle , оба работающие на Microsoft SQL Server 2014, чтобы можно было проверить структуру «в действии».
нормализация
Нормализация - это процедура логического уровня, которая подразумевает, в основном, следующее:
Устранение неатомарных столбцов через первую нормальную форму, так что манипулирование данными и их сжатие намного легче справиться с использованием подъязыка данных (например, SQL).
Избавление от нежелательных зависимостей между столбцами определенной таблицы с помощью последовательных нормальных форм, чтобы избежать аномалий обновления .
Естественно, необходимо учитывать значение, которое несут рассматриваемая таблица (и) и колонка (и).
Мне нравится думать о нормализации как о тесте, основанном на науке, который дизайнер применяет к соответствующим элементам после того, как он определил стабильное расположение на логическом уровне, чтобы определить, соответствуют ли его элементы каждой из нормальных форм или нет. Затем, при необходимости, дизайнер принимает соответствующие корректирующие меры.
избыточность
В реляционной модели, хотя дублирование значений, содержащихся в столбцах, не только допустимо, но и ожидается , повторяющиеся строки запрещены . В этой степени, насколько я вижу, во всех таблицах, включенных в логическую структуру, представленную ранее, предотвращается дублирование строк и другие виды вредных избыточностей, возможно, вы хотели бы прояснить свою озабоченность в этом отношении.
В любом случае, вы, безусловно, можете (а) самостоятельно оценить указанную структуру с помощью обычных форм, чтобы определить, соответствует ли она требованиям, и (б) изменить ее при необходимости.
Связанные ресурсы
Троичные ассоциации
Есть еще один важный аспект, который вы затронули в комментариях (опубликованных в удаленном ответе):
Это обстоятельство, похоже, указывает на то, что одна из ваших проблем связана с концептуальными троичными ассоциациями . В сущности, такого рода ассоциации возникают, когда существуют (1) отношения, включающие (2) два других отношения, иными словами «отношения между отношениями» - тоже типичная ситуация, поскольку отношения - это сущность сама по себе -.
Эти механизмы, при надлежащем управлении, также не приносят вредных увольнений. И, да, если есть определенный вариант использования, в котором вы указываете, что такие отношения представляются между типами сущностей «реального мира», вы должны (i) моделировать и (ii) объявлять их с точностью на логическом уровне.
источник