mysql学习(1):关系模型基本概念

前言:

MySQL关系型数据库是建立在关系模型上的,而关系模型本质上就是若干个存储数据的二维表。
表的每一行称为记录(Record),记录的是一个逻辑意义上的数据。
表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
字段定义了数据类型(整形、浮点型、字符串、日期等),以及是够能够为NULL。这里的NULL表示字段数据并不存在,并不是指数字0或者空字符串""。

正文:

1、表和表之间的关系

关系型数据库的表和表之间需要建立“一对一”、“一对多”、“多对多”的关系,详细介绍请参考本人另一篇博客:https://blog.csdn.net/qq_32166627/article/details/53957109

2、主键

表的每一条记录都包含若干定义好的字段,同一张表的所有记录都有相同的字段定义。

对应关系表,有个很重要的约束,就是任意2条记录不能重复。不能重复是指不同的记录能够通过某个字段来进行唯一区分,那么这个字段被称为主键。

对于主键的要求,最重要的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。

由于主键的作用十分重要,怎么选择主键会对业务开发产生重要的影响。如果我们以身份证号码作为主键,似乎能唯一定位一条记录,但是身份证号码属于一种业务场景,如果身份证号升位了,或者需要变更,作为主键,不得不进行修改的时候,就会对业务产生严重的影响。

所以,选择主键的一个基本原则是:不要使用任务跟业务相关的字段作为主键。那么,身份证号、手机号、邮箱地址等这些看上去可以唯一标识的字段,都不能作为主键。

用作主键的字段一定是要跟业务完全无关的,我们一般把这个字段命名为id。常见的可以用作id的字段类型有:
1、自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增证书,这样我们就完全不用担心主键重复,也不用自己预先生成主键。
2、全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似于:f6dd9694-44bc-44c5-9f45-17e45724bedd。GUID算法是通过网卡MAC地址、时间戳、随机数保证任意计算机在任意时间生成的字符串都是不相同的,大部分编程语言都内置了GUID算法,程序员可以预先计算出主键。

2.1 联合主键

关系型数据库还允许通过多个字段来唯一标识记录,这种主键被称为联合主键。对于联合主键,允许有一列有重复,只要联合主键没有重复即可。

3、外键

外键常用在“一对多”、“多对多”关系上,作为表关联的纽带。一般外键定义在“多”的那张表中,对应的是“一”的那张表的主键,这样就把两张表关联起来了。定义外键并不是通过列名实现的,而是通过定义外键约束实现的:

FOREIGN KEY (stuId) REFERENCES stu(stuId)  

这句话表示将当前表的stuId字段关联到stu表的stuId字段。FOREIGN KEY (stuId)指定了本表的stuId字段作为外键,REFERENCES stu(stuId)指定了这个外键将关联到stu表的stuId列(即stu表的主键)。

通过定义外键约束,关系型数据库可以保证无法插入无效的数据。即如果stu表中不存在id=999的记录,那么score表就无法插入stuId=999的记录。

由于外键约束会降低数据库的性能,大部分实时性要求高的应用为了追求速度,并不设置外键约束,而是靠应用程序本身来保证逻辑的正确性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值