Ненулевые внешние ключи как стандарт базы данных

StackOverflow https://stackoverflow.com/questions/1759951

Вопрос

Предыстория:сегодня при использовании служб SQL Server Reporting Services возникла проблема.Похоже, что раскрывающиеся параметры SSRS в средстве просмотра отчетов не позволяют вам указать параметр (null), чтобы вы могли увидеть отчет, где этот параметр равен null.По сути, таблица A - это таблица, ссылающаяся на таблицу B с возможностью обнуления;поскольку отчет использует таблицу B для заполнения выпадающего списка, в нем нет значений null для отображения в качестве опции, и, следовательно, вы не можете выбрать все A, которые имеют значение null B.

Мой настоящий вопрос проистекает из потенциальной рефлекторной реакции на вышеупомянутую проблему со стороны руководства, которому я отвечаю.Когда я объяснил, что происходит, она выдала новое предписание о том, что все внешние ключи должны быть ненулевыми и что у каждого объекта должна быть вставлена запись "по умолчанию", новый стандарт, по-видимому, для решения этой проблемы в инструменте отчетности.В принципе, если у вас есть таблица Cat, то Cat.Owner никогда не должен быть равен null, но вместо этого должен ссылаться на запись по умолчанию в таблице Person, персону "по умолчанию".

Хотя это может помочь решить проблему SSRS, это может повредить разработке / обслуживанию служб и приложений, использующих базу данных, поскольку теперь им придется не только учитывать нули (которые были разрешены до этого момента), но также искать и правильно использовать запись "по умолчанию".Я думал о том, чтобы попытаться отговорить ее от выполнения этого мандата, но я хотел бы почерпнуть некоторую информацию от опытных людей, прежде чем решусь на это.

Может ли кто-нибудь взвесить, чему это может помочь или навредить?

У кого-нибудь это было в качестве стандарта базы данных?Есть какие-либо проблемы, связанные с разработкой или иные, на которые я должен обратить внимание?

Это было полезно?

Решение

НУЛЕВЫЕ поля означают никакой ценности.

Так что логично и правильно заполнять недостающее отношение нулями.

Я видел, иногда, в некоторых особых случаях, использование запись по умолчанию как описано в вопросе.Но это был "особый случай", и использовалось "иногда".

ИМХО, навязывать эту политику в качестве стандарта разработки БД просто глупо, некорректно и потенциально опасно.Я не буду вдаваться во все возможные осложнения, возникающие в связи с таким замыслом:Я думаю, вы уже представляете, что бы это значило.

Другие советы

Хотя, если КОШКА является OWNED_CAT, то у нее должен быть ЧЕЛОВЕК в качестве владельца, если она заброшена, ее НЕ должно быть в этой таблице.

Однако, если КОШКА является ANY_CAT (с владельцем / без владельца), то эта брошенная КОШКА не должна ассоциироваться ни с каким ЧЕЛОВЕКОМ.

На мой взгляд, создание фиктивной записи или записи по умолчанию в таблице PERSON для целей отчетности имеет бизнес-смысл (для вашего менеджера), но я не чувствую себя "правильным" по этому поводу.

Не могу предложить вам много, всего лишь свои 2 цента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top