Bonjour,
J'ai par exemple deux tables dont voici le DDL :
J'ai quelques questions basiques, dont je pense connaître déjà les réponses, mais je voudrais être certain. En effet, si le SQL est un langage fortement sémantique, je trouve qu'il y a beaucoup de "non dit", ou plus exactement d'automatismes qui dépassent parfois, ou pas, la volonté de l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 create table dbo.sexe ( id int identity not null primary key, libelle varchar(10) not null unique ); create table dbo.personne ( id int identity not null primary key, sexe_id int null references dbo.sexe(id), nom varchar(50) not null, email varchar(256) not null unique ); create unique index uix_personne_email on dbo.personne(email);
1/ Lorsque j'ai le mot clé PRIMARY KEY, de facto, il y a un CLUSTERED UNIQUE INDEX qui est créé, n'est-ce pas ?
2/ Lorsque j'ai le mot clé REFERENCES, de facto, il y a un NONUNIQUE INDEX posé sur la colonne, n'est-ce pas ? Si la colonne est nullable, quel est l'impact sur l'index associé ?
3/ Lorsque j'ai le mot clé UNIQUE, là, je sèche un peu... Un contrainte UNIQUE n'implique pas NOT NULL, donc contrairement à ce que j'ai pu lire sur des forums, ce n'est pas forcément une clé alternative qui est créée. Est-ce un index unique ?
4/ Comment je fais si je veux que ma clé primaire ne soit pas organisée en cluster, mais que ce soit un autre index, pas forcément unique ? Actuellement je me contente de mettre "cluster" en face de la colonne désirée. Mais si la table existe déjà ?
Et enfin, la dernière question qui tue : est-ce que les réponses aux 3 premiers points ci-dessus sont identiques sur tous les SGBD (à défaut, au moins Oracle) ?
En effet, il y a très longtemps, à l'âge d'or des dinosaures, quand j'ai appris le SQL sur Ingres, les "automatismes" su-cités n'étaient tout bonnement pas présents.
Un contrainte d'unicité n'impliquait en rien la création d'un index. Pas plus même qu'une clé primaire, il fallait faire les deux ! Ou alors mon prof était franchement à la rue, ce qui n'est pas forcément impossible.
Et lorsque les dinosaures sont morts, remplacés par quelques homo érectus, on m'a expliqué un jour qu'une base de données Oracle ne contenant pas de clés primaires mais que des index uniques, pour la même raison (et encore plus loin, que les deux ne pouvaient pas cohabiter !) .A nouveaux, gros doutes, mais après tout, tout est possible la preuve, Oracle est toujours le SGBD le plus utilisé avec MySQL...
Partager