]> git.parisson.com Git - telemeta-data.git/commitdiff
docref/sql:
authorolivier <olivier@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Wed, 22 Apr 2009 18:26:51 +0000 (18:26 +0000)
committerolivier <olivier@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Wed, 22 Apr 2009 18:26:51 +0000 (18:26 +0000)
- 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

trunk/docref/crem.sql
trunk/docref/docref.odt

index 34a53c4ed21975db014b73085c6186697e16ed03..06b0d5b01e786880148b1073b2a611264f6e5ebc 100644 (file)
 -- 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
@@ -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;
 
index 09bbf2f636fe4893b9f3d6f28e9b5b76a6eb7473..934cd168a5f8f9ecf910aaa7f8c2548f685fab3b 100644 (file)
Binary files a/trunk/docref/docref.odt and b/trunk/docref/docref.odt differ