建模一个表,该表依赖于引用表中的一组值,这些值可以同时存在或不存在

时间:2013-03-03 00:55:58

标签: sql database database-design

我有一个表'medical_observations',在一个字段中引用其他表'sypstoms_at_arriving'来描述可能的症状列表。

    CREATE TABLE `patients`(
      id_patient   INTEGER  NOT NULL PRIMARY KEY,
      name         VARCHAR(25)  ,
      address      VARCHAR(50) ,
      CONSTRAINT `uc_Info_Patient` UNIQUE (`id_patient`)           
);
INSERT INTO `patients` values (1,'joe','joe´s address');
INSERT INTO `patients` values (2,'moe','moe´s address');
INSERT INTO `patients` values (3,'karl','karle´s address');
INSERT INTO `patients` values (4,'lenny','lenny´s address');




CREATE TABLE `symptoms_at_arrival` (
       symptom_at_arrival varchar(30) primary key
     );

INSERT INTO `symptoms_at_arrival` values ('vomit');
INSERT INTO `symptoms_at_arrival` values ('urine');
INSERT INTO `symptoms_at_arrival` values ('dizziness');
INSERT INTO `symptoms_at_arrival` values ('convulsion');



CREATE TABLE `medical_observations`(
      id_medical_observation   INTEGER  NOT NULL PRIMARY KEY,
      id_patient               INTEGER  NOT NULL,
      symptom_at_arrival       VARCHAR(30),  
      FOREIGN KEY (id_patient)            references `patients`             (id_patient),
      FOREIGN KEY (symptom_at_arrival)    references `symptoms_at_arrival` (symptom_at_arrival ),
      CONSTRAINT `uc_Info_medical_Observation` UNIQUE (`id_medical_observation`,`id_patient`)           
    );

我怀疑的是,当患者有多种症状时,如何建模或存储病例......而不仅仅是一种症状。 如果是这种情况,症状的名称就足够了......

但如果患者同时出现几种症状?

更新

我做了一个sqlfiddle,我正在考虑添加一种带有1和0的表,表示患者是否出现某些症状......这是正确的吗?

1 个答案:

答案 0 :(得分:1)

您必须在外键中建立连接

|patient|        |medical_observations|              |symptoms_at_arriving|
---------        ----------------------              ----------------------
**id** 1 ----|   **id_medical_observation** |-----1  **id**
name         |-M **id_patient**             |        symptom_at_arrival
                 **symptom_at_arrival** M---|

试试这个,不要在这里测试mysql,使表多主键同时支持多个症状

    CREATE TABLE `symptoms_at_arriving` (
       id    integer not null primary key autoincrement,
       symptom_at_arrival varchar(30)
     );
     INSERT INTO `symptom_at_arrival' values ('vomit');
     INSERT INTO `symptom_at_arrival` values ('urine');
    INSERT INTO `symptom_at_arrival` values ('dizziness');
    INSERT INTO `symptom_at_arrival` values ('convulsion');

CREATE TABLE `medical_observations`(
      id_medical_observation   INTEGER  NOT NULL,
      id_patient               INTEGER  NOT NULL,
      symptom_at_arrival       integer not null,  
      FOREIGN KEY (id_patient)            references `patients`             (id_patient),
      FOREIGN KEY (symptom_at_arrival)    references `symptoms_at_arriving` (symptom_at_arrival,
      PRIMARY KEY (id_medical_observation, id_patient, symptom_at_arrival)

);