我正在做一个关于学校主题的学校项目,我需要为学生,班级,课程创建一些表格...
我想将Group添加到已确定的类中,并且group_id会自动增加,但是如果我更改了任何这些属性(Classes_id,courses_acronym,year_Semesters),我希望将group_id变量重置改变吗?
这是我的桌子:
CREATE TABLE Classes_Groups(
Classes_id varchar(2),
Group_id INT IDENTITY(1,1),
courses_acronym varchar(4),
year_Semesters varchar(5),
FOREIGN KEY (Classes_id, year_Semesters,courses_acronym) REFERENCES Classes(id,year_Semesters, courses_acronym),
PRIMARY KEY(Classes_id,courses_acronym,year_Semesters,Group_id)
);
答案 0 :(得分:0)
通常,您(无需)重置表的标识列。标识列用于为表中的每个记录创建唯一值。
因此,您想基于班级表中的新条目在组表中生成条目。为此,您可以在类表上创建一个触发器。
由于Group_id
本身已经是唯一的(由于其标识),您根本不需要主键中的其他字段。相反,如果需要,您可以为组合(Classes_id, courses_acronym, year_Semesters)
创建一个单独的UNIQUE约束。
如果类表的id
字段也是IDENTITY列,则可以仅在该id
字段上在类表中定义主键。然后,新组表中的外键约束只能包含该Classes_id
字段。)
现在太多了。我想您的数据库设计需要更多的其他调整和调整。 ;)
答案 1 :(得分:0)
您在哪里设置值?,您可以有一个存储的proc,并且在您的查询中,当命中存储的proc时,假设列开头有值,则列中设置的初始值将 然后使用IF语句。 声明@initial_Classes_id varchar(2)=-已插入初始值 声明@initial_courses_acronym varchar(4)=-插入初始值 声明@initial_year_Semesters varchar(5)=-已插入初始值
declare @compare_Classes_id varchar(2) = (select top 1 Classes_id from Classes_Groups order by --PK column desc for last insert); l would add Dateadded and then order with last insert date
declare @compare_courses_acronym varchar(2) = (select top 1 Classes_id from Classes_Groups where Classes_id = @compare_Classes_id);
declare @compare_year_Semesters varchar(2) = (select top 1 Classes_id from Classes_Groups where Classes_id = @compare_Classes_id);
IF (@initial_Classes_id != @compare_Classes_id OR @initial_courses_acronym != @compare_courses_acronym OR @initial_year_Semesters != @compare_year_Semesters)
BEGIN
DBCC CHECKIDENT ('Group_id', RESEED, 1)
Insert into Classes_Groups (courses_acronym,year_Semesters)
values (
courses_acronym,
year_Semesters
)
END
ELSE
BEGIN
Insert into Classes_Groups (courses_acronym,year_Semesters)
values (
courses_acronym,
year_Semesters
)
END
NB:建议在主键上使用int。除非您有特定的目的。