Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Структура БД для музыкального каталога
 
 автор: hammet   (17.05.2007 в 11:28)   письмо автору
 
 

Здравствуйте! Сегодня начинаю делать муз. каталог mp3.
Начал продумывать структуру БД. Мне нужен совет человека, который уже далал подобный сайт.
У меня есть 2 варианта реализации....

1) таблица для каждой субстанции - album, genre, artist и т.д. с полями вроде id,name. Ну у альбома еще добавится
год и рейтинг. И таблица songs: id, title, album_id, artist_id, genre_id и т.д.
И потом делать выборку из неск. таблиц.
Но тут есть свои плюсы и недостатки - при добавлении песни нужно делать запись в n-таблиц при добавлении песни. Т.е. проверять например таблицу с жанрами, если такого жанра нет, его нужно добавить...ну и так для всех параметров песни... Преимуществом такой схемы, как мне кажется, является логичность и расширяемость....может скорость работы, т.к. в самой большой таблице songs будут поля INT.

2) Второй вариант - одна большая таблица songs, куда напрямую пишем всю информацию по конкретной песне, т.е. id, title, artist, album, genre, comments, rating и т.д.
Громоздко, но достаточно просто и понятно :)

Мне по душе больше первый вариант...
Выборки будут стандартные (как на всех подобных сайтах)....Каталог музыки, рейтинги, поиск, алфавитный указатель и т.д. - ничего особенного...
Зарание спасибо!

   
 
 автор: Trianon   (17.05.2007 в 11:43)   письмо автору
 
   для: hammet   (17.05.2007 в 11:28)
 

первый и делайте. Тем более если по душе.

   
 
 автор: hammet   (17.05.2007 в 11:57)   письмо автору
 
   для: Trianon   (17.05.2007 в 11:43)
 

хм....коротко и понятно)
спасибо

   
 
 автор: hammet   (17.05.2007 в 12:20)   письмо автору
 
   для: hammet   (17.05.2007 в 11:57)
 

ну вот что имеется на данный момент:


CREATE TABLE `songs` (
`id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 255 ) NOT NULL ,
`artist_id` BIGINT( 20 ) NOT NULL ,
`album_id` BIGINT( 20 ) NOT NULL ,
`genre_id` INT( 11 ) NOT NULL ,
`comments` TEXT NOT NULL ,
`url` VARCHAR( 512 ) NOT NULL ,
`rating` INT( 11 ) NOT NULL ,
`upload_date` DATE NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `artists` (
`id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`artist` VARCHAR( 255 ) NOT NULL ,
`genre_id` INT( 11 ) NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `albums` (
`id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`album` VARCHAR( 512 ) NOT NULL ,
`artist_id` BIGINT( 20 ) NOT NULL ,
`year` YEAR NOT NULL ,
`votes` INT( 11 ) NOT NULL DEFAULT '0'
) ENGINE = MYISAM ;

CREATE TABLE `genres` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`genre` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;

   
 
 автор: Trianon   (17.05.2007 в 12:28)   письмо автору
 
   для: hammet   (17.05.2007 в 12:20)
 

как артисты так и альбомы могут проявлять себя в разных жанрах.
в альбом (если это сборник) может входить несколько артистов.
Всё это отношения M:N, все они реализуются дополнительными таблицами связок.

   
 
 автор: hammet   (17.05.2007 в 12:31)   письмо автору
 
   для: Trianon   (17.05.2007 в 12:28)
 

Да, верное замечание.....

апдейт: ALTER TABLE `albums` ADD `genre_id` INT( 11 ) NOT NULL AFTER `artist_id` ;

можно подробнее по поводу M:N и таблиц связок?

Я полагал все это делать в момент выбоки....т.е. SELECT s.genre_id AS genre FROM songs s,genre g WHERE s.genre_id=d.id;

Или как?

   
 
 автор: hammet   (17.05.2007 в 12:47)   письмо автору
 
   для: hammet   (17.05.2007 в 12:31)
 

upd Еще у альбома есть обложка :)

ALTER TABLE `albums` ADD `cover` VARCHAR( 255 ) NOT NULL ;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования