Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我应该在SQLServer中将属性作为主键,还是应该签入servlet?_Sql Server_Jsp_Servlets - Fatal编程技术网

Sql server 我应该在SQLServer中将属性作为主键,还是应该签入servlet?

Sql server 我应该在SQLServer中将属性作为主键,还是应该签入servlet?,sql-server,jsp,servlets,Sql Server,Jsp,Servlets,我有一个教师详细信息表,其中教师id作为主键,还有一个考试详细信息表,其中考试id作为一个属性 我希望一名教师不能多次创建同一个考试id,但有可能两名教师可以创建同一个考试id 我应该将exam_id作为主键还是在servlet中检查它 我正在使用sql server作为数据库 create table teacher_details( teacher_id varchar(20) not null primary key, teacher_name varchar(30)); create

我有一个教师详细信息表,其中教师id作为主键,还有一个考试详细信息表,其中考试id作为一个属性

我希望一名教师不能多次创建同一个考试id,但有可能两名教师可以创建同一个考试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));

您应该在servlet中检查这一点,因为如果您将考试id设置为主键,那么两位教师将无法创建相同的考试id

您应该将考试id和教师id的组合设置为考试详细信息表的主键。 此外,您应该习惯于命名约束:

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)
);

按照相反的方式进行,教师详细信息表中的考试id,您需要配置API来处理相同的问题。配置了什么API?我的意思是它也应该在servlet级别处理!我不同意。这显然是一个数据完整性问题,因此应该由数据库来处理。我只是说,他希望不同的老师创建相同的考试id,如果他将其作为数据库中的主键,则主键不可能由多个列组成,正如我的回答所示。如果主键是复合主键,那么这种要求就没有任何问题。@ZoharPeled您能解释一下如何通过复合主键处理数据库吗key@DmytroGrynets,我认为通过servlet进行处理会更容易,但仍然想知道如何使用复合主键处理数据库