关系的主键
Primary key for a relation
对于代表动物园的数据库,我必须关联 2 个实体。
这是动物园饲养员照看某些围栏的轮班模式。
我们有
Keeper_Number(FK 来自 "Keeper" table)
Enclosure_Number(FK 来自 "Enclosure" table)
轮班开始
班次结束
显然我们不希望一个人能够同时在两个地方工作。我的问题是,我是否最好制作所有这些主键,以便组合始终是唯一的,或者只是应用唯一约束并使 table 不带外键?抱歉没有 DDL,我的理解非常有限,我主要使用 Miscrosoft sequel server express 的 UI。
谢谢!
根据您的评论,您可能应该在插入之前进行检查。没有真正好的约束可以用来防止重复插入。
declare @Keeper_Number int = 5
declare @Enclosure_Number int = 2
declare @startShift datetime = '20181116 08:00:00'
declare @endShift datetime = '20181116 08:00:00'
if exists(select 1 from ShiftTable
where Keeper_Number = @Keeper_Number
and ( shiftStart between @startShift and @endShift
or shiftEnd between @startShift and @endShift)
)
begin
raiserror('Employee is already scheduled in another enclousre during this time',16,1)
return
end
else
begin
insert into ShiftTable(Keeper_Number, Enclousre_Number, shiftStart, shiftEnd)
values(@Keeper_Number, @Enclosure_Number, @startShift, @endShift)
end
对于代表动物园的数据库,我必须关联 2 个实体。 这是动物园饲养员照看某些围栏的轮班模式。
我们有 Keeper_Number(FK 来自 "Keeper" table) Enclosure_Number(FK 来自 "Enclosure" table) 轮班开始 班次结束
显然我们不希望一个人能够同时在两个地方工作。我的问题是,我是否最好制作所有这些主键,以便组合始终是唯一的,或者只是应用唯一约束并使 table 不带外键?抱歉没有 DDL,我的理解非常有限,我主要使用 Miscrosoft sequel server express 的 UI。
谢谢!
根据您的评论,您可能应该在插入之前进行检查。没有真正好的约束可以用来防止重复插入。
declare @Keeper_Number int = 5
declare @Enclosure_Number int = 2
declare @startShift datetime = '20181116 08:00:00'
declare @endShift datetime = '20181116 08:00:00'
if exists(select 1 from ShiftTable
where Keeper_Number = @Keeper_Number
and ( shiftStart between @startShift and @endShift
or shiftEnd between @startShift and @endShift)
)
begin
raiserror('Employee is already scheduled in another enclousre during this time',16,1)
return
end
else
begin
insert into ShiftTable(Keeper_Number, Enclousre_Number, shiftStart, shiftEnd)
values(@Keeper_Number, @Enclosure_Number, @startShift, @endShift)
end