Les SGBD relationnels possèdent un mécanisme, clés primaires et clés étrangères, permettant d'assurer l'intégrité des associations qui existent entre 2 tables.
Une étape importante de conception d'une base de données relationnelle organisée est la normalisation
Une seule table Recipes
Devient
Cooks
Recipes
Mécanisme permettant d'assurer l'intégrité relationnelle
PRIMARY KEY
FOREIGN KEYS
📚 Primary key
📚 Foreign keys
Identifie de façon UNIQUE et NOT NULL chaque enregistrement par la valeur d'une ou plusieurs colonnes
CREATE OR REPLACE TABLE teachers ( -- Raccourci directement à la création de la colonne -- PRIMARY est optionnel, mais on précise pour être explicite employee_number INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200) NOT NULL ); -- DESCRIBE teachers; pour constater le NOT NULL ajouté automatiquement CREATE OR REPLACE TABLE courses ( code CHAR(10) NOT NULL, name VARCHAR(200) NOT NULL, teacher_employee_number INT UNSIGNED, semester CHAR(5) NOT NULL, -- Définition dédiée, permet de nommer PLUSIEURS colonnes: CLÉ COMPOSITE PRIMARY KEY (code, teacher_employee_number, semester) );
Force un lien vers un enregistrement identifié par une PRIMARY KEY
CREATE OR REPLACE TABLE courses ( code CHAR(10) NOT NULL, name VARCHAR(200) NOT NULL, semester CHAR(5) NOT NULL, teacher_employee_number INT UNSIGNED, -- Interet de mettre NOT NULL ??? -- Le type des 2 colonnes doit correspondre FOREIGN KEY (teacher_employee_number) REFERENCES teachers (employee_number) ); CREATE OR REPLACE TABLE grades ( student_da VARCHAR(7), grade SMALLINT UNSIGNED NOT NULL, course_code CHAR(10) NOT NULL, course_teacher INT UNSIGNED NOT NULL, course_semester CHAR(5) NOT NULL, PRIMARY KEY (student_da, course_code, course_teacher, course_semester), FOREIGN KEY (course_code, course_teacher, course_semester) REFERENCES courses (code, teacher_employee_number, semester) -- , FOREIGN KEY (student_da) REFERENCES students (da) -- On peut définir plusieurs FK );
On peut préciser le comportement à implémenter lors de la modification de la PRIMARY KEY ou suppression d'un enregistrement parent
FOREIGN KEY (col[, ...]) REFERENCES table_name (col[, ...]) [ON DELETE { RESTRICT | CASCADE | SET NULL }] [ON UPDATE { RESTRICT | CASCADE | SET NULL }]
CASCADE
SET NULL
FOREIGN KEY
Permet de récupérer des données de plusieurs tables en exploitant les relations établies entres elles
SELECT select_expr [, select_expr ...] FROM table_ref [, table_ref ...] table_ref: table_factor | CROSS JOIN | INNER JOIN table_factor ON conditional_expr | { LEFT | RIGHT } JOIN table_factor ON conditional_expr
👉 Démarche