链接Jails和Jail Superintendent的表

时间:2013-11-18 08:09:43

标签: sql relational-database

我正在尝试用监狱,监狱管理员,评委等创建一个记录系统。现在我需要有一个监狱表和一个监狱管理员表。我希望它们都通过superintendent_id和jail_id链接。它们都应该是自动增量的。现在我很困惑,如果我先创建jails,我怎么能把superintendent_id放进去,如果我把superintendent_id放在第一位,我怎么能放jail_id,因为外键有一个约束,它不能为null。我的系统将具有稍后更改jail_superintendent的功能,但是当我在开始创建jails时应该怎么做?

CREATE TABLE JAILS
(jail_id int not null AUTO_INCREMENT,
jail_name varchar(200) not null,
capacity int not null,
jail_address varchar(200) not null,
superintendent_id int not null);



CREATE TABLE SUPERINTENDENT
(superintendent_id int not null AUTO_INCREMENT,
username varchar(20) not null, -- password is referenced from the table USERS
name char(20) not null,
jail_id int not null
sex char(1) not null,
DOB date,
DOJ date,
phone int(10),
address varchar(200),
city char(20),
state char(20),
primary key(superintendent_id),
foreign key(username) references USERS(username)
);

1 个答案:

答案 0 :(得分:1)

两个表中都不需要jail_idsuperintendent_id。如果一个监狱只能有一名监督(这似乎有意义),只需拥有JAILS.superintendent_id列并删除SUPERINTENDENT.jail_id列。当您想要创建新的JAIL和SUPERINTENDENT时,首先创建SUPERINTENDENT,获取其ID,然后在创建JAIL时使用它填充JAIL.superintendent_id字段。

CREATE TABLE JAILS
(jail_id int not null AUTO_INCREMENT,
jail_name varchar(200) not null,
capacity int not null,
jail_address varchar(200) not null,
superintendent_id int not null);

CREATE TABLE SUPERINTENDENT
(superintendent_id int not null AUTO_INCREMENT,
username varchar(20) not null, -- password is referenced from the table USERS
name char(20) not null,
sex char(1) not null,
DOB date,
DOJ date,
phone int(10),
address varchar(200),
city char(20),
state char(20),
primary key(superintendent_id),
foreign key(username) references USERS(username)
);