以下是两个数据库设计的案例,自行下载查看。 https://maifile.cn/est/d3036854338169/pdf https://maifile.cn/est/d2426854340395/pdf 任选一个,根据案例中第四章的数据库设计内容(注:案例中的设计存在问题),完善数据库设计任务,要求画 E-R 图,E-R 图转关系数据模式,把建库建表的 DDL 语句写出来,需要做物理设计,设计出属性的数据类型,创建索引,选择存储引擎。
时间: 2023-08-18 18:07:15 浏览: 155
很抱歉,我无法下载文件或进行文件操作。但是,我可以提供一些关于数据库设计的指导。
针对这个任务,我们可以按照以下步骤进行:
1. 阅读案例,理解需求和业务模型。
2. 画出 E-R 图,确定实体、属性、关系等。
3. 将 E-R 图转换为关系数据模式,确定表的结构和关系。
4. 设计出属性的数据类型,根据查询需求创建索引。
5. 选择适当的存储引擎,创建库和表,并编写建表的 DDL 语句。
以下是一个简单的示例,供参考:
1. 业务模型:一个图书馆管理系统,包含读者、图书、借阅记录等实体。
2. E-R 图如下:
![image](https://user-images.githubusercontent.com/38161433/134750346-fb85f5b7-9c0e-4a1d-9b7d-081e7d70fa35.png)
3. 转换为关系数据模式:
- 读者表(reader):读者编号(reader_id,主键)、姓名(name)、性别(gender)、出生日期(birth_date)、电话(phone)、注册日期(register_date)等属性。
- 图书表(book):图书编号(book_id,主键)、书名(title)、作者(author)、出版社(publisher)、出版日期(publish_date)、价格(price)等属性。
- 借阅记录表(borrow):借阅编号(borrow_id,主键)、读者编号(reader_id,外键)、图书编号(book_id,外键)、借阅日期(borrow_date)、归还日期(return_date)等属性。
4. 设计属性的数据类型,创建索引:
- 读者表:
```
CREATE TABLE reader (
reader_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender CHAR(1),
birth_date DATE,
phone VARCHAR(20),
register_date DATE,
INDEX idx_reader_name (name),
INDEX idx_reader_register (register_date)
);
```
- 图书表:
```
CREATE TABLE book (
book_id INT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50),
publisher VARCHAR(50),
publish_date DATE,
price DECIMAL(10,2),
INDEX idx_book_title (title),
INDEX idx_book_author (author)
);
```
- 借阅记录表:
```
CREATE TABLE borrow (
borrow_id INT PRIMARY KEY,
reader_id INT,
book_id INT,
borrow_date DATE,
return_date DATE,
FOREIGN KEY (reader_id) REFERENCES reader(reader_id),
FOREIGN KEY (book_id) REFERENCES book(book_id),
INDEX idx_borrow_reader (reader_id),
INDEX idx_borrow_book (book_id),
INDEX idx_borrow_date (borrow_date)
);
```
5. 选择存储引擎,创建库和表,并编写建表的 DDL 语句:
```
CREATE DATABASE library;
USE library;
CREATE TABLE reader (
reader_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender CHAR(1),
birth_date DATE,
phone VARCHAR(20),
register_date DATE,
INDEX idx_reader_name (name),
INDEX idx_reader_register (register_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE book (
book_id INT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50),
publisher VARCHAR(50),
publish_date DATE,
price DECIMAL(10,2),
INDEX idx_book_title (title),
INDEX idx_book_author (author)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE borrow (
borrow_id INT PRIMARY KEY,
reader_id INT,
book_id INT,
borrow_date DATE,
return_date DATE,
FOREIGN KEY (reader_id) REFERENCES reader(reader_id),
FOREIGN KEY (book_id) REFERENCES book(book_id),
INDEX idx_borrow_reader (reader_id),
INDEX idx_borrow_book (book_id),
INDEX idx_borrow_date (borrow_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
这只是一个简单的示例,实际的设计需要考虑更多的因素,如数据量、查询需求、性能等。