Дизайн базы данных - PullRequest
       3

Дизайн базы данных

0 голосов
/ 27 января 2011

Я создаю сайт для потоковой передачи музыки, где пользователи смогут приобретать и транслировать mp3-файлы.У меня есть подмножество диаграмм сущностей, которые можно описать следующим образом:

ER DIAGRAM

Я хочу нормализовать данные до 3NF.Сколько столов мне нужно?очевидно, я хочу избежать частичной зависимости, которая потребует больше таблиц, чем просто альбом, исполнитель, песни - но я не уверен, что еще добавить?Есть мысли из опыта?

Ответы [ 4 ]

5 голосов
/ 27 января 2011

Ну, вы сделали уровень ER. Вам нужно идентифицировать ключи и атрибуты, прежде чем вы сможете определить функциональные зависимости. Перед тем как попасть в 3НФ, нужно проделать немалую работу. Например. Названия песен дублируются.

Также есть вопросы:

  • продает ли сайт альбомы, песни или и то, и другое? (Я смоделировал оба)
  • если оба, как вы отслеживаете продажу или загрузку?
  • Вас интересует одинаковое название песни, записанное разными исполнителями?

В любом случае, здесь разрешена ▶ Диаграмма отношений сущностей ◀ , по крайней мере для предоставленной информации. Он ближе к 5NF, чем к 3NF, но я не могу объявить его таковым, потому что он не полный.

Читатели, которые не знакомы со Стандартом моделирования реляционных баз данных, могут найти ▶ IDEF1X Notational ◀ полезным.

Используется простая структура Супертип-Подтип, Принцип Ортогонального Дизайна. Проданный предмет, т. Е. Альбом или песня.

Не стесняйтесь задавать уточняющие вопросы.

1 голос
/ 27 января 2011

Вам понадобятся 4 таблицы: исполнители, песни, альбомы и песни альбома.
Последний требуется, поскольку одна и та же песня (= одна и та же редакция / версия ...) может быть включена в несколько альбомов, поэтому у вас есть отношение m-to-m.

0 голосов
/ 27 января 2011

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

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

Однако , я подвергаю сомнению вашу диаграмму ER.Мне кажется, что отношения "содержит" действительно много для многих.Альбом явно содержит много песен.Но данная песня может появляться более чем в одном альбоме.Таким образом, на линии должна быть стрелка, которая соединяет «содержит» с «альбомом».

Если вы примете эту редакцию для своей модели ER, количество таблиц увеличится до 4: исполнители, альбомы, песни и содержание.

Аналогичный аргумент может быть сделан для Исполнителя и Песни.Если два артиста сотрудничают в одной песне (например, Долли Партон и Кенни Роджерс, поющие вместе «Острова в потоке»), то вы можете смоделировать «производит» как отношение многие ко многим. Теперь вам нужно 5 таблиц: Исполнители, Альбомы, Songs, Contains and Productions.

Исполнителям, альбомам и композициям потребуется ПК, который идентифицирует соответствующий объект. Целостность объекта требует, чтобы соответствие между экземплярами объекта и строками таблицы было взаимно однозначным.

Таблицы Contains и Produces можно создавать без отдельного атрибута Id. Вам понадобится пара FK в каждой из этих таблиц, и вы можете объявить составной PK для каждой таблицы, состоящей из двух FK.

Ссылочная целостность требует, чтобы вы обеспечивали действительность ссылок FK либо в своих программах, либо путем объявления ограничения ссылок в БД. Я настоятельно предпочитаю декларировать ограничение в БД.

0 голосов
/ 27 января 2011

Я согласен с iDevelop, но с 1 дополнительной таблицей.Вот как я бы смоделировал это.

Таблицы: Исполнитель, Песня, Альбом, AlbumSongMap, SingleInfo

Если песня была выпущена как сингл на другую дату, вы можете получить ее изSingleInfo.Возможно, сингл был выпущен с обложкой, которая отличается от обложки альбома.Вы будете хранить синглы в SingleInfo.МОЖЕТ БЫТЬ песня может быть выпущена как единственное многократное, с новым художественным оформлением или чем-то таким, таким образом это могло бы быть отношением 1-много.В противном случае это 1-1.

Если вы можете присоединиться к Песне с SingleInfo, это означает, что она была выпущена как сингл.Если вы можете присоединиться к Песне с Альбомом (используя карту), то вы найдете все альбомы, под которыми она была выпущена.

Цифровое улучшение старой песни - это новая песня.(или, по крайней мере, другой двоичный файл).Возможно, вы захотите дополнительно нормализовать композицию Song, чтобы разрешить сохранение цифровых улучшений без дублирования SongName и т. Д.

...