课程作业

课程名称:数据库系统原理
作业次数:作业#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) ```