Первичный ключ для отношения - PullRequest
0 голосов
/ 16 ноября 2018

Я должен связать 2 объекта для базы данных, представляющей зоопарк. Это сменные модели для владельцев зоопарков, ухаживающих за определенными вольерами.

У нас есть Keeper_Number (FK из таблицы "Keeper") Enclosure_Number (FK из таблицы "Enclosure") Сдвиг начала Сдвиг конец

Очевидно, что мы не хотим, чтобы один человек мог работать в двух местах одновременно. Мой вопрос заключается в том, лучше ли мне создавать все эти первичные ключи, чтобы комбинация всегда была уникальной или просто применялось уникальное ограничение и оставлял таблицу без внешнего ключа? Извините за отсутствие DDL, мое понимание очень ограничено, и я в основном использовал пользовательский интерфейс Miscrosoft Sequel Server Express.

Спасибо!

1 Ответ

0 голосов
/ 16 ноября 2018

Основываясь на ваших комментариях, вам, вероятно, следует просто проверить, прежде чем вставить.Существует не очень хорошее ограничение, которое вы могли бы применить, чтобы предотвратить дублирование вставки.

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
...