You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多对一(Many to one)关系:护士与患者表关联方法问询

实现MySQL多对一(护士-患者)关联关系的方案

嘿,作为MySQL新手能想到用关联表来处理护士和患者的对应关系,已经迈出很关键的一步啦!针对你说的2名护士负责6名患者的场景,咱们可以通过主表(护士表)+ 从表(患者表)+ 外键约束来实现多对一关联,具体步骤如下:

1. 先创建「一」的一方:护士表

护士是“一对多”里的“一”,先建护士表,用唯一主键标识每个护士,比如nurse_id:

CREATE TABLE nurses (
    nurse_id INT AUTO_INCREMENT PRIMARY KEY,  -- 护士ID,自增主键,唯一标识每个护士
    nurse_name VARCHAR(50) NOT NULL,          -- 护士姓名
    nurse_employee_no VARCHAR(20) UNIQUE     -- 护士工号,保证唯一
);

-- 插入2名护士的示例数据
INSERT INTO nurses (nurse_name, nurse_employee_no)
VALUES 
('张护士', 'NURSE001'),
('李护士', 'NURSE002');

2. 再创建「多」的一方:患者表

患者是“多”的一方,每个患者对应一名护士,所以在患者表里加nurse_id字段,用它关联护士表的主键(这就是外键):

CREATE TABLE patients (
    patient_id INT AUTO_INCREMENT PRIMARY KEY,  -- 患者ID,自增主键
    patient_name VARCHAR(50) NOT NULL,          -- 患者姓名
    patient_age INT,                            -- 患者年龄
    nurse_id INT,                               -- 关联护士的ID
    -- 外键约束:保证patient里的nurse_id必须存在于nurses表中
    FOREIGN KEY (nurse_id) REFERENCES nurses(nurse_id)
        ON DELETE SET NULL  -- 如果护士被删除,患者的nurse_id设为NULL(也可用ON DELETE RESTRICT禁止删除有患者的护士)
        ON UPDATE CASCADE   -- 如果护士的nurse_id更新,患者的对应字段自动同步
);

-- 插入6名患者的示例数据,分配给两位护士
INSERT INTO patients (patient_name, patient_age, nurse_id)
VALUES 
('王患者', 45, 1),
('赵患者', 32, 1),
('孙患者', 58, 1),
('周患者', 27, 2),
('吴患者', 62, 2),
('郑患者', 39, 2);

3. 关联查询示例

表建好后,若想查询某护士负责的所有患者,用JOIN语句就能轻松实现:

-- 查询张护士负责的所有患者
SELECT n.nurse_name, p.patient_name, p.patient_age
FROM nurses n
JOIN patients p ON n.nurse_id = p.nurse_id
WHERE n.nurse_name = '张护士';

关键知识点说明

  • 外键的核心作用:确保数据完整性,比如你不能给患者分配一个不存在的护士ID,避免出现脏数据。
  • 外键行为可自定义:ON DELETE SET NULL和ON UPDATE CASCADE可以根据业务需求调整,比如如果不允许删除仍有患者的护士,可改成ON DELETE RESTRICT。

内容的提问来源于stack exchange,提问作者Vig Killa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:34:02