-- SVN:$Id$
--
+-- Règles générales concernant la valeur nulle et les valeurs par défaut:
+--
+-- - si un champ, clé étrangère ou non, ne doit pas être vide, il est définit
+-- non nul et sans valeur par défaut
+-- - si un champ qui n'est pas une clé étrangère peut être vide, il est définit
+-- comme ne pouvant être nul et avec une valeur vide par défaut
+-- - si un champ qui est une clé étrangère peut être vide, il est définit comme
+-- pouvant être nul et sans valeur par défaut
+
--
-- Enumérations simples
--
CREATE TABLE physical_formats (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE publishing_status (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE acquisition_modes (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE metadata_authors (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE metadata_writers (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE legal_rights (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE recording_contexts (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE ad_conversions (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE vernacular_styles (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE generic_styles (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
--
-- Editeurs et collections
CREATE TABLE publishers (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE publisher_collections (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL,
FOREIGN KEY(publisher_id) REFERENCES publishers (id)
-);
+) ENGINE=InnoDB;
--
-- Thésaurus géographique
CREATE TABLE location_types (
id VARCHAR(64) NOT NULL PRIMARY KEY,
name VARCHAR(150) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE locations (
name VARCHAR(150) NOT NULL PRIMARY KEY,
- type ENUM('country', 'continent', 'other'),
+ type ENUM('country', 'continent', 'other') NOT NULL,
complete_type_id VARCHAR(64) NOT NULL,
- current_name VARCHAR(150),
- is_authoritative BOOLEAN NOT NULL,
+ current_name VARCHAR(150), -- recursif
+ is_authoritative BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(current_name) REFERENCES locations (name),
FOREIGN KEY(complete_type_id) REFERENCES location_types (id)
-);
+) ENGINE=InnoDB;
CREATE TABLE location_aliases (
location_name VARCHAR(150) NOT NULL,
alias VARCHAR(150) NOT NULL,
- is_authoritative BOOLEAN NOT NULL,
+ is_authoritative BOOLEAN NOT NULL DEFAULT 0,
PRIMARY KEY(location_name, alias),
FOREIGN KEY(location_name) REFERENCES locations (name)
-);
+) ENGINE=InnoDB;
CREATE TABLE location_relations (
location_name VARCHAR(150) NOT NULL,
- parent_location_name VARCHAR(150) NOT NULL,
+ parent_location_name VARCHAR(150),
PRIMARY KEY(location_name, parent_location_name),
FOREIGN KEY(location_name) REFERENCES locations (name),
FOREIGN KEY(parent_location_name) REFERENCES locations (name)
-);
+) ENGINE=InnoDB;
--
-- Ethnies
CREATE TABLE ethnic_groups (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE ethnic_group_aliases (
ethnic_group_id INTEGER NOT NULL,
name VARCHAR(250) NOT NULL,
FOREIGN KEY(ethnic_group_id) REFERENCES ethnic_groups (id)
-);
+) ENGINE=InnoDB;
--
-- Collections
CREATE TABLE media_collections (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
- reference VARCHAR(250) NOT NULL,
- physical_format_id INTEGER NOT NULL,
+ reference VARCHAR(250) UNIQUE,
+ physical_format_id INTEGER,
old_code VARCHAR(250) NOT NULL UNIQUE,
code VARCHAR(250) NOT NULL UNIQUE,
title VARCHAR(250) NOT NULL,
- alt_title VARCHAR(250) NOT NULL,
- physical_items_num INTEGER NOT NULL,
- publishing_status_id INTEGER NOT NULL,
- creator VARCHAR(250) NOT NULL,
- booklet_author VARCHAR(250) NOT NULL,
- booklet_description TEXT NOT NULL,
- collector VARCHAR(250) NOT NULL,
- collector_is_creator BOOLEAN NOT NULL,
- publisher_id INTEGER NOT NULL,
- year_published INTEGER NOT NULL,
- publisher_collection_id INTEGER NOT NULL,
- publisher_serial VARCHAR(250) NOT NULL,
- external_references TEXT NOT NULL,
- acquisition_mode_id INTEGER NOT NULL,
- comment TEXT NOT NULL,
- metadata_author_id INTEGER NOT NULL,
- metadata_writer_id INTEGER NOT NULL,
- legal_rights_id INTEGER NOT NULL,
- alt_ids VARCHAR(250) NOT NULL,
- recorded_from_year INTEGER NOT NULL,
- recorded_to_year INTEGER NOT NULL,
- recording_context_id INTEGER NOT NULL,
- approx_duration TIME NOT NULL,
- doctype_code INTEGER NOT NULL,
- travail VARCHAR(250) NOT NULL,
- state TEXT NOT NULL,
- cnrs_contributor VARCHAR(250) NOT NULL,
- items_done VARCHAR(250) NOT NULL,
- a_informer_07_03 VARCHAR(250) NOT NULL,
- ad_conversion_id INTEGER NOT NULL,
- public_access ENUM('none', 'metadata', 'full') NOT NULL,
+ alt_title VARCHAR(250) NOT NULL DEFAULT '',
+ physical_items_num INTEGER NOT NULL DEFAULT 0,
+ publishing_status_id INTEGER,
+ creator VARCHAR(250) NOT NULL DEFAULT '',
+ booklet_author VARCHAR(250) NOT NULL DEFAULT '',
+ booklet_description TEXT NOT NULL DEFAULT '',
+ collector VARCHAR(250) NOT NULL DEFAULT '',
+ collector_is_creator BOOLEAN NOT NULL DEFAULT 0,
+ publisher_id INTEGER,
+ year_published INTEGER NOT NULL DEFAULT 0,
+ publisher_collection_id INTEGER,
+ publisher_serial VARCHAR(250) NOT NULL DEFAULT '',
+ external_references TEXT NOT NULL DEFAULT '',
+ acquisition_mode_id INTEGER,
+ comment TEXT NOT NULL DEFAULT '',
+ metadata_author_id INTEGER,
+ metadata_writer_id INTEGER,
+ legal_rights_id INTEGER,
+ alt_ids VARCHAR(250) NOT NULL DEFAULT '',
+ recorded_from_year INTEGER NOT NULL DEFAULT 0,
+ recorded_to_year INTEGER NOT NULL DEFAULT 0,
+ recording_context_id INTEGER,
+ approx_duration TIME NOT NULL DEFAULT 0,
+ doctype_code INTEGER NOT NULL DEFAULT 0,
+ travail VARCHAR(250) NOT NULL DEFAULT '',
+ state TEXT NOT NULL DEFAULT '',
+ cnrs_contributor VARCHAR(250) NOT NULL DEFAULT '',
+ items_done VARCHAR(250) NOT NULL DEFAULT '',
+ a_informer_07_03 VARCHAR(250) NOT NULL DEFAULT '',
+ ad_conversion_id INTEGER,
+ public_access ENUM('none', 'metadata', 'full') NOT NULL DEFAULT 'metadata',
FOREIGN KEY(ad_conversion_id) REFERENCES ad_conversions (id),
FOREIGN KEY(publisher_collection_id) REFERENCES publisher_collections (id),
FOREIGN KEY(legal_rights_id) REFERENCES legal_rights (id),
FOREIGN KEY(acquisition_mode_id) REFERENCES acquisition_modes (id),
FOREIGN KEY(publishing_status_id) REFERENCES publishing_status (id)
-);
+) ENGINE=InnoDB;
--
-- Items
CREATE TABLE media_items (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
collection_id INTEGER NOT NULL,
- track VARCHAR(250) NOT NULL,
- code VARCHAR(250) NOT NULL,
- approx_duration TIME NOT NULL,
- recorded_from_date DATE NOT NULL,
- recorded_to_date DATE NOT NULL,
- location_name VARCHAR(250) NOT NULL,
- location_comment VARCHAR(250) NOT NULL,
- ethnic_group_id INTEGER NOT NULL,
+ track VARCHAR(250) NOT NULL DEFAULT '',
+ code VARCHAR(250) UNIQUE, -- Doit être unique mais peut être inconnu
+ approx_duration TIME NOT NULL DEFAULT 0,
+ recorded_from_date DATE NOT NULL DEFAULT 0,
+ recorded_to_date DATE NOT NULL DEFAULT 0,
+ location_name VARCHAR(250),
+ location_comment VARCHAR(250) NOT NULL DEFAULT '',
+ ethnic_group_id INTEGER,
title VARCHAR(250) NOT NULL,
- alt_title VARCHAR(250) NOT NULL,
- author VARCHAR(250) NOT NULL,
- vernacular_style_id INTEGER NOT NULL,
- context_comment TEXT NOT NULL,
- external_references VARCHAR(250) NOT NULL,
- moda_execut VARCHAR(250) NOT NULL,
- copied_from_item_id INTEGER,
- collector VARCHAR(250) NOT NULL,
- cultural_area VARCHAR(250) NOT NULL,
- generic_style_id INTEGER NOT NULL,
- collector_selection VARCHAR(250) NOT NULL,
- creator_reference VARCHAR(250) NOT NULL,
- filename VARCHAR(250) NOT NULL,
- public_access ENUM('none', 'metadata', 'full') NOT NULL,
+ alt_title VARCHAR(250) NOT NULL DEFAULT '',
+ author VARCHAR(250) NOT NULL DEFAULT '',
+ vernacular_style_id INTEGER,
+ context_comment TEXT NOT NULL DEFAULT '',
+ external_references VARCHAR(250) NOT NULL DEFAULT '',
+ moda_execut VARCHAR(250) NOT NULL DEFAULT '',
+ copied_from_item_id INTEGER, -- recursif
+ collector VARCHAR(250) NOT NULL DEFAULT '',
+ cultural_area VARCHAR(250) NOT NULL DEFAULT '',
+ generic_style_id INTEGER,
+ collector_selection VARCHAR(250) NOT NULL DEFAULT '',
+ creator_reference VARCHAR(250) NOT NULL DEFAULT '',
+ filename VARCHAR(250) NOT NULL DEFAULT '',
+ public_access ENUM('none', 'metadata', 'full') NOT NULL DEFAULT 'metadata',
+ FOREIGN KEY(location_name) REFERENCES locations (name),
FOREIGN KEY(ethnic_group_id) REFERENCES ethnic_groups (id),
FOREIGN KEY(collection_id) REFERENCES media_collections (id),
FOREIGN KEY(vernacular_style_id) REFERENCES vernacular_styles (id),
FOREIGN KEY(location_name) REFERENCES locations (name),
FOREIGN KEY(copied_from_item_id) REFERENCES media_items (id),
FOREIGN KEY(generic_style_id) REFERENCES generic_styles (id)
-);
+) ENGINE=InnoDB;
--
-- Parties d'item/marqueurs
end FLOAT NOT NULL,
FOREIGN KEY(item_id) REFERENCES media_items (id)
-);
+) ENGINE=InnoDB;
--
-- Instruments et formations
CREATE TABLE instruments (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE instrument_relations (
instrument_id INTEGER NOT NULL,
FOREIGN KEY(instrument_id) REFERENCES instruments (id),
FOREIGN KEY(parent_instrument_id) REFERENCES instruments (id)
-);
+) ENGINE=InnoDB;
CREATE TABLE instrument_aliases (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE instrument_alias_relations (
alias_id INTEGER NOT NULL,
FOREIGN KEY(alias_id) REFERENCES instrument_aliases (id),
FOREIGN KEY(instrument_id) REFERENCES instruments (id)
-);
+) ENGINE=InnoDB;
CREATE TABLE media_item_performances (
media_item_id INTEGER NOT NULL,
instrument_id INTEGER NOT NULL,
- alias_id INTEGER NOT NULL,
- instruments_num VARCHAR(250) NOT NULL,
- musicians VARCHAR(250) NOT NULL,
+ alias_id INTEGER,
+ instruments_num VARCHAR(250) NOT NULL DEFAULT '',
+ musicians VARCHAR(250) NOT NULL DEFAULT '',
FOREIGN KEY(media_item_id) REFERENCES media_items (id),
FOREIGN KEY(instrument_id) REFERENCES instruments (id),
FOREIGN KEY(alias_id) REFERENCES instrument_aliases (id)
-);
+) ENGINE=InnoDB;
--
-- Contexte ethnographique
CREATE TABLE context_keywords (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(250) NOT NULL
-);
+) ENGINE=InnoDB;
CREATE TABLE media_item_keywords (
item_id INTEGER NOT NULL,
PRIMARY KEY(item_id, keyword_id),
FOREIGN KEY(item_id) REFERENCES media_items (id),
FOREIGN KEY(keyword_id) REFERENCES context_keywords (id)
-);
+) ENGINE=InnoDB;
--
-- Utilisateurs
CREATE TABLE users (
username VARCHAR(64) NOT NULL PRIMARY KEY,
level ENUM ('user', 'maintainer', 'admin') NOT NULL,
- first_name VARCHAR(250) NOT NULL,
- last_name VARCHAR(250) NOT NULL,
- phone VARCHAR(250) NOT NULL,
- email VARCHAR(250) NOT NULL
-);
+ first_name VARCHAR(250) NOT NULL DEFAULT '',
+ last_name VARCHAR(250) NOT NULL DEFAULT '',
+ phone VARCHAR(250) NOT NULL DEFAULT '',
+ email VARCHAR(250) NOT NULL DEFAULT ''
+) ENGINE=InnoDB;
--
-- Séléctions
name VARCHAR(250) NOT NULL,
FOREIGN KEY(owner_username) REFERENCES users (username)
-);
+) ENGINE=InnoDB;
CREATE TABLE playlist_resources (
playlist_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
resource_id INTEGER NOT NULL,
FOREIGN KEY(playlist_id) REFERENCES playlists (id)
-);
+) ENGINE=InnoDB;
--
username VARCHAR(64) NOT NULL,
FOREIGN KEY(username) REFERENCES users (username)
-);
+) ENGINE=InnoDB;