层次模型:像一棵树
网状模型:像城市地铁链路
关系模型:像一张excel表格
SQL:结构化查询语言,用来访问和操作数据库系统。
SQL语言关键字不区分大小写,但是针对不同的数据库,对于表名和列名,有的数据库区分大小写,有的数据库不区分大小写;同一个数据库在不同的操作系统上也有不同区分大小写的规则。
习惯:SQL关键字总是大写,以示突出,表名和列名均使用小写。
关系模型本质上就是若干个存储数据的二维表,可以把他们看作喝多Excel表。
NULL表示字段数据不存在,一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串‘’。
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
在关系数据库中,关系是通过主键和外键来维护的。
对主键的要求:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。
选取主键的一个基本原则是,不使用任何业务相关的字段作为主键
因此,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键
作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id。常见的可作为id字段的类型有:
1.自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键;
2.全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。
对于大部分应用来说,通常自增类型的主键就能满足需求。
如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。
联合主键:关系数据库实际上还允许通过多个字段唯一标识记录,及两个或更多的字段都设置为主键,这种主键被称为联合主键。
对于联合主键,允许一列有重复,只要不是所有主键列都重复即可。
id_num | id_type | other columns... |
---|---|---|
1 | A | ... |
2 | A | ... |
2 | B | ... |
没有必要的情况下,我们尽量不使用联合主键,因为它给关系表带来了复杂度的上升。
通过某个字段,可以把数据与另一张表关联起来,这种列被称为外键。
外键是通过定义外键约束实现的: