Skip to content

易软门诊


数据库表设计

数据库: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(用户)

字段名类型约束说明
idINTPK, AUTO_INCREMENT账户表 ID
accountVARCHAR(255)NOT NULL, UNIQUE账户(登录名)
passwordVARCHAR(255)NOT NULL账户密码
created_timeDATETIMENULL创建时间
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(病人)

字段名类型约束说明
idINTPK, AUTO_INCREMENT病人 ID
nameVARCHAR(255)病人姓名
birthdayDATETIME出生日期
sexVARCHAR(1)性别
weightINT体重
is_marriedVARCHAR(2)是否婚配
created_timeDATETIME创建时间
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(病历)

字段名类型约束说明
idINTPK, AUTO_INCREMENT病历 ID
patient_idINTFK→t_patient(id)病人 ID
chief_complaintVARCHAR(255)主诉
hpiVARCHAR(255)现病史 (History of Present Illness)
pmhVARCHAR(255)既往史 (Past Medical History)
phVARCHAR(255)个人史 (Personal History)
diagnosisVARCHAR(255)诊断
created_timeDATETIME创建时间
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(处方)

字段名类型约束说明
idINTPK, AUTO_INCREMENT处方 ID
medical_record_idINTFK→t_medical_record(id)病例 ID
doctor_orderVARCHAR(255)医嘱
created_timeDATETIME处方日期
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(药品使用情况)

字段名类型约束说明
idINTPK, AUTO_INCREMENTID
medicine_idINTFK→t_medicine(id)药品 ID
prescription_idINTFK→t_prescription(id)处方 ID
how_to_useVARCHAR(255)使用方法
numINT(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(药品)

字段名类型约束说明
idINTPK, AUTO_INCREMENT药品 ID
kind_idINTFK→t_medicine_kind(id)分类 ID
nameVARCHAR(255)药品名称
numberINT库存数
unitVARCHAR(255)单位
specificationINT规格(按图为 INT)
expiration_timeDATETIME有效期
priceDOUBLE单价
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(药品分类)

字段名类型约束说明
idINTPK, AUTO_INCREMENT分类 ID
pidINTFK→t_medicine_kind(id)父 ID
nameVARCHAR(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)

评论