如何创建连锁主键?

时间:2015-02-24 10:27:01

标签: mysql primary-key

您好我是MySQL的新手,但我想根据在另外两个表中创建的两个主键创建一个唯一的ID。

以下是我们感兴趣的部分:

CREATE TABLE patient(
id_patient int NOT NULL AUTO_INCREMENT,
...,
PRIMARY KEY (id_patient))

CREATE TABLE surgeon(
id_surgeonint NOT NULL AUTO_INCREMENT,
...,
PRIMARY KEY (id_surgeon))

CREATE TABLE  case(
id_patient int NOT NULL,
id_surgeon int NOT NULL,
CONSTRAINT FK_case_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient),
CONSTRAINT FK_case_surgeon FOREIGN KEY (id_surgeon) REFERENCES surgeon(id_surgeon),
CONSTRAINT id_case PRIMARY KEY (id_patient, `_`,id_surgeon));

我想我不会得到这个伎俩。我想要以下结果:

SELECT * FROM case;

id_case  | id_patient | id_surgeon    
32_56    |     32     |     56
18_66    |     18     |     66

我知道计算的速度不是最佳的,但 id-case 确实是必要的,必须在选择期间

1 个答案:

答案 0 :(得分:0)

您可以创建一个计算列,如果您真的想要它在磁盘上的值,您可以保留计算列

CREATE TABLE  case(
id_patient int NOT NULL,
id_surgeon int NOT NULL,
id_case varchar(30) AS CONCAT(id_patient, '_', id_surgeon),
CONSTRAINT FK_case_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient),
CONSTRAINT FK_case_surgeon FOREIGN KEY (id_surgeon) REFERENCES surgeon(id_surgeon),
CONSTRAINT pk_case PRIMARY KEY (id_patient,id_surgeon));

然而,除非您要求该对(患者,外科医生)唯一地识别病例,否则您应该考虑增加一个额外的字段(例如手术日期)