Salut à tous.
Envoyé par
Tanaka59
J'ai un gros doute sur la conception lors des "CREATE TABLE"
La bonne question que vous auriez dû poser est comment bien déclarer mes index ?
A) En ce qui concerne la clef primaire, je réponds ainsi :
`num_client` integer unsigned NOT NULL PRIMARY KEY,
Le seul problème a cette déclaration est que vous devez insérer, par vous-même, des valeur à votre "num_client".
Pas toujours pratique de le faire.
Si vous ne désirez pas trop vous casser la tête et laisser MySql vous attribuer des valeurs, faites cela :
`num_client` integer unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
Pourquoi mettre "integer unsigned" et non "integer" ?
Votre colonne "num_client" va accepter que ces valeurs positives.
Autant définir votre colonne avec la plage maximale.
--> https://dev.mysql.com/doc/refman/8.0...ger-types.html
La plage va de 0 jusqu'à 4294967295.
Si "integer unsigned" est encore trop petit, mettez "bigint unsigned".
La plage va alors de 0 jusqu'à 2^64 - 1.
Que représente cette clef primaire (je parle de la déclarative ci-dessus avec auto_incrément) ?
A-1) c'est un index.
A-2) chaque valeur sera unique dans l'index.
A-3) la valeur NULL est interdite
A-4) avec AUTO_INCREMENT, c'est MySql qui incrémente de +1 chaque insertion, en commençant par 1.
A-5) la valeur maximale est stockée dans la base et peut-être récupéré par "last_insert_id()" :
--> https://dev.mysql.com/doc/refman/8.0...last-insert-id
A-6) on peut faire référence à la primary key (dans la version 8.0) en utilisant "_rowid".
A-7) il est vivement conseillé de toujours définir une clef primaire auto incrémenté dans une table.
A-8) c'est un index technique qui sert à rendre unique chaque ligne d'une table.
B) "key" ou "index" sont synonymes dans MySql.
C) à quoi peut servir un "UNIQUE INDEX" ?
Quand vous avez besoin d'utiliser un index, autre que la clef primaire, dont la recherche unique sera basée sur un autre critère.
Par exemple, selon la date de saisie, dont celle-ci comprendra la date, l'heure et pourquoi pas les millionièmes de secondes.
Comme le dit Escartefigue :
Envoyé par
Escartefigue
Une clef primaire est par définition unique, donc, définir à la fois une contrainte PK et une contrainte unique sur cette colonne est une redondance.
ceci est tout à fait vrai dans MySql, pas nécessairement dans d'autres SGBDR.
Par exemple :
unique index `idx` (`col1`,`col2`,`col3`)
C-1) Il est vivement conseillé de nommer chaque index. Ici, j'ai mis "idx".
C-2) L'index unique autorise les NULL, sauf si vous spécifiez explicitement (NOT NULL) que vous n'en voulez pas.
C-3) On peut associer plusieurs colonnes à un index afin de rendre celui-ci unique.
D) à quoi peut servir une "foreign key" ?
C'est associer des lignes d'une table fille à une ligne unique d'une table mère.
C'est une relation de type hiérarchique.
Par exemple :
CONSTRAINT `FK_01` FOREIGN KEY (`fk_mere_id`) REFERENCES `mere` (`mere_id`) ON DELETE CASCADE ON UPDATE CASCADE
D-1) il faut nommer cette clef étrangère, ici : "FK_01".
D-2) vous devez faire référence à la clef primaire d'une table mère, ici : "mere".
D-3) la clef étrangère "fk_mere_id" que vous déclarez dans la table fille doit avoir exactement la même déclarative "mere_id" que dans la table "mère".
D-4) la table "mère" doit être déclarée et remplie avant la table "fille" sinon, lors de l'insertion d'une ligne dans la table "fille", celle-ci sera rejeté.
D-5) lors de la suppression d'une ligne dans la table "mère", vous pouvez spécifier comment seront traiter les lignes en relation de la table fille.
Il s'agit de cette déclaration : "ON DELETE CASCADE ON UPDATE CASCADE".
--> https://dev.mysql.com/doc/refman/8.0...eign-keys.html
Voici un résumé de ce qu'il faut savoir sur les index.
Au lieu de nous parlez des index par des exemples, le mieux aurait été de nous demander dans quel cas nous devons utiliser un index :
--> pour définir une relation entre deux tables (foreign key).
--> pour des questions de performances.
--> comment définir un ou plusieurs identifiants dans une table mysql.
@+
Partager