表关系设计
一对一(One-to-One)
指的是一个实体(表)的一条记录与另一个实体(表)的一条记录之间存在关联,且每个实体的记录只与另一个实体的一条记录相关联。
例如,一个人只有一个身份证号,而一个身份证号也只对应一个人。
一对多(One-to-Many)
指的是一个实体(表)的一条记录与另一个实体(表)的多条记录之间存在关联,且每个实体的记录可以关联到多个另一个实体的记录。
例如,一个班级可以有多个学生,但一学生只有一个班级。
多对多(Many)-to-Many)
指的是一个实体(表)的多条记录与另一个实体(表)的多条记录之间存在关联,且每个实体的记录可以与多个另一个实体的记录相关联。这种关系通常需要通过中间表来实现。
例如,一个学生可以选择多门课程,一门课程也可以有多名学生选修。
JOIN 查询
INNER JOIN
只返回同时存在于两张表的行数据。LEFT JOIN
则返回左表都存在的行。RIGHT JOIN
返回右表都存在的行。FULL JOIN
,它会把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL
。
外键约束操作
CASCADE
主表主键更新,从表关联记录的外键跟着更新,主表记录删除,从表关联记录删除。这可以用于确保关联数据的一致性。SET NULL
主表主键更新或者主表记录删除,从表关联记录的外键设置为 NULL。这意味着从表的记录与主表的关联断开。RESTRICT
限制在主表的记录被删除或更新时,只要从表中还有关联记录存在,就阻止操作执行。这保证了关联数据的完整性。NO ACTION
类似于 RESTRICT。这是一种较为严格的限制,但在某些数据库系统中(mysql),NO ACTION 的实际行为可能与 RESTRICT 相同。