2017-02-16 118 views
0

我有一个teacher_details表,其中teacher_id作为主键,一个exam_details表的exam_id为一个属性。我应该在sql server中创建一个属性作为主键还是应该检查servlet?

我想让一位老师不能一次创建同一个exam_id,但可能有两位老师可以创建相同的exam_id。

我应该把exam_id作为主键,否则我会在servlet中检查它?

我正在使用sql-server的数据库。

create table teacher_details(
teacher_id varchar(20) not null primary key, 
teacher_name varchar(30)); 

create table exam_details(exam_id varchar(20), exam_name varchar(30), teacher_id varchar(20), foreign key (teacher_id) references teachers_details(teacher_id)); 
+0

就做相反的方式,exam_id在teacher_details表,你需要配置来处理相同的API。 –

+0

配置了什么API? – Dinesh

+0

我的意思是它应该在servlet级别处理! –

回答

0

你应该在servlet的检查这一点,因为如果你让exam_id作为主键,比两位老师没有将能够创建同一exam_id

+0

我不同意。这显然是数据完整性问题,因此应该由数据库来处理。 –

+0

我只是说他希望不同的老师创建相同的exam_id,如果他使它成为数据库中的主键,这将是不可能的 –

+0

正如我的答案所示,主键可以由多个列组成。如果主键是复合键,那么这个需求根本就没有问题。 –

1

你应该做的exame_idteacher_id初级组合您的exam_details表的密钥。
此外,你应该习惯命名你的约束:

create table teacher_details 
(
    teacher_id varchar(20) not null, 
    teacher_name varchar(30), 
    constraint pk_teacher_details primary key (teacher_id) 
); 

create table exam_details (
    exam_id varchar(20), 
    exam_name varchar(30), 
    teacher_id varchar(20), 
    constraint fk_teacher_exam foreign key (teacher_id) references teacher_details(teacher_id), 
    constraint pk_exam_details primary key (teacher_id, exam_id) 
); 
相关问题