多表内容
一对多
这个内容是黑马的入门问题,可以带大家思考一下这个怎么设计
我们要知道一个岗位可以对应很多用户,而一个用户只能对应一个岗位,这就属于一对多的类型
那么我们需要怎么将他们进行关联呢?
现在我们可以通过一个新的知识点来进行关联,使用外键进行约束。
外键约束
在关系型数据库中,外键约束(Foreign Key Constraint)是一种用于维护表与表之间关系的约束。它定义了两个表之间的引用关系,确保引用数据的完整性和一致性。
外键约束的作用可以总结为以下几点:
引用完整性:外键约束确保引用的数据必须存在于被引用的表中,以确保数据的完整性。这意味着在插入或更新数据时,引用的值必须存在于引用表的主键列或唯一索引列中。
数据一致性:外键约束确保引用的数据在被引用表中的变动能够正确反映在引用表中。如果尝试删除或修改被引用表中的某行数据,但在引用表中存在对该行数据的引用,则会触发外键约束,阻止删除或修改操作,以保持数据一致性。
关联查询:外键约束还可以用于进行关联查询。通过定义外键关系,可以使用JOIN操作来连接相关的表,从而实现跨表查询和数据关联分析。
在创建表时,可以使用FOREIGN KEY关键字来定义外键约束。一个外键约束通常由两个部分组成:
1.外键列(Foreign Key Column):在引用表中的列,用于存储与被引用表相关联的值。
2.引用表(Referenced Table):被引用的表,其中包含外键列对应的主键列或唯一索引列。
举例使用
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
...
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
这个定义了一个一个名为orders的表,其中customer_id列作为外键列,引用了customers表中的customer_id列。这样,每次插入或更新orders表时,数据库会验证customer_id的值是否存在于customers表的customer_id列中,并确保数据引用的完整性和一致性。
设计
下面我们来解决我们先前的问题,一个员工表和一个岗位表的外键约束
先直接创建这个员工表和岗位表
-- 创建岗位表
CREATE TABLE Position (
position_id INT PRIMARY KEY,
position_name VARCHAR(50)
);
-- 创建员工表
CREATE TABLE Employee (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
position_id INT,
FOREIGN KEY (position_id) REFERENCES Position(position_id)
);
我们可以知道,员工的岗位内容,是依赖于岗位表的变化而变化的,当岗位表不需要某一个岗位的时候,公司就会将这部分员工剔除,那么员工中被删除岗位的那部分将被清除。
Position 表包含了岗位的信息,其中 position_id 是主键列,用于唯一标识每个岗位。Employee 表包含了员工的信息,其中 employee_id 是主键列,position_id 是外键列,用于关联岗位表的主键列 position_id。通过在 Employee 表的外键列上添加 FOREIGN KEY 约束,并引用 Position 表的主键列,我们可以正确的建立了员工表和岗位表之间的关联。
多对多类型
建立第三张中间表,中间表至少需要包含两个外键,分别关联两方的主键。
假设我们有两个表:学生表(Student)和课程表(Course),一个学生可以选择多门课程,一门课程也可以被多个学生选择。我们可以使用中间表来记录学生和课程之间的关联关系。
下面是一个示例 SQL 代码,展示了如何创建学生表、课程表和中间表,并建立它们之间的多对多关系:
-- 创建学生表
CREATE TABLE Student (
student_id INT PRIMARY KEY,
student_name VARCHAR(50)
);
-- 创建课程表
CREATE TABLE Course (
course_id INT PRIMARY KEY,
course_name VARCHAR(50)
);
-- 创建中间表
CREATE TABLE Student_Course (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES Student(student_id),
FOREIGN KEY (course_id) REFERENCES Course(course_id),
PRIMARY KEY (student_id, course_id)
);
学习这部分知识,需要多进行设计,联系,做到真正的熟练使用。