2013-07-04 3 views
3

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

Title 
    Plot 
    Genre 
    Rating 
    Director 

Единственное, что беспокоит меня в том, что большинство фильмов не просто один жанр, и я изо всех сил, чтобы выяснить, как хранить это в базе данных MySQL. Сначала я думал, что у меня будет только одна таблица и сохраните все жанры в одном столбце, разделив их запятой, и когда я захочу их разделить с помощью PHP, но я не уверен, что это лучший способ поскольку я думаю, что мне будет сложно сортировать и искать определенный жанр, например Ужас, когда в колонке содержится «Ужас, Триллер, Действие».

+0

не забывайте, что фильмы могут быть http://www.filmsite.org/subgenres.html –

ответ

9

Я хотел бы предложить вам следует придерживаться следующей структуры:

имя_таблицы: фильмы

movieid, название, сюжет, рейтинг, директор

> sample data: 
> 
> 1 titanic Bollywood 10 James Cameron 

TABLENAME: жанры

genreid, жанр

> sample data: 
> 1 Horror 
> 2 Thriller 
> 3 Action 
> 4 Love 

TABLENAME: moviegenres

moviegenresid, movieid, genreid

> sample data: 
> 1 1 2 
> 2 1 4 

И запрос:

select m.*,group_concat(g.genre) 
from movies m inner join moviegenres mg 
on m.movieid=mg.movieid 
inner join genres g 
on g.genreid=mg.genreid 
group by m.movieid 
; 

fiddle

+0

Удивительно, даже включил скрипку для этого. –

7

То, что вы ищете для модели здесь, называется отношением «многие ко многим» и очень распространено при моделировании категорий «реального мира».

Есть много описаний там о том, как работать с такими отношениями, включая: ответ

  • Praveen здесь, специфичные к вашему вопросу.
  • http://en.wikipedia.org/wiki/Junction_table - дополнительная таблица, связывающая две популяции во многих отношениях, может быть названа таблицей пересечений или соединительной таблицей.
  • http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php, который помогает показать пример с таблицей и конструкцией клавиш/ограничений, удобную диаграмму представления данных в случае, если это не ясно, и как моделирование моделируется и используется в приложении.
  • Любая хорошая книга/учебник по дизайну базы данных будет охватывать это где-то.

Не испытывайте соблазн пропустить дополнительную таблицу пересечений, сохраняя несколько жанров в одном поле для каждой пленки (например, список, разделенный запятой). Это очень распространенный «анти-шаблон», который будет вызывать проблемы, может быть, не сегодня, может быть, не завтра, а в конце концов.Я рекомендую, чтобы кто-нибудь, кто работал с базой данных, выдавал «SQL Antipatterns» Билла Карвина (http://pragprog.com/book/bksqla/sql-antipatterns) читать. Он написан таким образом, который должен быть доступен для относительного новичка, но содержит многое, что те из нас, кто должен знать лучше, нужно время от времени напоминать (отношения «многие ко многим», решение «список в поле»/проблема, и то, что вы должны сделать, - одна из первых вещей, которые охватывает книга).

Смежные вопросы