sql - 关系的主键
问题描述
对于代表动物园的数据库,我必须关联 2 个实体。这是动物园管理员照看某些围栏的轮班模式。
我们有 Keeper_Number(来自“Keeper”表的 FK) Enclosure_Number(来自“Enclosure”表的 FK) Shift start Shift end
显然,我们不希望一个人能够同时在两个地方工作。我的问题是,我是不是最好制作所有这些主键,所以组合总是唯一的,或者只是应用唯一约束并使表没有外键?抱歉没有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
推荐阅读
- spring-boot - 使用 nginix 控制器将 Spring Boot 应用程序部署到 Kubernetes 集群时,JWT 身份验证不起作用
- ray - 如何获取现有 Ray redis 集群的地址?
- pg-promise - 使用未在 pg-promise 中运行的 null 或空字符串值更新列
- shell - 如何读取链中某个命令的返回码
- arrays - 如何将多个数据从视图发送到操作数据?
- php - 如何在PHP中查找给定数字的字符串的出现字母
- python - 嵌套字典的类型提示
- python - 如何在手中检测物体?从这个视频
- entity-framework-core - 向实体框架模型添加键以满足需要键?
- vb.net - 列表框数据到文本框 [ASPX.VB]