因为主键的做用十分重要,如何选取主键会对业务开发产生重要影响。若是咱们以学生的身份证号做为主键,彷佛能惟必定位记录。然而,身份证号也是一种业务场景,若是身份证号升位了,或者须要变动,做为主键,不得不修改的时候,就会对业务产生严重影响。因此,选取主键的一个基本原则是:不使用任何业务相关的字段做为主键。所以,身份证号、手机号、邮箱地址这些看上去能够惟一的字段,均不可用做主键。算法
做为主键最好是彻底业务无关的字段,咱们通常把这个字段命名为id
。常见的可做为id
字段的类型有:数据库
自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样咱们就彻底不用担忧主键重复,也不用本身预先生成主键;编程
全局惟一GUID类型:使用一种全局惟一的字符串做为主键,相似8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。GUID算法经过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不一样的,大部分编程语言都内置了GUID算法,能够本身预算出主键。编程语言
对于大部分应用来讲,一般自增类型的主键就能知足需求。咱们在students
表中定义的主键也是BIGINT NOT NULL AUTO_INCREMENT
类型。性能
因为外键约束会下降数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。这种状况下,class_id
仅仅是一个普通的列,只是它起到了外键的做用而已。关系数据库经过外键能够实现一对多、多对多和一对一的关系。外键既能够经过数据库来约束,也能够不设置约束,仅依靠应用程序的逻辑来保证。spa
索引的效率取决于索引列的值是否散列,即该列的值若是越互不相同,那么索引效率越高。反过来,若是记录的列存在大量相同的值,例如gender
列,大约一半的记录值是M
,另外一半是F
,所以,对该列建立索引就没有意义。code
能够对一张表建立多个索引。索引的优势是提升了查询效率,缺点是在插入、更新和删除记录时,须要同时修改索引,所以,索引越多,插入、更新和删除记录的速度就越慢。索引
对于主键,关系数据库会自动对其建立主键索引。使用主键索引的效率是最高的,由于主键会保证绝对惟一。开发