51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计电子病历系统的核心数据库表结构,包括患者表、病历表、诊断表、药品表、检查表等,并说明各表之间的关联关系(如患者-病历、病历-诊断、诊断-药品),以及如何优化查询性能(如按时间顺序查询病历记录)。

雄安宣武医院急需紧缺优秀人才难度:中等

答案

1) 【一句话结论】:电子病历系统核心数据库通过关系型表设计,以患者ID为纽带关联病历、诊断、药品等表,通过外键约束保证数据一致性,并利用时间戳列和索引优化时间顺序查询性能。

2) 【原理/概念讲解】:电子病历系统属于典型的关系型数据库应用,核心是设计表结构并建立关联。关系型数据库用表存储数据,表间通过**外键(Foreign Key)**关联,实现数据复用。比如患者表与病历表是一对多关系(一个患者对应多份病历),病历表与诊断表是一对多(一份病历包含多个诊断),诊断表与药品表是多对多(一个诊断可能对应多种药品,一种药品用于多个诊断),此时需通过中间表(如诊断-药品关联表)实现多对多。**索引(如B树索引)**用于加速查询,特别是时间范围查询,因为时间列适合用范围索引(如按时间顺序查病历记录)。

3) 【对比与适用场景】:

表名关键字段关联关系说明
患者表患者ID(主键)、姓名、身份证号、联系方式一对多(患者-病历)每个患者对应多份病历
病历表病历ID(主键)、患者ID(外键)、创建时间(时间戳)、状态一对多(病历-诊断/检查/药品)一份病历包含多个诊断、检查、药品记录
诊断表诊断ID(主键)、病历ID(外键)、诊断内容、诊断时间一对多(病历-诊断)一份病历有多个诊断
药品表药品ID(主键)、药品名称、规格、厂家多对多(诊断-药品,通过中间表)一种药品用于多个诊断,一个诊断用多种药品
检查表检查ID(主键)、病历ID(外键)、检查项目、检查结果一对多(病历-检查)一份病历有多个检查记录

4) 【示例】:伪代码表结构(最小可运行示例):

-- 患者表
CREATE TABLE patient (
    patient_id INT PRIMARY KEY,
    name VARCHAR(100),
    id_card VARCHAR(18),
    phone VARCHAR(11)
);

-- 病历表(带时间戳,用于时间顺序查询)
CREATE TABLE medical_record (
    record_id INT PRIMARY KEY,
    patient_id INT,
    create_time TIMESTAMP NOT NULL,
    status VARCHAR(20),
    FOREIGN KEY (patient_id) REFERENCES patient(patient_id)
);

-- 诊断表
CREATE TABLE diagnosis (
    diagnosis_id INT PRIMARY KEY,
    record_id INT,
    diagnosis_content TEXT,
    diagnosis_time TIMESTAMP,
    FOREIGN KEY (record_id) REFERENCES medical_record(record_id)
);

-- 药品表
CREATE TABLE drug (
    drug_id INT PRIMARY KEY,
    drug_name VARCHAR(100),
    specification VARCHAR(50),
    manufacturer VARCHAR(100)
);

-- 多对多关联中间表(诊断-药品)
CREATE TABLE diagnosis_drug (
    diagnosis_id INT,
    drug_id INT,
    PRIMARY KEY (diagnosis_id, drug_id),
    FOREIGN KEY (diagnosis_id) REFERENCES diagnosis(diagnosis_id),
    FOREIGN KEY (drug_id) REFERENCES drug(drug_id)
);

-- 检查表
CREATE TABLE checkup (
    checkup_id INT PRIMARY KEY,
    record_id INT,
    checkup_item VARCHAR(100),
    checkup_result TEXT,
    FOREIGN KEY (record_id) REFERENCES medical_record(record_id)
);

5) 【面试口播版答案】:
面试官您好,设计电子病历系统的核心数据库表结构,我会从表设计、关联关系和性能优化三方面说明。首先,表设计以患者ID为纽带,患者表存储患者基本信息,病历表关联患者并记录创建时间;病历表与诊断表、检查表是一对多关系(一份病历包含多个诊断/检查),诊断表与药品表是多对多关系(通过中间表关联)。关联关系通过外键约束保证数据一致性,比如病历表的外键指向患者表。性能优化方面,为时间顺序查询(如按时间查病历记录),在病历表的create_time列建立B树索引,加速范围查询。核心是利用关系型数据库的表关联和外键,结合索引优化查询效率,确保数据完整性和查询性能。

6) 【追问清单】:

  • 问:外键约束的作用?
    答:保证表间数据一致性,防止插入无效关联(如病历表中的患者ID不存在于患者表)。
  • 问:时间顺序查询为什么用时间戳列?
    答:时间戳能精确记录创建时间,B树索引支持范围查询(如查询最近30天的病历),提升查询效率。
  • 问:多对多关系如何处理?
    答:通过中间表(如诊断-药品关联表),用两个外键分别关联诊断表和药品表,实现多对多关联。
  • 问:索引选择是否会影响写入性能?
    答:是的,索引会增加写入开销,需权衡,比如时间列的索引对时间查询有效,但写入时需要更新索引,实际应用中需根据查询频率设计索引。
  • 问:数据量大的话如何优化?
    答:可以分表(如按年份分病历表),或者使用分区表(按时间分区),减少单表数据量,提升查询性能。

7) 【常见坑/雷区】:

  • 外键引用完整性未设置:导致插入无效数据(如病历表患者ID不存在)。
  • 时间列类型错误:用字符串存储时间,无法建立索引或范围查询。
  • 多对多关系直接用外键:会导致表结构复杂,推荐用中间表。
  • 索引过度:为所有字段建索引,导致写入慢,查询优化器选择不当。
  • 数据冗余:如患者表存储电话,病历表也存,增加存储空间,影响更新一致性。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1