sql - 复合键:外键和主键
问题描述
我现在正在做一个新的练习,并且已经获得了整个 ERD,只需要创建数据库并进行一些查询。给出了一个注释,即 Rates 表有一个复合主键。我知道如何使复合主键
CONSTRAINT [name] PRIMARY KEY ([Col1],[Col2])
Col1 是 Int,Col2 是 Varchar
然后将该表外键输入到主表中。据我所知,没有办法做到这一点。有没有人碰巧知道有没有办法?
解决方案
这是复合键的示例。该数据库包含由某些代码标识的公司,例如美国的 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)
到雇员表,但这将是多余的,因为我们已经对属于公司的部门进行了约束。
推荐阅读
- python - 椭圆曲线加倍并在python中添加实现
- django - 用户模型 set_password() 方法无法按预期工作 django
- functional-programming - 简单类型的 lambda 演算与 Hindley-Milner 类型系统
- dart - Flutter Firestore 离线持久化
- powershell - 如何在不删除目录本身的情况下删除目录中的内容?命令外壳或 Powershell
- ios - Firebase iOS 手机登录 - Recaptcha 无法在模拟器和设备上运行
- telerik - 将一种新类型的无序列表添加到 RAD 编辑器
- node.js - 如何读取使用 KoaJS 上传的文件?
- ruby-on-rails - Rails 4.1路由路径助手在路径生成中使用不正确的ID
- python - 如何在自己的文件夹中引用模块?