Определение условной логики в таблице базы данных - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть ClientLookupTable и LookupTable, как показано ниже.

![enter image description here

ClientLookupTable указывает, какие элементы поиска требуются дляклиент.Это легко сделать, так как я могу просто включить и выключить флаг isRequired.Однако мне нужно либо LookupTableId 19, либо 6 и 20. Я не уверен, как разработать таблицы базы данных для этого требования.

Данные в ClientLookupTable будут использованы другим клиентским приложением.Но нам нужно определить, что для конкретного клиента (3) от них требуется либо WID (19), либо ОБА SSN или DOB.

1 Ответ

1 голос
/ 23 апреля 2019

Вы можете добавить триггер или проверить ограничение к таблице.Это гарантирует, что данные соответствуют одному из условий.Для ограничения вам нужно определить пользовательскую функцию.

Однако я настоятельно не рекомендую это.Проблема с многострочными ограничениями состоит в том, что вы не можете добавить одну строку в таблицу.Это не будет соответствовать ограничению.Это может затруднить вставку новых строк и обновление существующих.

Одной из возможностей будет поворот столбцов:

id    clientId    needs_wid    needs_ssn    needsdob
139      3            1            0            0

Тогда сработает простое ограничение check:

add constraint chk_ClientLookupTable_required
    check ( (needs_wid = 1) or (needs_ssn = 1 and needsdob = 1) )

Я уверен, что вы помещаете данные в отдельные строки для большей гибкости.К сожалению, это теряет гибкость.Вы можете заменить столбцы JSON или XML, чтобы восстановить гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...