设计数据库表以在允许插入之前检查另一个表中的id

时间:2012-02-02 23:15:48

标签: mysql database database-design

我已经得到了我确定的一个非常简单的数据库问题,但我甚至不知道谷歌是什么,所以希望有人可以帮助我。

我正在尝试创建两个互连的表。例如,假设我有一个员工表,其中包含员工姓名和员工ID,然后我创建另一个表employee_bonus,其中包含员工ID和奖金金额。我想要的是employee_bonus表每次插入一行时都会自动检查employee表,以确保employee表中存在employee id,如果不存在则拒绝insert。问题是,单个员工可能有多个奖金,所以我只想让它检查它是否存在,而不是一对一。那有意义吗?那可能吗?我该怎么做?那叫什么?

另外,我在MySql中这样做。

4 个答案:

答案 0 :(得分:1)

来自维基百科:外键

在关系数据库的上下文中,外键是两个表之间的引用约束。

http://en.wikipedia.org/wiki/Foreign_key

答案 1 :(得分:0)

由于它不是一对一关系,因此为employee_bonus表提供了自己的主键,并在employee表的id列和employee_bonus表中的employee_id之间建立了外键关系。

答案 2 :(得分:0)

如果您想在尝试添加缺少的员工时避免插入错误,请尝试以下操作:

insert into employee_bonus
select ?, ?, ? -- put your insert values in here
from employee
where employee_id = ?; -- put the employee_id in here

如果员工存在,这将插入一行,如果不存在则不会执行任何操作。

答案 3 :(得分:0)

以下是您正在寻找的基本示例:

CREATE TABLE employees (
 employee_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 family_name VARCHAR(100) NOT NULL,
 first_name VARCHAR(100) NOT NULL,
 birth_date DATETIME NULL DEFAULT NULL,
 PRIMARY KEY(employee_id)
) ENGINE=INNODB;

CREATE TABLE employee_bonus (
 bonus_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
 employee_id INT UNSIGNED NOT NULL,
 bonus_value DECIMAL(10,2) DEFAULT 0.00,
 PRIMARY KEY(bonus_id),
 KEY fk_employee_id (employee_id),
 CONSTRAINT fk_employee_constraint FOREIGN KEY fk_employee_id(employee_id) 
    REFERENCES employees(employee_id) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=INNODB;