[廖雪峰-SQL教程]2.关系模型

本文详细介绍了关系模型中的主键和外键概念,强调了主键选取的原则,指出应避免使用业务相关的字段作为主键。此外,讨论了联合主键和外键的使用及其在性能、并发和扩展性方面的影响。还探讨了数据库中的多对多和一对一关系。最后,文章深入讨论了索引的重要性和工作原理,包括如何创建索引、索引的选择以及唯一索引的使用,强调了索引对查询速度的提升和对写操作的影响。
摘要由CSDN通过智能技术生成

关系模型侵删

关系数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维表,可以把它们看作很多Excel表。

表的每一称为记录(Record),记录是一个逻辑意义上的数据。

表的每一称为字段(Column),同一个表的每一 行记录都拥有相同的若干字段。

关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。

在关系数据库中,关系是通过主键外键来维护的。我们在后面会分别深入讲解。

主键

        对于关系表,有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键

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

        所以,选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。

        因此,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键。

        作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id

MySQL数据库主键设计原则

2. 主键设计原则

总原则:根据数据库表的具体使用范围来决定采用不同的表主键定义。

2.1 确保主键的无意义性

         在开发过程中,有意义的字段例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有“意义更改”的可能性。

但是,也有一些例外的情况,例如“订单表”需要支持需求“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,那将“订单编号”作为主键就满足不了要求了。

因此在使用具有实际意义的字段作为主键时,需要考虑是否存在这种可能性。

要用代理主键,不要使用业务主键。任何一张表,强烈建议不要使用有业务含义的字段充当主键。我们通常都是在表中单独添加一个整型的编号充当主键字段。

2.2 采用整型主键

主键通常都是整数,不建议使用字符串当主键。(如果主键是用于集群式服务,可以采用字符串类型)

2.3 减少主键的变动

       主键的值通常都不允许修改,除非本记录被删除。

2.4 避免重复使用主键

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值