首页 > 解决方案 > 关系的主键

问题描述

对于代表动物园的数据库,我必须关联 2 个实体。这是动物园管理员照看某些围栏的轮班模式。

我们有 Keeper_Number(来自“Keeper”表的 FK) Enclosure_Number(来自“Enclosure”表的 FK) Shift start Shift end

显然,我们不希望一个人能够同时在两个地方工作。我的问题是,我是不是最好制作所有这些主键,所以组合总是唯一的,或者只是应用唯一约束并使表没有外键?抱歉没有DDL,我的理解非常有限,我主要使用了Miscrosoft sequel server express的UI。

谢谢!

标签: sqlsql-serverforeign-keysprimary-keyentity-relationship

解决方案


根据您的评论,您可能应该在插入之前检查一下。没有可以应用的真正好的约束来防止重复插入。

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

推荐阅读