Dziś dowiedziałem się, że możesz mieć klucz podstawowy za pomocą dwóch kolumn (tsql). PK musi być unikalny, ale obie kolumny nie (kombinacja musi być unikalna).Dwie kolumny jako klucze podstawowe w mysql?
Myślałem, że to było bardzo fajne. Pojawiły się co najmniej dwa pytania dotyczące SO, które zapytałem, gdzie ludzie krzyczeli na mnie, że robię moje (mysql) bazy danych źle, tylko z jedną osobą, która mówi, że zrobiłem to dobrze. Więc ... to pozostawia mi pewne wątpliwości:
Czy robi to, co myślę?
create table User(
id INT primary key AUTO_INCREMENT ,
ipaddr TEXT NOT NULL ,
email TEXT NOT NULL
);
create table test(
a INT NOT NULL ,
b INT NOT NULL ,
dummy INT NOT NULL ,
FOREIGN KEY (a) REFERENCES User(id),
FOREIGN KEY (b) REFERENCES User(id),
PRIMARY KEY(a,b)
);
Pobiegłem poniżej więc wydaje się, że robi to, co myślę (combo musi być unikalna. Ale sama wartość w kolumnie nie muszą być unikalne). Czy powinienem być świadomy czegoś? Musiał być powód, dla którego nikt mi o tym nie wspomniał, jeśli chodzi o mysql?
mysql> insert into test(a,b,dummy) select 1,1,1;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test(a,b,dummy) select 1,2,2;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test(a,b,dummy) select 2,1,3;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test(a,b,dummy) select 2,2,4;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test(a,b,dummy) select 1,2,5;
ERROR 1062 (23000): Duplicate entry '1-2' for key 'PRIMARY'
Sposób, w jaki to demonstrujesz, sugeruje mi, że rozumiesz to poprawnie. –
@ s.bandara yep. Zamierzam to spekulować do analnych noobów. (krzycząc, że mój stół jest źle zaprojektowany i potrzebuję PK, ale nie sugeruję powyższego). –
Cóż, jeden punkt, do którego należy się odnieść, byłby również uzasadnieniem dla tego, dlaczego chcesz to zrobić. –