一、项目简介及实体模型
项目简介
健康诊所预约系统旨在为患者提供方便快捷的预约服务,同时帮助诊所管理医生的日程安排。系统功能包括但不限于患者注册、预约创建、医生日程管理等。
实体模型
- 患者(Patients): 包括患者ID、姓名、年龄、性别、联系电话、电子邮箱等。
- 医生(Doctors): 包括医生ID、姓名、专业、联系电话、电子邮箱、工作时间等。
- 预约(Appointments): 包括预约ID、患者ID、医生ID、预约时间、预约状态等。
二、ER-模型
创建ER图,展示患者、医生和预约之间的关系。患者和医生通过预约形成多对多的关系,即每位患者可以预约多位医生,每位医生也可以被多名患者预约。
三、将ER-模型转换为关系模型,并进行规范化
关系模型
- Patients: PatientID (PK), Name, Age, Gender, PhoneNumber, Email
- Doctors: DoctorID (PK), Name, Specialty, PhoneNumber, Email, WorkingHours
- Appointments: AppointmentID (PK), PatientID (FK), DoctorID (FK), AppointmentTime, Status
规范化
确保所有表都达到第三范式(3NF):
- 消除重复组。
- 确保每张表只描述一个概念。
- 确保每列都是原子的,不能进一步分解。
四、基于MYSQL进行物理设计
数据库创建
CREATE DATABASE HealthClinic; USE HealthClinic;
表创建
CREATE TABLE Patients ( PatientID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(255) NOT NULL, Age INT, Gender ENUM('Male', 'Female', 'Other'), PhoneNumber VARCHAR(15), Email VARCHAR(255) ); CREATE TABLE Doctors ( DoctorID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(255) NOT NULL, Specialty VARCHAR(255), PhoneNumber VARCHAR(15), Email VARCHAR(255), WorkingHours TIME ); CREATE TABLE Appointments ( AppointmentID INT AUTO_INCREMENT PRIMARY KEY, PatientID INT, DoctorID INT, AppointmentTime DATETIME, Status ENUM('Scheduled', 'Confirmed', 'Cancelled', 'Completed'), FOREIGN KEY (PatientID) REFERENCES Patients(PatientID), FOREIGN KEY (DoctorID) REFERENCES Doctors(DoctorID) );
五、主要实现代码
插入数据
INSERT INTO Patients (Name, Age, Gender, PhoneNumber, Email) VALUES ('John Doe', 30, 'Male', '+1234567890', 'john.doe@example.com'); INSERT INTO Doctors (Name, Specialty, PhoneNumber, Email, WorkingHours) VALUES ('Jane Smith', 'General Practice', '+0987654321', 'jane.smith@example.com', '09:00:00');
更新数据
UPDATE Patients SET Age = 31 WHERE PatientID = 1;
删除数据
DELETE FROM Patients WHERE PatientID = 1;