Я понимаю, что во многих случаях установка «Нет» может показаться не такой уж плохой. Однако я хочу использовать значения в этой конкретной таблице поиска (несколько тысяч строк) в другой таблице, которая содержит несколько необнуляемых полей, которые относятся непосредственно к данным, поступающим из таблицы поиска.
Реальный сценарий:
Таблица поиска представляет собой список общих названий лекарств и содержит коды для присоединения к другим базам данных, отличным от нашего приложения.
У нас есть таблица рецептов, в которой хранятся значения DrugId, OrderId (FK), частота, дозировка и т. д., которые в настоящее время не могут быть обнулены.
В некоторых сценариях требуется информация о рецепте для заказа, поэтому решить проблему просто за счет отсутствия записи (и каких-либо других средств отслеживания) будет недостаточно — нам нужно знать, почему рецепты не введены и не введены. быть в состоянии повторно заполнить правильную причину при просмотре данных на более позднем этапе.
Одна из идей состоит в том, чтобы добавить «Нет» как часть справочной таблицы «Лекарства», которая формирует основу для этого вопроса. Я беспокоюсь о таком подходе по нескольким причинам:
- кажется, что в каждом сценарии, когда мы хотим использовать данные, мы очень помним об этом (с парой незначительных исключений, поскольку это внутреннее соединение в сторонней базе данных).
- Это кажется очень неочевидным для всех, кто присоединяется к проекту (не говоря уже о занозе в заднице), и должно быть однозначно протестировано. Может быть, делать это только с «Нет» не так уж и плохо, но как насчет того, чтобы добавить в микс «Отклонено» или «Не знаю»? Теперь в нашей справочной таблице есть 3 неочевидных исключения, которые должны учитываться КАЖДЫЙ РАЗ, когда осуществляется доступ к данным.
- Либо мы делаем текущие обязательные поля обнуляемыми, либо вставляем в них фиктивные данные.
Другие идеи для решения этого сценария:
добавить в заказ новый столбец с такими параметрами, как «есть рецепты», «отклонено», «нет рецептов». Это нежелательно, поскольку десятки тысяч строк будут «пустыми», но в остальном это не так уж плохо.
создайте новую таблицу для регистрации только «исключительных» случаев, таких как «нет» или «не знаю», когда поле обязательно. На данный момент это то, что мне нравится больше всего, поскольку оно создает очень очевидные исключительные случаи, которые необходимо учитывать. Недостатком, конечно же, является новая таблица (отношение один-ноль) с очень небольшим количеством столбцов. Кажется, что это будет самая простая форма данных для повторного заполнения пользовательского интерфейса.
Мысли сообщества SO?