(二)DDL

在DML中,我们常用的功能是增删改,分别对应的命令是CREATE、DROP和ALTER。

1. 对数据库进行定义

CREATE DATABASE nba; // 创建一个名为nba的数据库
DROP DATABASE nba; // 删除一个名为nba的数据库

2. 对数据表进行定义

CREATE TABLE [table_name]
(
	字段名 数据类型,
	......
);

针对player这张表,我们想设计以下的字段:

DROP TABLE IF EXISTS `player`;
CREATE TABLE `player`  (
  `player_id` int(11) NOT NULL AUTO_INCREMENT,
  `team_id` int(11) NOT NULL,
  `player_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `height` float(3, 2) NULL DEFAULT 0.00,
  PRIMARY KEY (`player_id`) USING BTREE,
  UNIQUE INDEX `player_name`(`player_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

其中:

  • player_name字段的字符编码是utf8,排序规则utf8_general_ci,代表对大小写不敏感,如果设置为utf8_bin,代表对大小写敏感。

  • player_id设置为了主键约束。同时索引方法采用BTREE。不能重复,不能为空,即UNIQUE+NOT NULL。一个数据表的主键只能有一个。主键可以是一个字段,也可以由多个字段复合组成。

  • player_name设置唯一性约束。就表明任何两个球员的姓名不能相同。需要注意的是,唯一性约束和普通索引(NORMAL INDEX)之间是有区别的。唯一性约束相当于创建了一个约束和普通索引,目的是保证字段的正确性,而普通索引只是提升数据检索的速度,并不对字段的唯一性进行约束。

  • NOT NULL约束。对字段定义了NOT NULL,即表明该字段不应为空,必须有取值。

  • 外键约束。确保了表与表之间引用的完整性。一个表中的外键对应另一张表的主键。

  • DEFAULT,表明了字段的默认值。如果在插入数据的时候,这个字段没有取值,就设置为默认值。比如我们将身高height字段的取值默认设置为0.00,即DEFAULT 0.00

  • CHECK约束。用来检查特定字段取值范围的有效性,CHECK约束的结果不能为FALSE,比如我们可以对身高height的数值进行CHECK约束,必须≥0,且<3,即CHECK(height>=0 AND height<3)

3. 设计数据表的原则

  1. 数据表的个数越少越好。数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。
  2. 数据表中的字段个数越少越好。字段个数越多,数据冗余的可能性越大。
  3. 数据表中联合主键的字段个数越少越好。设置主键是为了确定唯一性,当一个字段无法确定唯一性的时候,就需要采用联合主键的方式(也就是用多个字段来定义一个主键)。联合主键中的字段越多,占用的索引空间越大,不仅会加大理解难度,还会增加运行时间和索引空间
  4. 使用主键和外键越多越好。关系越多,证明这些实体之间的冗余度越低,利用度越高。

“三少一多”原则的核心就是简单可复用。简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。可复用则是通过主键、外键的使用来增强数据表之间的复用率。

posted @ 2022-08-24 17:05  言思宁  阅读(21)  评论(0编辑  收藏  举报