菜鸟学数据库(四)——超键、候选键、主键、外键

超级键、候选键、主键、外键……这些在数据库中非常重要。

超级键...是...一组属性,可以唯一标识一行...不...多个属性...可以组合...比如...假设你有一个学生表...学号、姓名、性别、学号、师号...这些...(学号)单独可以唯一标识...(学号、姓名)也可以...(学号、性别)...这些都是超级键...因为它们可以唯一标识一个学生...但是...可能包含冗余属性...在(学号、姓名)...姓名可能不需要唯一标识...
候选键...是...没有冗余属性的超级键...最小的超级键...属性不能被删除...例如...在学生表中...(学号)和(身份证号)...两者...都...可以唯一标识一个学生...并且不存在冗余属性...(学号、姓名)不是候选键...因为有附加名称...
主键...由用户选择...候选键之一...被使用作为元组标识符...例如...在学生表中...您通常选择(学号)作为主键...就这样...在教师表中...您可以选择(教师号)作为主键...
外键...是...表中的一个属性...不是它自己的主键...而是另一个表的主键...例如...在学生表中...(教师编号)...这个...不是学生表的主键...而是...在教师中表...(教师编号)是主键...所以...在学生表中,(教师编号)是外键...表示该学生与教师相关...指向教师表的主键...
就这样...超级键可以唯一标识...候选键是唯一的超级键...主键是选定的候选键...外键指向整个表的主键...2 02 2 ...某城市...数据库设计...是这样的...这些概念...有助于确保数据不重复...不混乱...非常实用...尤其是外键...保持关系的完整性...非常重要...据我了解...

设置数据库外键时如何区分那个为主键表那个为外键表

数据库的主键和外键

说白了,主键和外键就是数据库中的“身份证”和“户口簿”。
主键是每条记录唯一的“身份证号”。
去年我们跑的电商项目中,users表使用了自增ID作为主键,足够稳定,可以支持一天3 000个订单。
外键是表之间的“账本”。
例如,orders表使用用户ID作为外键来关联users表。
当用户被删除时,订单也必须被处理。
说实话,这很令人困惑。

我们先来说说最重要的事情。
主键不能重复且不能为空。
这称为设备完整性。
去年,团队遇到了麻烦,因为某个临时表忘记设置主键,导致导入时数据变得一团糟。
另一方面,外键可以重复或为空。
主要用于表间关联。
例如,我们项目中的产品表有多个类别ID作为外键,一个产品可以分为多个类别。
还有另一个关键细节。
一张表只能有一个主键,但外键的数量没有限制。
去年,我们有 5 个外键链接到项目产品表,该表链接到库存和物流表。

一开始我以为外键是保证数据一致性的主键,后来发现错了。
外键主要解决关联问题,具体的一致性取决于触发器或者应用层逻辑。
等等,那是另一回事了。
用行话来说,这称为雪崩效应。
事实上,前面的一点点延迟就会让后面的一切都倒塌。
比如外键引用的表速度很慢,主表查询就会卡住。

建议在设计表时,主键应该是简单的自增或者UUID,外键尽量设置为非空,除非业务允许空值。
您认为在大表上使用外键会降低查询速度吗?