深浅模式
数据库表设计
数据库:yr_outpatient_db
选项 | 说明 |
---|---|
名称 | yr_outpatient_db |
用途 | 门诊练习项目数据库 |
字符集/排序 | 使用默认(练习足够) |
sql
DROP DATABASE IF EXISTS yr_outpatient_db;
CREATE DATABASE yr_outpatient_db;
USE yr_outpatient_db;
说明备注
- 练习场景,保持最简。需要中文排序再加字符集也不迟。
表:t_account
(用户)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 账户表 ID |
account | VARCHAR(255) | NOT NULL, UNIQUE | 账户(登录名) |
password | VARCHAR(255) | NOT NULL | 账户密码 |
created_time | DATETIME | NULL | 创建时间 |
sql
CREATE TABLE t_account (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '账户表ID',
account VARCHAR(255) NOT NULL COMMENT '账户',
password VARCHAR(255) NOT NULL COMMENT '账户密码',
created_time DATETIME NULL COMMENT '创建时间',
UNIQUE KEY uq_account_account (account)
) ENGINE=InnoDB COMMENT='用户';
说明备注
- 只做登录用;
account
做唯一约束,避免重复账号。
表:t_patient
(病人)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 病人 ID |
name | VARCHAR(255) | 病人姓名 | |
birthday | DATETIME | 出生日期 | |
sex | VARCHAR(1) | 性别 | |
weight | INT | 体重 | |
is_married | VARCHAR(2) | 是否婚配 | |
created_time | DATETIME | 创建时间 |
sql
CREATE TABLE t_patient (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '病人ID',
name VARCHAR(255) COMMENT '病人姓名',
birthday DATETIME COMMENT '出生日期',
sex VARCHAR(1) COMMENT '性别',
weight INT COMMENT '体重',
is_married VARCHAR(2) COMMENT '是否婚配',
created_time DATETIME COMMENT '创建时间'
) ENGINE=InnoDB COMMENT='病人';
说明备注
- 此表按图片保留基础静态信息;联系方式等扩展可后续加列。
表:t_medical_record
(病历)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 病历 ID |
patient_id | INT | FK→t_patient(id) | 病人 ID |
chief_complaint | VARCHAR(255) | 主诉 | |
hpi | VARCHAR(255) | 现病史 (History of Present Illness) | |
pmh | VARCHAR(255) | 既往史 (Past Medical History) | |
ph | VARCHAR(255) | 个人史 (Personal History) | |
diagnosis | VARCHAR(255) | 诊断 | |
created_time | DATETIME | 创建时间 |
sql
CREATE TABLE t_medical_record (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '病历ID',
patient_id INT NOT NULL COMMENT '病人ID',
chief_complaint VARCHAR(255) COMMENT '主诉',
hpi VARCHAR(255) COMMENT '现病史',
pmh VARCHAR(255) COMMENT '既往史',
ph VARCHAR(255) COMMENT '个人史',
diagnosis VARCHAR(255) COMMENT '诊断',
created_time DATETIME COMMENT '创建时间',
KEY idx_mr_patient (patient_id),
CONSTRAINT fk_mr_patient FOREIGN KEY (patient_id)
REFERENCES t_patient(id) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB COMMENT='病历';
说明备注
- 一次就诊一条病历,最少要绑定
patient_id
。 - 需要记录医生或就诊/录入日期时,可追加列(本版本按图片保留
created_time
)。
表:t_prescription
(处方)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 处方 ID |
medical_record_id | INT | FK→t_medical_record(id) | 病例 ID |
doctor_order | VARCHAR(255) | 医嘱 | |
created_time | DATETIME | 处方日期 |
sql
CREATE TABLE t_prescription (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '处方ID',
medical_record_id INT NOT NULL COMMENT '病例ID',
doctor_order VARCHAR(255) COMMENT '医嘱',
created_time DATETIME COMMENT '处方日期',
KEY idx_prescription_mr (medical_record_id),
CONSTRAINT fk_prescription_mr FOREIGN KEY (medical_record_id)
REFERENCES t_medical_record(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB COMMENT='处方';
说明备注
- 处方依附于病历;删病历时连带删处方,练习中便于保持一致性。
表:t_medicine_use_circumstance
(药品使用情况)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | ID |
medicine_id | INT | FK→t_medicine(id) | 药品 ID |
prescription_id | INT | FK→t_prescription(id) | 处方 ID |
how_to_use | VARCHAR(255) | 使用方法 | |
num | INT(10) | 药品份数 |
sql
CREATE TABLE t_medicine_use_circumstance (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
medicine_id INT NOT NULL COMMENT '药品ID',
prescription_id INT NOT NULL COMMENT '处方ID',
how_to_use VARCHAR(255) COMMENT '使用方法',
num INT(10) COMMENT '药品份数',
KEY idx_muc_prescription (prescription_id),
KEY idx_muc_medicine (medicine_id),
CONSTRAINT fk_muc_prescription FOREIGN KEY (prescription_id)
REFERENCES t_prescription(id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_muc_medicine FOREIGN KEY (medicine_id)
REFERENCES t_medicine(id) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB COMMENT='药品使用情况';
说明备注
- 这是“处方明细”,一张处方对应多条用药记录。
- 若要避免同一处方重复录入同一药,可加唯一约束
(prescription_id, medicine_id, how_to_use)
。
表:t_medicine
(药品)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 药品 ID |
kind_id | INT | FK→t_medicine_kind(id) | 分类 ID |
name | VARCHAR(255) | 药品名称 | |
number | INT | 库存数 | |
unit | VARCHAR(255) | 单位 | |
specification | INT | 规格(按图为 INT) | |
expiration_time | DATETIME | 有效期 | |
price | DOUBLE | 单价 |
sql
CREATE TABLE t_medicine (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '药品ID',
kind_id INT COMMENT '分类ID',
name VARCHAR(255) COMMENT '药品名称',
number INT COMMENT '库存数',
unit VARCHAR(255) COMMENT '单位',
specification INT COMMENT '规格',
expiration_time DATETIME COMMENT '有效期',
price DOUBLE COMMENT '单价',
KEY idx_medicine_kind (kind_id),
CONSTRAINT fk_medicine_kind FOREIGN KEY (kind_id)
REFERENCES t_medicine_kind(id) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB COMMENT='药品';
说明备注
- 类型严格按图片;如果上机实操更稳,建议把
specification
改为VARCHAR(100)
,price
改为DECIMAL(10,2)
(此条仅建议,非本版强制)。
表:t_medicine_kind
(药品分类)
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | INT | PK, AUTO_INCREMENT | 分类 ID |
pid | INT | FK→t_medicine_kind(id) | 父 ID |
name | VARCHAR(255) | 分类名称 |
sql
CREATE TABLE t_medicine_kind (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '分类ID',
pid INT NULL COMMENT '父ID',
name VARCHAR(255) COMMENT '分类名称',
CONSTRAINT fk_mk_parent FOREIGN KEY (pid)
REFERENCES t_medicine_kind(id) ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB COMMENT='药品分类';
说明备注
- 自关联树形分类;父类删除时子类父 ID 置空。
- 如需避免同父类下重名,可加唯一约束
(pid, name)
。
评论