SQL主键和理解好的表设计
在讨论SQL主键时,定义和解释每种不同类型的键是一个很好的起点。有主键、外部键、惟一键、候选键、自然键和代理键。最符合逻辑的出发点是回答“SQL中的关键是什么?”
新的SQL ?成为一个数据库表设计大师在Udemy.com。
根据SQL标准,键是表中列的子集,它允许唯一标识一行。换句话说,包含一个值或一组值的一列或一组值,这些值对该表边界内的每一行都是唯一的。因此,键可以是标识表中任意一行的一个或多个列。
但是,如果一个键包含的键数超过了标识一行所需的最小键数,那么SQL标准将该键指定为超级键。另一方面,如果一个键包含标识表中单个行所需的最小列数,那么它就是一个最小超级键。
考虑下表:
标题 | 第一个名字 | 姓 | D.O.B | 电子邮件 | 位置 |
经理 | 罗伯特。 | 棕色(的) | 18:03:1968 | (电子邮件保护) | 伦敦 |
经理 | 杰奎琳 | 黑色的 | 22:06:1981 | (电子邮件保护) | 纽约 |
经理 | 斯科特 | 绿色 | 23:02:1978 | (电子邮件保护) | 罗马 |
经理 | 玛丽 | 白色 | 01:09:1980 | (电子邮件保护) | 巴黎 |
经理 | 罗伯特。 | 红色的 | 05:05:1975 | (电子邮件保护) | 佛罗里达 |
在SQL中,超级键是一组列,这些列组合了单行中不同于其他行的值,也就是说,这个组合对于表中的每一行都是唯一的。
表管理器中可能的超级键有;
- 家庭的名字,
- 姓,D.O.B
- 姓,出生日期,电子邮件
- 姓,出生日期,电子邮件,地点
在这个小表中,很容易找到惟一的组合,但是在一个有数百万条记录的表中,要找到只匹配一行的惟一的列组合要困难得多。
在上面的例子中,可以唯一标识一行的最小键是:
- 姓
- D.O.B
- 电子邮件
- 位置
最小键“email”是唯一可能在表增长时扩展的键。
请访问Udemy.com了解更多关于数据库模式和设计的信息。
什么是天然钥匙?
一个自然键由表中彼此之间具有逻辑关系的列组成。在上面的例子中,manager、Family Name、D.O.B、Email和Location有一个逻辑关系。因此,任何组成这些列的键都是一个自然键,因为这些列已经存在。对于代理键,数据库设计人员不需要创建列来提供唯一的特征。
代理键是一种人工键,其中列值与表中的其他列没有关系。代理键通常只是设计器添加的一个自定义列,并将一个简单的顺序号作为值保存。当添加新行时,列的行值增加1。通过为表中的每一行提供一个唯一的数字作为标识符,设计者为表创建了一个人工键。表中的每一行都有一个唯一的标识符,无论策略、巧合或增长如何。
考虑添加代理键后的Table Managers。
CompanyID | 标题 | 第一个名字 | 姓 | D.O.B | 电子邮件 | 位置 |
101 | 经理 | 罗伯特。 | 棕色(的) | 18:03:1968 | (电子邮件保护) | 伦敦 |
102 | 经理 | 杰奎琳 | 黑色的 | 22:06:1981 | (电子邮件保护) | 纽约 |
103 | 经理 | 斯科特 | 绿色 | 23:02:1978 | (电子邮件保护) | 罗马 |
104 | 经理 | 玛丽 | 白色 | 01:09:1980 | (电子邮件保护) | 巴黎 |
105 | 经理 | 罗伯特。 | 红色的 | 05:05:1975 | (电子邮件保护) | 佛罗里达 |
通过添加代理键Company ID,设计人员确保表具有唯一的最小键Company ID,无论电子邮件策略发生了什么变化,或新员工共享相同的姓氏或D.O.B.。设计器现在有一个完美的备选键作为表的主键,而另一个备选键' Email '现在成为了辅助键。
密钥的具体类型是什么?
在SQL中,有惟一键、竞争者键、外键和最重要的—主键。它们都有一个共同点,那就是它们都有相同的基本原则。它们可以是一个或多个列的构造。它们的不同之处在于它们的目的,尤其是外键。
外键不同于其他键类型。外键实际上是指向另一个表中唯一键的指针。一个表(A)中的外键引用另一个表(B)中的唯一键,它定义了一个连接表的关系。
唯一键就是表中的唯一键。
有一些关于外键和唯一键的基本规则:
- 一个表可以有多个惟一和外键
- 外键必须引用另一个表中的唯一键
- 外部键和唯一键可以是NULL
- 主键不能为NULL
- 每个表都应该有一个主键
- 每个表只能有一个主键
选择强主键非常重要,因为即使在更改期间,它也保持惟一。主键唯一地标识数据库中的每条记录,并且需要是唯一的。数据库设计人员从现有的强稳定自然键中选择主键,或者通常从自定义代理键中选择主键。可以有几个主键角色的候选者,但只能选择一个主键。因此,必须仔细选择正确的列。