База данных фильмов sql

Я пытаюсь разобраться в этом разумом, что они называют Database Design без особого успеха, поэтому я попытаюсь проиллюстрировать свою проблему на примере.

Я использую MySQL, и вот мой вопрос:

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

  • Название фильма
  • Актеры
  • Время выполнения
  • Жанр
  • Описание
  • Год
  • директор

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

Вот что я думаю о дизайне базы данных:

Таблица фильмов = > фильм, название фильма, время работы, описание

Таблица года = > год

Жанр Таблица = > жанр

Таблица директора = > директор

Актеры Таблица = > имя_актера

Но как бы я начал создавать отношения между этими таблицами?

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

И, наконец, если бы я обновил новый фильм в базе данных через форму PHP, как бы вставить все эти данные в (с отношениями и всего?)

спасибо за любую помощь, которую вы можете дать, Кит

Вы должны различать атрибуты и сущности. Сущность — вещь — обычно существительное. Атрибут больше похож на часть описания информации. В jargon базы данных, entity = table, attribute = field/column.

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

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

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

Читайте также:  Amd radeon hd 8330 какие игры пойдут

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

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

Вы действительно можете принять этот дизайн довольно далеко, и все дело в том, чтобы выяснить, что вы хотите сохранить в нем.

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

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

У вас также может быть поле role_details в таблице film_people, которое может содержать дополнительную информацию в зависимости от роли (например, имя той части, которую играет актер).

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

Как только это настроено, легко запросить и найти все, что сделал данный человек, или все, что сделал человек в качестве режиссера, или всех, кто когда-либо направлял фильм, или всех людей, связанных с одним конкретным фильм.. Это может продолжаться и продолжаться.

Читайте также:  Диктофон в фоновом режиме iphone

1.Создать таблицы:
Таблица 1. Жанры
Структура таблицы: Код жанра, Название жанра, Цена
Таблица 2. Фирмы
Структура таблицы: Код фирмы, Название, Адрес
Таблица 3. Продукция
Структура таблицы: Порядковый номер, Название, Код жанра, Лицензия, Год выпуска, Код фирмы, Количество

2. Ввести данные в таблицу 1 и в таблицу 2.
3. Создать форму «О продукции» только для ввода записей в таблицу 3. Исключить возможность просмотра записей. Для ввода кода жанра и кода фирмы использовать поле со списком.
4. Создать форму типа главная/подчиненная с кнопками перехода по записям. Главная форма содержит: Код жанра, Название жанра, Общая стоимость продукции одного жанра. Подчиненная форма должна содержать строки по количеству сведений о данной продукции и включать поля: Порядковый номер, Название, Цена, Количество, Стоимость.
5. Создать запрос на снижение цены диска на 10%, если он выпущен раньше 2008 года.
6. Создать отчет «О продукции одной фирмы». Отчет содержит поля: Название фирмы, Порядковый номер, Название продукции, Год выпуска, Количество, Цена, Стоимость. Для каждой фирмы и года выпуска подвести итоги по количеству и стоимости продукции. В конце отчета вывести фирму с минимальным количеством дисков.
7. Создайте главную кнопочную форму с задачами: Жанры, Фирмы; в главной кнопочной форме кнопку для выхода из приложения (закрытия базы данных), кнопку для выхода из Access, кнопку для перехода в режим редактирования самой кнопочной формы.

База данных Access Фильмотека содержит 3 таблиц, 2 запроса, 3 формы + главная кнопочная форма, 1 отчет, 2 макроса. Данная база данных Access является учебной, подходит для дальнейшей оптимизации и доработки под собственные нужды.

Пояснительной записки нет!

Цель практических заданий – приобретение навыков анализа предметной области, проектирования базы данных, ее физической реализации в СУБД Access.
Результат выполнения работы представляется в виде базы Access, который должен содержать:
• структуру спроектированных таблиц,
• схему данных со связями между таблицами,
• формы, обеспечивающих интерфейс пользователя,
• запросы,
• отчеты,
• главную кнопочную форму.

Читайте также:  Шатается каблук на сапогах что делать

Таблица «Жанры» — База данных Access Фильмотека

Запрос «Цены со скидкой» — База данных Access Фильмотека

Запрос для отчета — База данных Access Фильмотека

Форма «Стоимость жанра» — База данных Access Фильмотека

Отчет «О продукции одной фирмы» — База данных Access Фильмотека

Готовая база данных БД Access Фильмотека доступна для скачивания по ссылке ниже.

Comments

Copy link Quote reply

AucT commented Aug 18, 2016

Если нужно у меня есть 1м фильмов кинопоиска с imdb_id (правда из 1м там только 138к фильмов которие есть на Imdb_id)

Предлагаю использовать сначала локальную базу, а потом если нет в локальной базе искать на imdb

Прикрепляю 2 sql файла (полний и только те что имеют imdb_id). Взято с неоф. апи кинопоиска.
для економии места id imdb числом (нужно переформатировать пример на пхп:)

This comment has been minimized.

Copy link Quote reply

REDNBLACK commented Aug 19, 2016

Круто, постараюсь реализовать в ближайшее время.

This comment has been minimized.

Copy link Quote reply

AucT commented Aug 23, 2016 •

как реализуешь — файл бази отдельно делай, а не пихай в екзешник, или так чтоб можно било обновлять только локальний файл. без нужди качать всю програму. Или в самой проге чтото сделать для самообновки бази. (на крайняк типа открил прогу — тебе пишет есть обновленная база, и кнопи скачать, отмена — при нажатии скачать тупо кидать на гугл диск с файлом)

и еще я взглянул не много на список. там есть некоторие неточности. В kinopoisk id 298 непрвильний ImdbId. Создатель неоф. апи кинопоиска.

ID ищется по базе данных по названию. Могут быть несовпадения в редких случаях.

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

Когда будет более правильний мапинг — отпишу. Главное сделать систему, а потом файли локальной бази обновлять.

К тому же на крайняк можна через прогу прогнать и самому достать imdb ID.
скидиваю тебе таблицу с кинопоиском 1м id (939k), если будешь сам проганять
all_kinopoisk_.zip

Оцените статью
Добавить комментарий