根据您的要求,以下是一个简化的MySQL数据库设计,包括一些基础的表结构定义。这个设计并没有包含所有可能的细节,而是提供了一个起点。每个用户类型(系统管理员、实验室管理员、学生)通常会有相同的用户信息表,但会通过权限字段来区分。 ### 用户信息表 (users) ```sql CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, -- 应使用安全的密码哈希 email VARCHAR(100), phone VARCHAR(20), role ENUM('system_admin', 'lab_admin', 'student') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 实验室信息表 (labs) ```sql CREATE TABLE labs ( lab_id INT AUTO_INCREMENT PRIMARY KEY, lab_name VARCHAR(100) NOT NULL UNIQUE, location VARCHAR(255), description TEXT, capacity INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 器材信息表 (equipment) ```sql CREATE TABLE equipment ( equipment_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, description TEXT, quantity INT NOT NULL, lab_id INT, FOREIGN KEY (lab_id) REFERENCES labs(lab_id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 实验室预约表 (lab_reservations) ```sql CREATE TABLE lab_reservations ( reservation_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, lab_id INT, start_time DATETIME NOT NULL, end_time DATETIME NOT NULL, status ENUM('pending', 'approved', 'rejected', 'completed') NOT NULL DEFAULT 'pending', FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, FOREIGN KEY (lab_id) REFERENCES labs(lab_id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 器材借用表 (equipment_borrowings) ```sql CREATE TABLE equipment_borrowings ( borrowing_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, equipment_id INT, borrow_date DATE NOT NULL, return_date DATE, status ENUM('borrowed', 'returned', 'lost') NOT NULL DEFAULT 'borrowed', FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, FOREIGN KEY (equipment_id) REFERENCES equipment(equipment_id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 公共事务表 (public_announcements) ```sql CREATE TABLE public_announcements ( announcement_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, posted_by INT, posted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (posted_by) REFERENCES users(user_id) ON DELETE SET NULL ); ``` 这只是一个基本的架构,实际应用中可能需要更多的字段、表和复杂的逻辑。例如,用户权限可能通过权限表来管理,而不是简单地使用枚举类型。同样,可能还需要日志表来记录活动、通知机制、以及更复杂的预约和借用策略。 在实际部署时,请注意安全性,比如使用安全的密码哈希和验证机制,以及合适的数据库权限设置,以限制对每个表的访问。此外,为了支持多样化的查询功能,你可能需要在SQL查询中使用JOIN、WHERE子句和聚合函数等高级功能。 此外,这个设计没有包括应用逻辑,这部分通常在应用程序层面实现,利用上述数据库结构存储和检索信息。