Реализация наличия [0,2] строк, но не более, с похожими данными

Я реализую базу данных доступа, используя MS Access 2016. Я пытаюсь создать таблицу с несколькими столбцами, где 2 из них являются комбинированным внешним ключом.

Теперь я хочу, чтобы каждое значение внешнего ключа можно было использовать максимум 2 раза в новой таблице. Если пользователь попытается использовать то же значение в третий раз, то программа должна выдать ошибку.

Больше нигде ответа на этот вопрос не нашел.

Original table: Field1  Field2
                  1        2
                  2        2
New table: Field1(FK) Field2(FK)PK Field3 PK
              1         2            3
              1         2            4
              1         2            5      <---- Generate error

ФК — внешний ключ

ПК — первичный ключ

EDIT1: я хочу уточнить, что я хочу, чтобы Field1 и Field2 в New Table имели необходимую функциональность.

EDIT2: Чтобы привести пример моей проблемы, у меня есть игра в баскетбол (Field1: StartingTime Field2: Stadium). Для этой игры мне нужно 2 команды. Поэтому у меня есть таблица GameTeams. Но не может быть более 2 команд, поэтому мне нужно это ограничение в 2. Другими словами, в каждой игре есть 2 команды. Надеюсь, это даст лучшее понимание.


person Diaco    schedule 19.12.2016    source источник
comment
Хм, это звучит как сомнительный дизайн таблицы или, по крайней мере, как проблема XY. Можете объяснить, зачем вам это нужно?   -  person Andre    schedule 19.12.2016
comment
И ваше использование PK сбивает с толку - первые две строки уже нарушают его.   -  person Andre    schedule 19.12.2016
comment
о, я сожалею об этом. 3, очевидно, должны быть разными   -  person Diaco    schedule 19.12.2016
comment
Дело в том, что эта таблица представляет что-то, что означает, что для каждой строки в исходной таблице есть [0,2] строк в новой таблице, у которых есть строка в исходной таблице в качестве внешнего ключа. Я просто хочу ограничить это до 2   -  person Diaco    schedule 19.12.2016
comment
ваша теория по-прежнему не работает, когда пользователь вводит field1 = 1, field2 = 1. Одна и та же команда не может конкурировать сама с собой? но действительная запись в вашем случае :) ;)   -  person Krish    schedule 19.12.2016
comment
Поле 3 – это команда.   -  person Diaco    schedule 19.12.2016


Ответы (1)


В Access 2010 и более поздних версиях вы можете достичь своей цели, используя сохраненный запрос, который подсчитывает строки, связанные с каждой парой (Поле1,Поле2)...

QueryDesign.png

... вместе с сообщением «До изменения» макрос данных в вашей таблице для проверки существующих связанных строк:

BeforeChange.png

person Gord Thompson    schedule 21.12.2016
comment
Спасибо за этот ответ. Я вообще не думал об использовании макросов. Он отлично работает с тем же синтаксисом даже в Access 2016. - person Diaco; 22.12.2016