Mysql关系型数据库设计中存在着三种关系:一对一,一对多,多对多
今天详细的总结下
一对一: 表中的一列对应着另外表中一列
这种一一对应的关系并不常见。一一对应的列可以放在一个表里面,但是这样做一定有原因,例如,把一个大表分成若干小表,可以确保安全,防止信息泄露。对于工资信息表,每小时的工资钱数对于不同岗位的人员有所区别,敏感的信息除了统计工资的工作人员之外,其他人不能看到。这列数据经常被放在一个单独的表里面。
一对多:表中的一列对应另外表中的几列
这种关系在关系型列表中最常见。在旅游表格中,城市列表中的城市可以对应顾客信息表中,顾客的各种信息,联系方式,年龄地址等。
多对一:表中的多列对应另外表中的多列
可以将多对多关系视为通过中间表连接的两个一对多关系。
中间表通常称为“连接表”(也称为“交叉引用表”)。该表用于将其他两个表连接在一起。
举例子:
为了在“客户”表和“产品”表之间创建多对多关系,我们创建了一个名为“订单”的新表。在“订单”表中,有一个名为CustomerId的字段和另一个名为ProductId的字段。
这些字段包含的值应与引用表中相应字段中的值相对应。因此,Orders.CustomerId中的任何给定值也应该存在于Customer.CustomerId字段中。
如果不是这种情况,那么我们可以为实际上不存在的客户提供订单。我们还可以订购不存在的产品。不能满足参照完整性。
大多数数据库系统允许指定数据库是否应强制执行参照完整性。因此,当用户(或流程)尝试插入主键字段中不存在的外键值时,将发生错误。Orders.CustomerId字段是Customer.CustomerId的外键(这是该表的主键)。而且Orders.ProductId字段是Products.ProductId字段的外键(这是该表的主键)。