Stellen Sie sich die folgende Tabelle vor. In meinem Fall bin ich ganz sicher, dass name
unique
und not null
[unique + not null = Primärschlüssel] sein muss. Daher ist name
ein Primärschlüssel. Aus einigen Gründen (wahrscheinlich aus Gewohnheit) habe ich natürlich einen Primärschlüssel id
Spalte des Typs int erstellt.SQL-Datenbank: Tabelle mit 2 Spalten (ID-Name) und 2 Primärschlüssel Dritte Normalform Boyce-Codd Normalform
Andere Annahmen: Ich muss unbedingt name
in meiner Tabelle zu halten, und ich bin absolut sicher, dass name
(des Typs varchar
) wird niemals 20 Zeichen überschreiten.
Nun ist meine erste Frage [wahrscheinlich enge Frage mit Ja oder Nein erwartet]: Respektiere ich BCNF Boyce-Codd Normalform, wenn ich eine solche Tabelle erstellen?
Zweite optionale Frage [wahrscheinlich offene Frage]: ist es gute Praxis, Spalte id
in diesem Fall zu erstellen?
CREATE TABLE Y (
id int,
name varchar(20),
PRIMARY KEY(id, name)
);
'name' und' id' sind beide * Kandidatenschlüssel *. Nur einer von ihnen kann als Primärschlüssel gewählt werden. Und um BCNF zu verletzen, benötigen Sie mindestens drei Spalten (vorausgesetzt, es hat eine PK). – joop
* eindeutig + nicht null = Kandidat Schlüssel * –
@ MikeSherrill'CatRecall 'Ja, Sie haben Recht. Es ist mein Fehler. Ich hätte sagen sollen: unique + not null = Kandidatentaste – S12000