首页 > 解决方案 > 复合键:外键和主键

问题描述

我现在正在做一个新的练习,并且已经获得了整个 ERD,只需要创建数据库并进行一些查询。给出了一个注释,即 Rates 表有一个复合主键。我知道如何使复合主键 CONSTRAINT [name] PRIMARY KEY ([Col1],[Col2])Col1 是 Int,Col2 是 Varchar

然后将该表外键输入到主表中。据我所知,没有办法做到这一点。有没有人碰巧知道有没有办法?

标签: sqlsql-serverdatabase

解决方案


这是复合键的示例。该数据库包含由某些代码标识的公司,例如美国的 EIN。这些公司有部门,每个公司都可以决定唯一的代码来识别他们的部门。A 公司可以将 BD 用于他们的采购部门,而 B 公司也可以使用 BD,但用于他们的基础部门。然后每个公司都有员工,每个公司都使用一些员工编号来识别他们。A 公司的员工 #123 与 B 公司的员工 #123 不同。一名员工在一家公司的一个部门工作。

create table company
(
  company_no decimal(9,0),
  company_name varchar(100),
  primary key (company_no)
);

create table department
(
  company_no decimal(9,0),
  department_code varchar(20),
  name varchar(100),
  primary key (company_no, department_code),
  foreign key(company_no) references company(company_no)
);

create table employee
(
  company_no decimal(9,0),
  employee_no decimal(9,0),
  first_name varchar(50),
  last_name varchar(50),
  department_code varchar(20),
  primary key (company_no, employee_no),
  foreign key(company_no, department_code) references department(company_no, department_code)
);

我们还可以添加一个约束

  foreign key(company_no) references company(company_no)

到雇员表,但这将是多余的,因为我们已经对属于公司的部门进行了约束。


推荐阅读