commit fb6ddca1284d036d2850db849180366f6f42ee35 Author: kejingfan Date: Fri Mar 29 16:52:46 2024 +0800 lab1 diff --git a/Assignments/Assignment1/source/.$ER图.drawio.bkp b/Assignments/Assignment1/source/.$ER图.drawio.bkp new file mode 100644 index 0000000..704660c --- /dev/null +++ b/Assignments/Assignment1/source/.$ER图.drawio.bkp @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/.$语义网络1.drawio.bkp b/Assignments/Assignment1/source/.$语义网络1.drawio.bkp new file mode 100644 index 0000000..d84744e --- /dev/null +++ b/Assignments/Assignment1/source/.$语义网络1.drawio.bkp @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/.$语义网络2.drawio.bkp b/Assignments/Assignment1/source/.$语义网络2.drawio.bkp new file mode 100644 index 0000000..205f59e --- /dev/null +++ b/Assignments/Assignment1/source/.$语义网络2.drawio.bkp @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/ER图.drawio b/Assignments/Assignment1/source/ER图.drawio new file mode 100644 index 0000000..30c09ac --- /dev/null +++ b/Assignments/Assignment1/source/ER图.drawio @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/ER图.drawio.svg b/Assignments/Assignment1/source/ER图.drawio.svg new file mode 100644 index 0000000..66c9292 --- /dev/null +++ b/Assignments/Assignment1/source/ER图.drawio.svg @@ -0,0 +1,4 @@ + + + +
车站
N
用户
N
经过
M
车次
车票
始发时间
ID
到达时间
座位类别
车次号
M
乘客
姓名
身份证号
N
乘坐
车票
车次号
手机号
车次号
座位编号
车票ID
始发站
到达站
价格
M
购票
时间
交易单号
支付
省名
车站名
城市名
到站时间
\ No newline at end of file diff --git a/Assignments/Assignment1/source/作业1_21281280_柯劲帆.md b/Assignments/Assignment1/source/作业1_21281280_柯劲帆.md new file mode 100644 index 0000000..3c1e013 --- /dev/null +++ b/Assignments/Assignment1/source/作业1_21281280_柯劲帆.md @@ -0,0 +1,393 @@ +

课程作业

+ +
+
课程名称:数据库系统原理
+
作业次数:作业#1
+
学号:21281280
+
姓名:柯劲帆
+
班级:物联网2101班
+
指导老师:郝爽
+
修改日期:2024年3月13日
+
+ + + + +--- + +## 1. 题目1 + +> **语义网络是用于描述概念间关系的一种工具,请准确掌握如下两组基本概念,并用VISIO画出能准确表达这些概念之间关系的语义网络。** +> 1. **数据、数据库、数据模型、数据库管理系统、软件、模型、数据库系统** +> 2. **实体、实体集、属性、实体标识符、实体型、域、联系** + +**第一组概念:** + +1. **数据(Data)**:信息的最基本单元,可以是数字、文字或者任何其他形式的记录。 +2. **数据库(Database)**:系统地组织、存储和管理数据的集合,以便可以高效地访问和更新。 +3. **数据模型(Data Model)**:描述数据、数据关系、数据语义和数据约束的抽象模型,用于设计数据库的结构。 +4. **数据库管理系统(Database Management System, DBMS)**:软件系统,用于创建、维护和操作数据库,提供数据的存储、查询和更新功能。 +5. **软件(Software)**:计算机程序和相关的文档和数据的集合。 +6. **模型(Model)**:现实世界事物的抽象和表示,可以是数据模型、数学模型等。 +7. **数据库系统(Database System)**:包括数据库、数据库管理系统(DBMS)、应用程序和数据库管理员的总称,整体用于数据的管理和访问。 + +**关系描述**: + +- 数据模型用于设计数据库,因此数据模型和数据库之间存在设计关系。 +- 数据库被数据库管理系统管理,表明数据库和DBMS之间有管理关系。 +- 数据库管理系统是一种软件,因此DBMS是软件的一个子类。 +- 数据库系统是一个更广泛的概念,包括数据库、DBMS、应用程序等,显示它们之间的包含关系。 +- 模型是一个广泛的概念,数据模型是模型的一种,特指用于数据库设计的模型。 + +语义网络1 + +**第二组概念:** + +1. **实体(Entity)**:现实世界中可以独立存在并可以区分的事物。 +2. **实体集(Entity Set)**:具有相同属性的实体的集合。 +3. **属性(Attribute)**:实体所具有的特征,如姓名、地址等。 +4. **实体标识符(Entity Identifier)**:唯一标识实体集中每个实体的属性或属性组合。 +5. **实体型(Entity Type)**:描述实体集的结构,即实体具有哪些属性。 +6. **域(Domain)**:属性可以取值的集合。 +7. **联系(Relationship)**:实体之间的关系,可以是一对一、一对多或多对多等。 + +**关系描述**: + +- 实体集由相同类型的实体构成,因此实体和实体集之间存在归属关系。 +- 实体具有属性,表示实体和属性之间有拥有关系。 +- 实体标识符是特定于实体集的,用于唯一标识其中的实体,显示实体标识符和实体集之间的关联关系。 +- 实体型定义了实体集的结构,即包含哪些属性,因此实体型和实体集之间有定义关系。 +- 域是属性可能取值的范围,因此属性和域之间存在限制关系。 +- 联系描述了实体之间的关系,因此实体间存在联系关系,这可以通过实体型来描述。 + +语义网络2 + + + +## 2. 题目2 + +> **请从如下现实业务背景中任选一个,用VISIO画出ER图表达的简化的概念模型(10个实体集以内,不必穷尽)。** +> +> - **12306网站余票查询业务模型** +> - **航空公司航班查询业务模型** +> - **支付宝或微信支付业务模型** +> - **银行账户与转账业务模型** +> - **微信朋友圈业务模型** +> - **微信用户及聊天群聊天业务模型** +> - **短视频平台业务模型** +> - **知乎等论坛业务模型** +> - **互联网点餐业务模型** +> - **快餐店点餐业务模型(门店或网络点餐)** +> +> **注:因本学期所有的实验以及课程设计均围绕上述业务背景之一开展,建议尽早选定一个业务模型,尽早理解与分析业务,圈定你将实现的系统的功能范围(不建议范围过大)。** + +ER图 + +## 3. 题目3 + +> **关系模型设计时经常会涉及完整性约束,数据模型中的完整性约束来源于业务背景中完整性约束要求。请观察并分析第2题中你选定的业务场景,举出至少3个以上的完整性约束例子。** + +1. **实体完整性约束**:确保每个表的主键是唯一的,不允许有重复值,也不允许有空值。 + - 例如,在乘客表中,身份证号可以作为主键,因为每个乘客的身份证号是唯一的。 + - 列车表中,列车号可以作为主键,因为每个列车号是唯一标识一列列车的。 +2. **参照完整性约束**:确保表之间的外键关系有效,即外键字段的值必须在关联表的主键字段中存在或者是空值。 + - 在列车车票表中,列车号需要与列车表中的列车号相对应,这保证了列车车票的列车号在列车表中有一个有效的引用。 + - 同样,列车车票表中的车站名需要与车站表中的车站名相对应,确保了车站名的有效性。 +3. **域完整性约束**:指定属性值的类型、格式、范围或其他属性,确保数据符合特定条件。 + - 例如,手机号在乘客表中应该遵循特定的格式,并且只能包含数字。 + - 性别字段可能只允许特定的值,如"男"、"女"。 + - 价格字段在列车车票表中应该是非负的。 +4. **唯一性约束**:确保某一列或几列组合的值在整个表中是唯一的,避免重复记录。 + - 身份证号在乘客表中不仅是主键,也需要是唯一的,以确保每个记录代表不同的乘客。 +5. **用户定义的完整性约束**:确保列中的数据满足特定条件。 + - 例如,始发时间必须早于到达时间,在列车表和列车车票表中都应该遵守这一规则。 + + + +## 4. 题目4 + +> **请自己寻找安装包,寻找安装和卸载向导,自学建库、卸载及建表方法,完成如下任务:** +> +> 1. **在自己的电脑上安装好某一版本的MySQL、SQL Server或Oracle,卸载数据库,反复若干次,确保熟练掌握这个过程。** +> +> 2. **建立一个数据库,随意建立一些数据表,比如通讯录,往表中手动增加一些信息。** +> +> **通过适当的截图界面,证明你已经熟练掌握以上技术。** + +- 操作系统:Ubuntu 22.04 LTS (6.5.0-25-generic) + +### 4.1. 安装MySQL + +使用apt安装MySQL: + +```sh +$ sudo apt update +$ sudo apt install mysql-server +``` + +这时MySQL服务默认已被安装进程开启。开启MySQL服务的命令为: + +```sh +$ sudo systemctl start mysql.service +``` + +进入MySQL修改登录密码(可省略): + +```sh +$ sudo mysql +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 23 +Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu) + +Copyright (c) 2000, 2024, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. +``` + +```mysql +mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; +Query OK, 0 rows affected (0.01 sec) + +mysql> exit +Bye +``` + +使用`mysql_secure_installation`进行配置 + +```sh +$ sudo mysql_secure_installation +``` + +配置过程略。 + +卸载MySQL: + +```sh +$ sudo apt-get remove mysql-common +$ sudo apt-get autoremove --purge mysql-server-8.0 +``` + +查看残留包,逐个卸载。 + +```sh +$ dpkg --list | grep mysql +``` + +清除残留数据: + +```sh +$ dpkg -l | grep ^rc | awk '{print $2}' | sudo xargs dpkg -P +``` + +### 4.2. 操作数据库 + +登录MySQL: + +```sh +$ sudo mysql -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 24 +Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu) + +Copyright (c) 2000, 2024, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> +``` + +查看已有数据库: + +```mysql +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| sys | ++--------------------+ +4 rows in set (0.00 sec) +``` + +创建新数据库: + +```mysql +mysql> CREATE DATABASE MyDB; +Query OK, 1 row affected (0.02 sec) +``` + +修改数据库字符集,以便支持中文: + +```mysql +mysql> ALTER DATABASE MyDB CHARACTER SET utf8; +Query OK, 1 row affected, 1 warning (0.04 sec) +``` + +查看及切换数据库: + +```mysql +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| MyDB | +| information_schema | +| mysql | +| performance_schema | +| sys | ++--------------------+ +5 rows in set (0.00 sec) + +mysql> USE MyDB; +Database changed +mysql> SHOW TABLES; +Empty set (0.00 sec) +``` + +创建表: + +```mysql +mysql> CREATE TABLE BOOK ( + -> ISBN CHAR(30) PRIMARY KEY, + -> NAME VARCHAR(30) NOT NULL, + -> AUTHOR VARCHAR(30), + -> PUBLISHER VARCHAR(30), + -> PRICE FLOAT(2) + -> ); +Query OK, 0 rows affected (0.06 sec) + +mysql> SHOW TABLES; ++----------------+ +| Tables_in_MyDB | ++----------------+ +| BOOK | ++----------------+ +1 row in set (0.00 sec) + +mysql> DESC BOOK; ++-----------+-------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------+-------------+------+-----+---------+-------+ +| ISBN | char(30) | NO | PRI | NULL | | +| NAME | varchar(30) | NO | | NULL | | +| AUTHOR | varchar(30) | YES | | NULL | | +| PUBLISHER | varchar(30) | YES | | NULL | | +| PRICE | float | YES | | NULL | | ++-----------+-------------+------+-----+---------+-------+ +5 rows in set (0.00 sec) +``` + +添加一列: + +```sh +mysql> ALTER TABLE BOOK + -> ADD COLUMN PUBLISH_YEAR YEAR; +Query OK, 0 rows affected (0.04 sec) +Records: 0 Duplicates: 0 Warnings: 0 + +mysql> DESC BOOK; ++--------------+-------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------+-------------+------+-----+---------+-------+ +| ISBN | char(30) | NO | PRI | NULL | | +| NAME | varchar(30) | NO | | NULL | | +| AUTHOR | varchar(30) | YES | | NULL | | +| PUBLISHER | varchar(30) | YES | | NULL | | +| PRICE | float | YES | | NULL | | +| PUBLISH_YEAR | year | YES | | NULL | | ++--------------+-------------+------+-----+---------+-------+ +6 rows in set (0.00 sec) + +mysql> SELECT * FROM BOOK; +Empty set (0.00 sec) +``` + +添加完整性约束: + +```mysql +mysql> ALTER TABLE BOOK + -> ADD CONSTRAINT price_positive CHECK (PRICE > 0); +Query OK, 0 rows affected (0.10 sec) +Records: 0 Duplicates: 0 Warnings: 0 +``` + +添加记录: + +```mysql +mysql> INSERT INTO BOOK (ISBN, NAME, AUTHOR, PUBLISHER, PRICE, PUBLISH_YEAR) + -> VALUES ('978-7-302-42328-7', '机器学习', '周志华', '清华大学出版社', 108.00, '2016'), + -> ('978-7-111-68181-6', '数据库系统概念', 'Silberschatz et al.', '机械工业出版社', 149.00, '2021'); +Query OK, 2 rows affected (0.26 sec) +Records: 2 Duplicates: 0 Warnings: 0 +``` + +查看表内容: + +![查看表](查看表.png) + +继续添加记录: + +```mysql +mysql> INSERT INTO BOOK (ISBN, NAME, PUBLISHER, PRICE, PUBLISH_YEAR) + -> VALUES ('978-7-111-59971-5', '计算机网络:自顶向下方法', '机械工业出版社', 89.00, '2018'), + -> ('978-7-121-43307-8', '数字图像处理学', '电子工业出版社', 199.80, '2022'); +Query OK, 2 rows affected (0.01 sec) +Records: 2 Duplicates: 0 Warnings: 0 +``` + +查看表内容: + +![查看表2](查看表2.png) + +其中`AUTHOR`属性默认为`NULL`。 + +删除记录: + +```mysql +mysql> DELETE FROM BOOK + -> WHERE PUBLISHER = '机械工业出版社'; +Query OK, 2 rows affected (0.45 sec) +``` + +查看表内容: + +![查看表3](查看表3.png) + +可见成功删除了两条`PUBLISHER = '机械工业出版社'`的记录。 + +删除表: + +```mysql +mysql> DROP TABLE BOOK; +Query OK, 0 rows affected (0.37 sec) + +mysql> SHOW TABLES; +Empty set (0.00 sec) +``` + +删库~~跑路~~: + +```mysql +mysql> DROP DATABASE MyDB; +Query OK, 0 rows affected (0.03 sec) + +mysql> SELECT DATABASE(); ++------------+ +| DATABASE() | ++------------+ +| NULL | ++------------+ +1 row in set (0.00 sec) +``` + diff --git a/Assignments/Assignment1/source/作业1_21281280_柯劲帆.pdf b/Assignments/Assignment1/source/作业1_21281280_柯劲帆.pdf new file mode 100644 index 0000000..18c4f4a Binary files /dev/null and b/Assignments/Assignment1/source/作业1_21281280_柯劲帆.pdf differ diff --git a/Assignments/Assignment1/source/查看表.png b/Assignments/Assignment1/source/查看表.png new file mode 100644 index 0000000..cbfea35 Binary files /dev/null and b/Assignments/Assignment1/source/查看表.png differ diff --git a/Assignments/Assignment1/source/查看表2.png b/Assignments/Assignment1/source/查看表2.png new file mode 100644 index 0000000..4c429e1 Binary files /dev/null and b/Assignments/Assignment1/source/查看表2.png differ diff --git a/Assignments/Assignment1/source/查看表3.png b/Assignments/Assignment1/source/查看表3.png new file mode 100644 index 0000000..bbe9a84 Binary files /dev/null and b/Assignments/Assignment1/source/查看表3.png differ diff --git a/Assignments/Assignment1/source/语义网络1.drawio b/Assignments/Assignment1/source/语义网络1.drawio new file mode 100644 index 0000000..6ac2143 --- /dev/null +++ b/Assignments/Assignment1/source/语义网络1.drawio @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/语义网络1.drawio.svg b/Assignments/Assignment1/source/语义网络1.drawio.svg new file mode 100644 index 0000000..17db980 --- /dev/null +++ b/Assignments/Assignment1/source/语义网络1.drawio.svg @@ -0,0 +1,4 @@ + + + +
数据库软件
数据库
数据
数据
管理
管理
数据库管理系统
应用系统
设计数据库的结构
数据模型
模型
用户
交互
\ No newline at end of file diff --git a/Assignments/Assignment1/source/语义网络2.drawio b/Assignments/Assignment1/source/语义网络2.drawio new file mode 100644 index 0000000..7ff3cf9 --- /dev/null +++ b/Assignments/Assignment1/source/语义网络2.drawio @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignments/Assignment1/source/语义网络2.drawio.svg b/Assignments/Assignment1/source/语义网络2.drawio.svg new file mode 100644 index 0000000..e82e8c9 --- /dev/null +++ b/Assignments/Assignment1/source/语义网络2.drawio.svg @@ -0,0 +1,4 @@ + + + +


































































(各属性取值的集合)












属性
实体标识符
实体型
实体集
别的实体集
联系
M
N
\ No newline at end of file diff --git a/Assignments/Assignment1/作业1_21281280_柯劲帆.pdf b/Assignments/Assignment1/作业1_21281280_柯劲帆.pdf new file mode 100644 index 0000000..18c4f4a Binary files /dev/null and b/Assignments/Assignment1/作业1_21281280_柯劲帆.pdf differ