2016-02-11 4 views
0

я залетела простой дизайн таблицы:внешний ключ с несколькими ключами

enter image description here

Ass вы можете увидеть, tAttachments имеет внешний ключ для изображений, PlayerNames и PlayerNumbers. Вот более близкий взгляд на стол:

enter image description here

Мне нужно создать ограничение на таблицу, которая гласит, что tAttachments должны иметь как минимум 1 иностранный набор ключей. Кто-нибудь знает, как я могу это сделать?

+0

который является СУБД вы используете? –

+1

Возможная дубликация [Мне нужно ограничение проверки на два столбца, по крайней мере одно должно быть не null) (http://stackoverflow.com/questions/26102456/i-need-a-check-constraint-on-two-columns -at-minimum-one-must-be-not-null) –

+0

Мой не такой же, как мой, мой требует, чтобы можно было установить только 1. так что 1, 0, 0 отлично; 0, 1, 0 отлично, 0, 0, 1 отлично, но 1,1, 0 не равно 1, 1, 1 или 0, 0, 0. Надеюсь, это имеет смысл. @PieroAlberto это MSSQL, поэтому я использую SQL Management Studio. – r3plica

ответ

0

Я не знаю, как это сделать на этапе проектирования db, но вы можете сделать триггер INSERT и триггер UPDATE. Таким образом, вы можете проверить, соблюдается ли это ограничение.

Что-то вроде:

create trigger tAttachmentsCheck on tAttachments for insert, update as 
begin 
if exists (select * 
    from inserted i 
    where (i.ImageId <> NULL and PlayerNameId <> NULL) 
    or (i.ImageId <> NULL and PlayerNameId <> NULL and PlayerNumberId <> NULL) 
    or (i.ImageId <> NULL and PlayerNumberId <> NULL) 
    or (i.PlayerNumberId <> NULL and PlayerNameId <> NULL)) 

    rollback transaction 
end 
0

прямая проверка ограничения:

ImageID is NULL and PlayerNameID is NULL and PlayerNumberID is NOT NULL 
or ImageID is NULL and PlayerNameID is NOT NULL and PlayerNumberID is NULL 
or ImageID is NOT NULL and PlayerNameID is NULL and PlayerNumberID is NULL 
Смежные вопросы