Je connais le concept de clé candidate dans la théorie des RDBMS, mais les clés candidates existent-elles vraiment dans des moteurs SQL actuels? Je veux dire, c'est qu'il y a un moyen de désigner une colonne ou un ensemble de colonnes particulières en tant que clé candidate dans l'un des systèmes de gestion de la base de données SQL, dites SQL Server, Postgres, MySQL, Oracle, etc.?
Existe-t-il un mot-clé réservé pour désigner des colonnes comme une clé candidate comme PRIMARY KEY
ou UNIQUE
en cas de colonne principale et de colonne unique?
Je ressens UNIQUE
la contrainte elle-même fournit la mise en œuvre du concept de clé candidat. Je ne vois aucune valeur pratique d'avoir une CANDIDATE KEY
mot-clé. Est-ce tellement?
Autant que je sache, aucun système de gestion de la base de données SQL (SGMS) fournit le CANDIDATE KEY
Mot-clé comme tel, mais (comme je considère que vous suggérez dans la question) qui ne signifie pas que la notion (ou la fonctionnalité) de clé candidate Ne peut pas être configuré dans une table SQL.
Par exemple, si
ensuite, le concepteur est, précisément, représentant une clé candidate.
Par exemple, le tableau suivant montre trois clés de candidat distinctes:
CREATE TABLE Foo (
FooId INT NOT NULL,
Bar CHAR(30) NOT NULL,
Baz DATETIME NOT NULL,
Qux INT NOT NULL,
Corge CHAR(25) NOT NULL,
Grault INT NOT NULL,
Garply BIT NOT NULL,
Plugh TEXT NOT NULL,
CONSTRAINT Foo_CK1 UNIQUE (FooId), -- Single-column CANDIDATE KEY
CONSTRAINT Foo_CK2 UNIQUE (Bar), -- Single-column CANDIDATE KEY
CONSTRAINT Foo_CK3 UNIQUE (Baz, Qux, Corge) -- Multi-column CANDIDATE KEY
);
Comme vous le savez, une clé candidate constituée de cette manière susceptible d'être la référence d'une ou de plusieurs contraintes de clé étrangère.
Il vaut la peine de souligner le fait que, puisque SQL et ses dialectes incluent l'idée de marques nulles, une contrainte unique seule n'est pas suffisante pour représenter une clé candidate (comme exposée dans l'échantillon DDL ci-dessus). Ce point est particulièrement important car la ou les colonnes contraintes comme une clé candidate ne peuvent pas conserver des marques nulles, sinon elles ne pouvaient pas être considérées comme une véritable clé candidate (en plus, il y a des raisons de faire valoir qu'une table entourant des marques nulles dans l'une de ses colonnes. ne peut pas être considéré comme une table relationnelle, mais oui, c'est un sujet différent).
Comment cela diffère-t-il de l'CANDIDATE KEY
approche de mots clés?
De cette manière, si les fournisseurs/développeurs d'un certain SQL SGBM souhaitent fournir le CANDIDATE KEY
Mot-clé, alors ce type de contrainte, mis à part l'application de la créance d'unicité évidente, doit également garantir le rejet de toute tentative d'insertion des marques nulles dans les colonnes pertinentes, facteur qui le ferait différent de l'approche combinant l'unique et ne sont pas une contrainte (s) nulle (s).
Si, au contraire,
ensuite, le concepteur représente une touche alternative (si, une table donnée a une ou plusieurs clés candidates, et l'une d'entre elles est accordée au statut de primaire, Ensuite, les restants deviennent des clés alternatives).
Par exemple, le tableau suivant présente une clé primaire et trois clés alternatives:
CREATE TABLE Foo (
FooId INT,
Bar CHAR(30) NOT NULL,
Baz DATETIME NOT NULL,
Qux INT NOT NULL,
Corge CHAR(25) NOT NULL,
Grault INT NOT NULL,
Garply BIT NOT NULL,
Plugh TEXT NOT NULL,
CONSTRAINT Foo_PK PRIMARY KEY (FooId), -- Single-column PRIMARY KEY
CONSTRAINT Foo_AK1 UNIQUE (Bar), -- Single-column ALTERNATE KEY
CONSTRAINT Foo_AK2 UNIQUE (Baz, Qux, Corge), -- Multi-column ALTERNATE KEY
CONSTRAINT Foo_AK3 UNIQUE (Grault) -- Single-column ALTERNATE KEY
);
Une autre clé maquillée comme illustrée ci-dessus peut être, évidemment, référencée d'une ou plusieurs contraintes de clé étrangère.
En utilisant le CANDIDATE KEY
mot clé quand il y a déjà une clé primaire?
En supposant qu'il y ait un SGBD qui fournit le CANDIDATE KEY
Mot clé, si une table a une clé primaire déclarée, la création d'une clé candidate doit être rejetée et la SGBD devrait aussi bien fournir le ALTERNATE KEY
Mot-clé de représenter une ou plusieurs touches alternatives applicables.
Oui, au niveau logique de l'abstraction d'une base de données, une clé candidate qui est établie au moyen d'une contrainte unique de niveau de table en conjonction avec le niveau de colonne applicable non null des contreparties (s) NULL), comme indiqué comme suit:
CREATE TABLE Foo (
FooId INT NOT NULL,
Bar CHAR(30) NOT NULL,
Baz DATETIME NOT NULL,
CONSTRAINT Foo_CK UNIQUE (FooId)
);
... serait équivalent à une clé primaire configurée comme indiqué ci-dessous:
CREATE TABLE Foo (
FooId INT,
Bar CHAR(30) NOT NULL,
Baz DATETIME NOT NULL,
CONSTRAINT Foo_PK PRIMARY KEY (FooId) -- Single-column PRIMARY KEY, constraint that implies the rejection of NULL marks.
);
En effet, si une table donnée n'a qu'une seule clé candidate (qui, comme illustré précédemment, peut être composite, c'est-à-dire composé de deux colonnes ou plus), il peut alors être pris en compte, automatiquement la clé primaire .
Et, oui, afin de soutenir une contrainte unique, certains SGMS peuvent utilisent un index dont le type est différent de celui de l'indice utilisé pour soutenir une Contrepartie principale (par exemple, non groupée vs en cluster ), mais Il s'agit d'un facteur qui fait partie du niveau d'abstraction physique (ou interne) (qui, au fait, pourrait ou non s'appliquer en fonction de la DBMS d'utilisation), il est donc entièrement en dehors de la portée des contraintes de niveau logique Configuré pour une table (tant que la DBMS garantit le caractère unique des valeurs contenues dans la colonne [S] impliquée).
Je vais sortir sur un membre et supposer que vous avez fait un cours basé sur le manuel d'Elmasri et de Navathe. Ce livre est tout à fait théorique et n'est pas le plus clair de la prose, et il a tendance à utiliser la terminologie qui n'est pas largement utilisée ailleurs. L'effet net qu'il semble confondre les élèves de manière semi-régulière - beaucoup, sinon la plupart des questions, comme cela semblent provenir d'élèves essayant de donner un sens à ce manuel.
Dans la modélisation des données, une clé candidate est une clé possible que vous pourrait utilisation pour identifier un enregistrement. Il peut y avoir juste un ou plusieurs qu'un; Certains peuvent être des références simples, certaines peuvent être des combinaisons d'attributs. C'est purement un concept de modélisation pour décrire les clés que vous pourrait Sélectionnez à utiliser comme identifiant principal.
Les tables d'une SGBDM ne peuvent avoir qu'une seule clé primaire (sélectionnée au moment de la conception), mais elles peuvent avoir plusieurs contraintes d'unicité. Normalement, vous sélectionneriez une clé (ou d'ajouter une clé synthétique) et d'utiliser cela comme identifiant principal. Vous pouvez également créer des contraintes d'unicité sur les colonnes qui composent d'autres clés candidates, bien que ce ne soient pas appelés clés candidates lorsqu'elles soient physiques de cette manière.