From: olivier Date: Wed, 22 Apr 2009 18:26:51 +0000 (+0000) Subject: docref/sql: X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=d576b8a2d1b4c479b8412fb6b5a160b017bc042f;p=telemeta-data.git docref/sql: - make media_collections.reference unique again - sql: fix null and default values - sql: fix some foreign key constraints - sql: use InnoDB engine git-svn-id: http://svn.parisson.org/svn/crem@81 3bf09e05-f825-4182-b9bc-eedd7160adf0 --- diff --git a/trunk/docref/crem.sql b/trunk/docref/crem.sql index 34a53c4..06b0d5b 100644 --- a/trunk/docref/crem.sql +++ b/trunk/docref/crem.sql @@ -34,6 +34,15 @@ -- 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 -- @@ -41,52 +50,52 @@ 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 @@ -95,7 +104,7 @@ CREATE TABLE generic_styles ( 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, @@ -103,7 +112,7 @@ CREATE TABLE publisher_collections ( value VARCHAR(250) NOT NULL, FOREIGN KEY(publisher_id) REFERENCES publishers (id) -); +) ENGINE=InnoDB; -- -- Thésaurus géographique @@ -112,36 +121,36 @@ CREATE TABLE publisher_collections ( 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 @@ -150,14 +159,14 @@ CREATE TABLE location_relations ( 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 @@ -165,42 +174,42 @@ CREATE TABLE ethnic_group_aliases ( 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), @@ -212,7 +221,7 @@ CREATE TABLE media_collections ( 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 @@ -221,37 +230,38 @@ CREATE TABLE media_collections ( 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 @@ -265,7 +275,7 @@ CREATE TABLE media_parts ( end FLOAT NOT NULL, FOREIGN KEY(item_id) REFERENCES media_items (id) -); +) ENGINE=InnoDB; -- -- Instruments et formations @@ -274,7 +284,7 @@ CREATE TABLE media_parts ( 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, @@ -282,12 +292,12 @@ CREATE TABLE instrument_relations ( 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, @@ -295,19 +305,19 @@ CREATE TABLE instrument_alias_relations ( 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 @@ -316,7 +326,7 @@ CREATE TABLE media_item_performances ( 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, @@ -325,7 +335,7 @@ CREATE TABLE media_item_keywords ( 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 @@ -334,11 +344,11 @@ CREATE TABLE media_item_keywords ( 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 @@ -350,7 +360,7 @@ CREATE TABLE playlists ( 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, @@ -358,7 +368,7 @@ CREATE TABLE playlist_resources ( resource_id INTEGER NOT NULL, FOREIGN KEY(playlist_id) REFERENCES playlists (id) -); +) ENGINE=InnoDB; -- @@ -374,5 +384,5 @@ CREATE TABLE revisions ( username VARCHAR(64) NOT NULL, FOREIGN KEY(username) REFERENCES users (username) -); +) ENGINE=InnoDB; diff --git a/trunk/docref/docref.odt b/trunk/docref/docref.odt index 09bbf2f..934cd16 100644 Binary files a/trunk/docref/docref.odt and b/trunk/docref/docref.odt differ