Моя задача - создать простую базу данных для хранения информации об ИТ-инфраструктуре на моей работе.
Я очень мало знаю о базах данных, но это не критично, это будет использоваться только моей командой. Я не могу вдаваться в подробности, поскольку они являются конфиденциальными, а также несколько техническими, поэтому я воспользуюсь простой аналогией.
Скажем, мне нужно создать базу данных, содержащую информацию о различных животных в приюте для животных. Для целей аналогии каждое животное может легко хранить всю свою информацию в одной таблице без избыточности. Поля для этой таблицы могут быть, скажем,
ANIMAL_ID, ANIMAL_NAME, SPECIES, NUMBER_LEGS, NUMBER_TOES...
(терпите меня здесь).
Теперь предположим, что это укрытие хранит только two species, dogs and birds
. Очевидно, вы можете ограничить NUMBER_LEGS
приемом значений только от 0-4
. Тем не менее,
у птиц они никогда не будут иметь более двух ног .
Точно так же у птицы с одной ногой (другая была откушена собакой) было бы максимум 3 пальца, а не шесть обычных (тогда как у собаки могло быть что угодно от 1 до 20 пальцев). ) . * * тысяча двадцать-одна
Я планирую установить ограничение на уровне приложения (или даже презентации) программы, которая будет иметь доступ к этим данным. Это примет форму дерева решений
(например, choose animal, then choose number of legs, then number toes, etc
). Тем не менее, мне интересно, если:
A) Если типично применять эти ограничения на уровне данных, чтобы база данных не могла содержать, скажем,
птица с тремя ногами или трехногая собака с 20 пальцами .
B) Если A истинно, как бы я поступил в общей реляционной базе данных?
(Обратите внимание, что хотя число пальцев ног и количество когтей являются числовыми полями, в реальной ситуации это не всегда верно. Мне может понадобиться набор определенного атрибута (скажем, ANIMAL_COLOUR
), где возможные значения BLACK, BLUE, RED, PURPLE, BRINDLE
и т. Д. Но тогда СОБАКА не может иметь ЦВЕТОВОГО значения PURPLE , в то время как BIRD может быть PURPLE или BLUE, но не BRINDLE .)