Sql server 我应该在SQLServer中将属性作为主键,还是应该签入servlet?
我有一个教师详细信息表,其中教师id作为主键,还有一个考试详细信息表,其中考试id作为一个属性 我希望一名教师不能多次创建同一个考试id,但有可能两名教师可以创建同一个考试id 我应该将exam_id作为主键还是在servlet中检查它 我正在使用sql server作为数据库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
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进行处理会更容易,但仍然想知道如何使用复合主键处理数据库