CDDB = Compact Disk DataBase

Databáze kompaktních disků, která se nachází na serveru http://www.freedb.org/

Vyhledávání v databázi editovat

Ale moc to na nic není, viz FAQ: 1.9. Is it possible to search the online freedb database?: Unfortunately not, we will release a new online search soon.

Formát dat xmcd editovat

Utility pro práci s databází CDDB editovat

Distribuce Debian editovat

libkcddb1 editovat

CDDB knihovna pro KDE


  • /usr/lib/libkcddb.so.1.0.0


libcddb-get-perl editovat

  • /usr/share/perl5/CDDB_get.pm - perlovský modul: spočte identifikační záznam na CD, dotáže se databáze freedb.org a vrátí xmcd záznam
  • /usr/share/perl5/cddb.pl
  • /usr/bin/cddbget - jednoduchý skript, využívající modul CDDB_get.pm

cddb editovat

  • /usr/bin/cddbcmd - podobná utilita, napsaná v C
  • /var/lib/cddb - adresář, kam se ukládají databázové soubory xmcd


python-cddb editovat

  • /usr/lib/python-support/python-cddb/python2.3/cdrom.so - C knihovna pro binární čtení stop na CD
  • /usr/lib/python-support/python-cddb/python2.4/cdrom.so - dtto pro python2.4
  • /usr/share/python-support/python-cddb/DiscID.py - modul, volá cdrom.so
  • /usr/share/python-support/python-cddb/CDDB.py - modul, který posílá dotaz na CDDB server
  • /usr/share/doc/python-cddb/examples/cddb-info.py - jednoduchá utilita, příklad využití obou modulů
  • /usr/share/doc/python-cddb/README.gz - dokumentace

digitaldj editovat


Struktura databáze editovat

-- Databáze: 'ddj_mp3'
-- --------------------------------------------------------
-- Struktura tabulky 'artist'

CREATE TABLE artist (
  id int(11) NOT NULL auto_increment,
  artist varchar(80),
  num_plays int(11),
  last_play datetime,
  date_added date,
  PRIMARY KEY  (id)
);
-- --------------------------------------------------------
-- Struktura tabulky 'db_info'

CREATE TABLE db_info (
  db_version int(10) unsigned
);
-- --------------------------------------------------------
-- Struktura tabulky 'disc'

CREATE TABLE disc (
  id int(11) NOT NULL auto_increment,
  title varchar(80),
  artistid int(11),
  num_plays int(11),
  last_play datetime,
  genre varchar(20),
  `year` int(11),
  date_added date,
  gain_adjustment int(11),
  PRIMARY KEY  (id),
  KEY artistid (artistid)
);
-- --------------------------------------------------------
-- Struktura tabulky 'playlist_data'

CREATE TABLE playlist_data (
  id int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255),
  `type` enum('SONG','ARTIST','DISC','GENRE') default 'SONG',
  size int(10) unsigned,
  PRIMARY KEY  (id),
  UNIQUE KEY `name` (`name`)
);
-- --------------------------------------------------------
-- Struktura tabulky 'playlist_items'

CREATE TABLE playlist_items (
  playlist_id int(10) unsigned,
  item_id int(10) unsigned,
  position int(10) unsigned,
);
-- --------------------------------------------------------
-- Struktura tabulky 'song'

CREATE TABLE song (
  id int(11) NOT NULL auto_increment,
  filename varchar(255),
  title varchar(80),
  artistid int(11),
  discid int(11),
  genre varchar(20),
  track_num int(11),
  start_frame int(11),
  num_frames int(11),
  play_time varchar(5),
  bpm int(11),
  num_plays int(11),
  last_play datetime,
  `year` int(11),
  date_added date,
  gain_adjustment int(11),
  PRIMARY KEY  (id),
  KEY artistid (artistid),
  KEY discid (discid)
)

cdsql editovat

Uvedená databáze je pro serióznější potřeby málo podrobná. Pokusíme se ji proto rozšířit tak, abychom zachovali zpětnou kompatibilitu a mohli upravenou databázi používat se zaběhanými utilitami. Nejdříve si (pro jistotu) naši databázi překopírujeme:

Je dobré mít název skupiny krátký a případný přídomek uvádět zvlášť. Na něj připojíme další sloupec:

ALTER TABLE `artist` ADD `to-name` VARCHAR( 80 ) NULL DEFAULT NULL ;

Důležitým údajem jsou členové skupiny a kdo na co hraje nebo zpívá. Uvádět všechny tyto údaje do sloupce artist je trochu těžkopádné, i když je pole dimenzováno na 80 znaků. Do pole `artist` tedy budeme uvádět jen krátký název orchestru nebo hudební skupiny a další údaje (prozatím) uvedeme do pole `members`:

ALTER TABLE `artist` ADD `members` VARCHAR( 160 ) NULL DEFAULT NULL ;

Podobně zpřesníme tabulku CD:

ALTER TABLE `disc` ADD `subname` VARCHAR( 80 ) NULL DEFAULT NULL ;

Pokud se jedná o album, pak potřebujeme sloupec pro pořadí CD:

ALTER TABLE `disc` ADD `cd` INT NULL DEFAULT NULL ;

Zavedenou identifikací disku je jeho DISCID, použivené v xmcd:

ALTER TABLE `disc` ADD `discid` INT NULL DEFAULT NULL ;

Dobré je také uvést vydavatele:

ALTER TABLE `disc` ADD `publisher` VARCHAR( 15 ) NULL DEFAULT NULL ;

a kód:

ALTER TABLE `disc` ADD `code` VARCHAR( 15 ) NULL DEFAULT NULL ;

Případné další info najdeme také u internetových prodejců, tak (aniž bychom chtěli dělat někomu příliš velkou reklamu) je užitečné tam takový nějaký údaj uvést:

ALTER TABLE `disc` ADD `seller` VARCHAR( 20 ) NULL DEFAULT NULL ;

a jeho kód:

ALTER TABLE `disc` ADD `seller-code` VARCHAR( 20 ) NULL DEFAULT NULL ;

a příslušné URL:

ALTER TABLE `disc` ADD `url` VARCHAR( 200 ) NULL DEFAULT NULL ;

a URL obrázku obalu:

ALTER TABLE `disc` ADD `cover` VARCHAR( 200 ) NULL DEFAULT NULL ;

Takže dohromady shrnuto pošleme:

ALTER TABLE `artist` ADD `to-name` VARCHAR( 80 ) NULL DEFAULT NULL ;
ALTER TABLE `artist` ADD `members` VARCHAR( 160 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `subtitle` VARCHAR( 80 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `cd` INT NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `discid` INT NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `publisher` VARCHAR( 15 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `code` VARCHAR( 15 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `seller` VARCHAR( 20 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `seller-code` VARCHAR( 20 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `url` VARCHAR( 200 ) NULL DEFAULT NULL ;
ALTER TABLE `disc` ADD `cover` VARCHAR( 200 ) NULL DEFAULT NULL ;

Výsledkem tedy budou tabulky:

CREATE TABLE artist (
  id int(11) NOT NULL auto_increment,
  artist varchar(80) default NULL,
  num_plays int(11) default NULL,
  last_play datetime default NULL,
  date_added date default NULL,
  `to-name` varchar(80) default NULL,
  members varchar(160) default NULL,
  PRIMARY KEY  (id)
);
CREATE TABLE disc (
  id int(11) NOT NULL auto_increment,
  title varchar(80)default NULL,
  artistid int(11) default NULL,
  num_plays int(11) default NULL,
  last_play datetime default NULL,
  genre varchar(20)default NULL,
  `year` int(11) default NULL,
  date_added date default NULL,
  gain_adjustment int(11) default NULL,
  `subtitle` varchar(80) default NULL,
  cd int(11) default NULL,
  publisher varchar(15) default NULL,
  `code` varchar(15) default NULL,
  seller varchar(20) default NULL,
  `seller-code` varchar(20) default NULL,
  url varchar(200) default NULL,
  cover varchar(200) default NULL,
  PRIMARY KEY  (id),
  KEY artistid (artistid)
);

Teď půjde o to, co nejjednoduššeji rozdělit původní pole do nově vytvořených. Asi to budeme muset udělat ručně, např. v rozhraní phpmyadmin. Je ale zbytečné komplikovat si při této editaci tabulky takovými sloupci, jako jsou položky playlistu či nastavení zesílení. A dále, každé CD se odkazuje na nějaký záznam v tabulce artist a disc. Proto bude pro editaci asi výhodné vytvořit si pohled, ve kterém obě tabulky spojíme operací JOIN.

Operaci JOIN můžeme v zásadě použít buď tradičním způsobem v klauzuli WHERE anebo novějším způsobem (dle standardu ANSI-92) v klauzuli FROM. Zde se budeme držet standardu ANSI-92.

Každý záznam v tabulce disc má nějaký odkaz do tabulkuy artist. Lze si ale představit, že budeme mít (napč. dopředu připravený) záznam v tabulce artist (tj. záznam o skupině, o které ještě nemáme v databázi žádné CD). Proto použijeme spojení LEFT JOIN:

SELECT A.artist, A.`to-name`, A.members,
D.title, D.subtitle, D.cd, D.discid, D.genre, D.year, D.publisher, D.code, D.seller, D.`seller-code`, D.url, D.cover
  FROM artist as A
  LEFT JOIN disc as D ON A.id = D.artistid ;