第2章 数据库设计
数据库设计
- 1 关系数据库设计理论三大范式
- 2 连接数据库和基本信息
- 2.1 连接数据库
- 2.2 基本信息查询
- 3 创建数据库和表
- 3.1 创建数据库
- 3.2 创建表
1 关系数据库设计理论三大范式
关系模型(Relational Mode)是一种基于表的数据模型,广泛应用于数据库管理系统(DBMS)中。
关系模型的核心思想,将数据组织成表,每个表包含一组相关的行和列。
行和列之间的关系通过主键和外键来定义,从而实现数据的王整形、一致性和可维护维护性。
- 属性(Attribute):列的名称。
- 关系(Relation):列属性之间存在的某种关联。
- 表(Table):由多个属性以及众多元祖所表示的各个实例组成。
- 键(Key):由一个或多个属性组成,其值能唯一标识关系中的一个元组。如果某个关系A中的一个(组)属性是另一个关系B的键,则该(组)属性在A中被称为外键。
- 笛卡尔积(交叉连接,Cross Join):第一个关系的每一行数据分别与第二个关系的每一行数据组合。
- 自然连接(Natural Join):第一个关系的每一行数据与第二个关系的每一行数据进行匹配,若得到交叉部分则合并,若无交叉部分则舍弃。
- θ连接(Theta Join):加上约束条件的笛卡尔积,先得到笛卡尔积,在根据约束条件删除不满足条件的元祖。
- 外连接(Outer Join):执行自然连接后,将舍弃的部分也加入,并且把匹配失败处的属性设置为null。
范式:
- 第一范式(1NF):目标是确保每列的原子性,如果每列都是不可再分的最小数据单元(也被称为最小的原子单元),则满足第一范式。
- 第二范式(2Nf):要求每张表只描述一件事件。
- 第三范式(3NF):如果一个关系满足第二范式,并且除了主键以外的其他列都不依赖于主键列,则满足第三范式。
2 连接数据库和基本信息
2.1 连接数据库
mysql -h localhost -u root -p
2.2 基本信息查询
# 查询服务器版本和当前信息
select version(),current_date;#把MySQL作用计算器
select sin(pi() /5),(9+1) *5;#用分号分隔多条SQL语句
select version(); select now();#MySQL可以写成多个的形式,最后带上终止分号
select
user()
,
current_date;#取消查询,当输入 "\c" 之后,当前输入的命令就取消了
select
users
\c
- 查询通常由分好结尾的SQL语句组成。
- 输入查询语句后,MySQL将它发送到服务器执行并显示结果,然后显示下个 "mysql>"提示符,表名已准备好接收另一个查询。
- MySQL以表格形式(行和列)显示查询的结果。第一行是标签(或列名),其他行为查询结果。
- SQL关键不区分字母大小写。
MySQL所处状态含义:
提示 | 意义和说明 |
---|---|
msyql> | 准备就绪,等待接收新的查询 |
-> | 等待多行查询的下一行 |
'> | 等待下一行,等待以单引号(')开头的字符串完成 |
"> | 等待下一行,等待以单引号(")开头的字符串完成 |
`> | 等待下一行,等待以单引号(`)开头的字符串完成 |
/*> | 等待下一行,等待以单引号(/*)开头的字符串完成 |
#当以单行输入查询语句是时,如果忘记分好结尾,那么MySQL会一直等待我们输入";"
mysql> select user()->
#'> 和 ">提示符表示当前正处于字符串的收集过程中。
mysql> select * from mytable where name = 'clay and'>
3 创建数据库和表
# 1.使用 show语句查询当前服务器上存在的数据库;
show dtabases;#2. 如果msyql数据库存在,那么我们可以进入MySQL数据库查询当前数据库的表。
use mysql;##查询当前数据库中的表
show tables;
3.1 创建数据库
#创建数据库
create database DEMO;
- 在UNIX操作系统中,数据库名称是区分字符大小写的。
3.2 创建表
#创建数据表
create Table table_name(column_name column_type);
- 表名:代码数据表的名称,如果我们想要存储用户信息,则可以取名为 userinfo。
- 表字段名:表示表中有哪些属性。
create table if not exists `userinfo`(`id` int unsigned auto_increment,`name` varchar(100) not null,`age` int not null,`date` date,primary key(`id`)
) engine=innodb default charset=utf8;
- 设置字段值不为null,字段属性设置为 not null。
- auto_increment:列定义为自增的属性,一般用于主键,数值自动加1.
- primary key:用于把列定义为主键,可以使用多列来定义主键,列之间以逗号分隔。
- engine:设置存储引擎。
- charset:设置字符集的编码。
- varchar(100) 与 int:代表字段使用的数据类型。
#查看表结构
describe userinfo;