Структура БД для музыкального каталога

hammet

Новичок
Структура БД для музыкального каталога

Здравствуйте! Сегодня начинаю делать муз. каталог 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 и т.д.
Громоздко, но достаточно просто и понятно :)

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

dark-demon

d(^-^)b
третий вариант:
1. таблица песен ('mySong')
2. таблица категорий ('Genre')
3. таблица связывающая первую со второй и со значением (1,2,'Rock')

базовый набор категорий можно строить на основе на основе тэгов или даже синхронизовать категории в базе и тэги в файле.
 

hammet

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


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 ;
 

voituk

прозревший
При такой структуре каждый исполнитель и каждый артист имеет только один жанр - часто это не так.

О том, что есть совместные альбомы, нескольких исполнителей - я и говорить не буду.
 

dark-demon

d(^-^)b
если вы не заметили, то поле artist есть и у песен и у альбомов. для песен - это собственно исполнитель. для альбома - составитель альбома.
хотя, конечно, то, что нет деления артиста на "вокалиста" и "композитора" - угнетает. не говоря уже о случаях, когда песню поют сразу два вокалиста...
 

voituk

прозревший
dark-demon
Читай внимательнее, а потом уже начинай брызжать слюной.

А как ты такое провернешь с твоей структурой?

Композиция:
Patiently Waiting - 50 Cent feat. Eminem

Альбом:
Beautiful Liar - Beyonce & Shakira
 

dark-demon

d(^-^)b
voituk, в тэгах это всё уже давно реализовано.

TITLE= Patiently Waiting
ARTIST= 50 Cent
ARTIST= Eminem
ALBUM= Beautiful Liar
ALBUM ARTIST= Beyonce
ALBUM ARTIST= Shakira

а если ты о том дампе, то это вопрос не ко мне :)

вообще, рекомендую почитать:
http://wiki.foobar2000.ru/foobar2000/encouraged_tag_standards

а также другие рекомендуемые тэги с пояснениями: http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:ID3_Tag_Mapping
 

voituk

прозревший
dark-demon
К тебе было
"нет деления артиста на "вокалиста" и "композитора" - угнетает. не говоря уже о случаях, когда песню поют сразу два вокалиста..."
 
Сверху