Сегодня я узнал, что вы можете иметь первичный ключ, используя два столбца (tsql). PK должен быть уникальным, но оба столбца не являются (комбо должно быть уникальным).
Я думал, что это очень круто. Было, по крайней мере, два вопроса SO, на которых я спросил, где люди кричали на меня, что я делаю свои (mysql) базы данных не так, как только один человек говорит, что я сделал это хорошо. Итак... это оставляет мне какое-то сомнение.
Делает ли это то, что я думаю, что он делает?
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)
);
Я побежал ниже, так что кажется, что я делаю то, что думаю (комбо должно быть уникальным. Но одно и то же значение в столбце не обязательно должно быть уникальным). Должен ли я знать что-то? Должна быть причина, о которой никто не упоминал мне в отношении 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'