Элегантная помощь в разработке базы данных ... (MySQL / PHP) - PullRequest
3 голосов
/ 11 марта 2009

Я создаю веб-сайт с фильмами ... Мне нужно отображать информацию о каждом фильме, включая жанры, актеров и много информации (как IMDB.com) ...

Я создал таблицу «Фильмы», включающую в себя идентификатор и некоторую основную информацию. Для жанров я создал таблицу жанров, включающую 2 столбца: ID и жанр. Затем я использую таблицу 'genres2movies' с двумя столбцами: movieID и genreID, чтобы установить связь между жанрами и таблицами фильмов ...

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

Есть лучший способ сделать это ???

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

Спасибо !!!

Ответы [ 3 ]

6 голосов
/ 11 марта 2009

Похоже, вы в настоящее время соблюдаете надлежащие правила нормализации, а это именно то, что вы хотите.

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

Обычно это компромисс между правильной / полной нормализацией и производительностью

5 голосов
/ 11 марта 2009

Вы на правильном пути. Это способ сделать отношения многие ко многим. Размер базы данных не будет сильно расти, потому что вы используете целые числа и для скорости вы должны установить правильные индексы для этих идентификаторов. При выполнении запросов SELECt проверьте EXPLAIN - это помогает найти узкие места в скорости.

0 голосов
/ 11 марта 2009

Вы на правильном пути - это правильный, нормализованный подход.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...