基于OpenGauss的图书管理图书表的属性:书号、书名、出版日期、出版社、书架号、房间号。 读者表的属性:借书证号、姓名、年龄、性别、家庭住址。 书架表的属性:书架号、房间号。 借阅表的属性:借书证号、书号、借阅日期、归还日期。系统设计,图书管理ER图
时间: 2025-02-08 10:15:25 浏览: 76
### 设计基于 OpenGauss 的图书管理系统的 ER 图
#### 1. 实体关系概述
实体之间的关系是构建数据库结构的基础。对于一个图书管理系统而言,主要涉及四个核心实体:**图书表**、**读者表**、**书架表** 和 **借阅表**。
#### 2. 数据库表定义
##### 2.1 图书表 (Book)
| 字段名称 | 类型 | 描述 |
|--|--------------|
| book_id | INT | 主键,唯一标识每本书籍 |
| title | VARCHAR(50)| 书籍标题 |
| pub_date | DATE | 出版日期 |
| publisher| VARCHAR(50)| 出版社 |
| shelf_no | INT | 书架编号 |
| room_no | INT | 房间编号 |
```sql
CREATE TABLE Book (
book_id SERIAL PRIMARY KEY,
title VARCHAR(50),
pub_date DATE,
publisher VARCHAR(50),
shelf_no INT REFERENCES Shelf(shelf_no),
room_no INT REFERENCES Room(room_no)
);
```
##### 2.2 读者表 (Reader)
| 字段名称 | 类型 | 描述 |
|---------------|----------------|------------------|
| reader_id | INT | 主键,唯一标识每位读者 |
| name | VARCHAR(30) | 读者姓名 |
| age | SMALLINT | 年龄 |
| gender | CHAR(1) | 性别 ('M'/'F') |
| address | TEXT | 家庭地址 |
```sql
CREATE TABLE Reader (
reader_id SERIAL PRIMARY KEY,
name VARCHAR(30),
age SMALLINT CHECK(age >= 0 AND age <= 120),
gender CHAR(1) CHECK(gender IN('M', 'F')),
address TEXT
);
```
##### 2.3 书架表 (Shelf)
| 字段名称 | 类型 | 描述 |
|--|------------|--------------|
| shelf_no | INT | 主键,唯一标识每个书架 |
| room_no | INT | 所属房间编号 |
```sql
CREATE TABLE Shelf (
shelf_no SERIAL PRIMARY KEY,
room_no INT UNIQUE NOT NULL
);
```
##### 2.4 借阅表 (Borrowing_Record)
| 字段名称 | 类型 | 描述 |
|----------|------------|----------------------|
| borrow_id| INT | 主键,唯一标识每次借阅记录 |
| reader_id| INT | 外键关联到`reader_id`字段 |
| book_id | INT | 外键关联到`book_id`字段 |
| borrow_dt| TIMESTAMP | 记录借阅时间戳 |
| return_dt| TIMESTAMP | 预期归还时间戳 |
```sql
CREATE TABLE Borrowing_Record (
borrow_id SERIAL PRIMARY KEY,
reader_id INT REFERENCES Reader(reader_id),
book_id INT REFERENCES Book(book_id),
borrow_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
return_dt TIMESTAMP
);
```
#### 3. 关系描述
- **图书表(Book)** 与 **书架表(Shelf)** 存在外键约束 `shelf_no` 和 `room_no`,表示一本书位于特定的书架上。
- **读者表(Reader)** 与 **借阅表(Borrowing_Record)** 构成一对多的关系,即一位读者可以有多次借阅行为;而一次具体的借阅则对应唯一的读者和一本具体书籍。
上述设计确保了数据的一致性和完整性,并支持高效的查询操作[^1]。
阅读全文
相关推荐

















