1. ER图介绍
ER图(Entity-Relationship Diagram)实体关系图,是数据建模中最基本、最重要的一种图形化表示方法,用于展现不同实体之间的联系以及它们与数据的关系。
ER图通常由三个主要部分组成:
实体(Entity)
关系(Relationship)
属性(Attribute)
实体代表数据存储的对象,关系表示实体之间的联系,属性则反映实体或关系的本质特征。
2. 构建ER图
2.1 确定实体、属性和关系
在构建ER图之前,需要先确定实体、属性和关系,并且将它们进行分类和归纳,以便更好地展现它们之间的联系。
举个例子,我们假设要设计一个医院病人管理系统,其中包含病人信息、医生信息、科室信息和病床信息。我们可以确定以下实体、属性和关系:
实体:病人、医生、科室、病床
属性:病人ID、病人姓名、病人性别、病人年龄、医生ID、医生姓名、医生职称、科室ID、科室名称、科室电话、病床ID、床位号、房间号、病床状态
关系:病人和医生之间存在就医关系,医生和科室之间存在工作关系,病床和病人之间存在入院关系
2.2 画出ER图
在确定好实体、属性和关系之后,我们可以使用ER图来描述它们之间的联系。
下面是用ER图构建医院病人管理系统的示例:
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 病人 │ │ 医生 │ │ 科室 │
├───────────┤ ├───────────┤ ├───────────┤
│ 病人ID │ │ 医生ID │ │ 科室ID │
│ 姓名 │ │ 姓名 │ │ 名称 │
│ 性别 │ │ 职称 │ │ 电话 │
│ 年龄 │ │ │ │ │
├───────────┤ └───────────┘ └───────────┘
│ │ ▲ ▲
├───────────┤ │ │
│ ├───就医关系───┤ │
│ │ │ │
└───────────┘ ▼ ▼
├─────────工作关系──────┤
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ 病床 │ │ 病房 │
├───────────┤ ├───────────┤
│ 病床ID │ │ 病房ID │
│ 床位号 │ │ 楼层 │
│ 房间号 │ ├───────────┤
│ 状态 │ │ │
├───────────┤ └───────────┘
│ │
└───────────┘
3. 根据ER图设计SQL Server数据库模型
在设计SQL Server数据库模型之前,需要先对ER图进行分析,确定每个实体对应的表,每个属性对应表中的字段,每个关系对应的表。
3.1 实体转换为表
在上面的医院病人管理系统中,我们可以将病人、医生、科室和病床对应为四个表,分别为Patients、Doctors、Departments和Beds。
下面是各个表的字段:
Patients表:PatientID、Name、Gender、Age
Doctors表:DoctorID、Name、Title、DepartmentID
Departments表:DepartmentID、Name、Telephone
Beds表:BedID、BedNumber、RoomNumber、Status、PatientID
需要注意的是,Beds表中的PatientID是外键,可以关联到Patients表中的PatientID字段。
3.2 关系转换为表
在上面的医院病人管理系统中,我们可以将病人、医生和病床之间的关系转换为表,这些表分别为Treatments、Works和Admissions。
下面是各个表的字段:
Treatments表:PatientID、DoctorID
Works表:DoctorID、DepartmentID
Admissions表:BedID、PatientID、AdmitDate、DischargeDate
需要注意的是,Treatments表中的PatientID和DoctorID是外键,可以分别关联到Patients表中的PatientID字段和Doctors表中的DoctorID字段;Works表中的DoctorID和DepartmentID是外键,可以分别关联到Doctors表中的DoctorID字段和Departments表中的DepartmentID字段;Admissions表中的BedID和PatientID是外键,可以分别关联到Beds表中的BedID字段和Patients表中的PatientID字段。
3.3 设计SQL Server数据库模型
根据上面的分析,我们可以设计如下的SQL Server数据库模型:
CREATE TABLE Patients
(
PatientID INT PRIMARY KEY,
Name VARCHAR(50),
Gender VARCHAR(10),
Age INT
)
CREATE TABLE Doctors
(
DoctorID INT PRIMARY KEY,
Name VARCHAR(50),
Title VARCHAR(50),
DepartmentID INT REFERENCES Departments(DepartmentID)
)
CREATE TABLE Departments
(
DepartmentID INT PRIMARY KEY,
Name VARCHAR(50),
Telephone VARCHAR(20)
)
CREATE TABLE Beds
(
BedID INT PRIMARY KEY,
BedNumber INT,
RoomNumber INT,
Status VARCHAR(50),
PatientID INT REFERENCES Patients(PatientID)
)
CREATE TABLE Treatments
(
PatientID INT REFERENCES Patients(PatientID),
DoctorID INT REFERENCES Doctors(DoctorID),
PRIMARY KEY (PatientID, DoctorID)
)
CREATE TABLE Works
(
DoctorID INT REFERENCES Doctors(DoctorID),
DepartmentID INT REFERENCES Departments(DepartmentID),
PRIMARY KEY (DoctorID, DepartmentID)
)
CREATE TABLE Admissions
(
BedID INT REFERENCES Beds(BedID),
PatientID INT REFERENCES Patients(PatientID),
AdmitDate DATE,
DischargeDate DATE,
PRIMARY KEY (BedID, PatientID)
)
4. 总结
本文介绍了ER图的基本概念和构建方法,并以医院病人管理系统为例,演示了如何根据ER图设计SQL Server数据库模型。大家在进行数据库设计时,可以先用ER图进行想象、构建、分析和确认,然后再将ER图转换为SQL Server数据库模型。这样做可以使数据库模型更加合理和规范,减少后期维护的难度和成本。