То, что вы узнали, это не просто учеба. Но да это как утопия Платона временами . Это идеальное состояние вашей базы данных, идеальный дизайн. Но этот идеальный дизайн не всегда возможен.
Ограничения должны быть как можно ближе к данным БД. Подумайте об этом таким образом. Что если вы написали свои ограничения в коде, а затем захотели перейти на другой язык / платформу, и в одном из ваших ограничений возникла ошибка? Это было бы катастрофично. Такие вещи, как PK, FK, ограничения и т. Д. Широко используются. Они используются уже более 30 лет. Таким образом, они не мусор, но в определенных сценариях они просто не поддаются управлению. Например, если вы Google, вы не можете просто полагаться на реляционную модель, которая дает ответы в миллисекундах.
Таким образом, исходя из таких требований, как скорость и стабильность, мы иногда дублируем данные, не используем PK, не устанавливаем отношения и т. Д. Но только когда ищем что-то конкретное AND когда мы знаем, что мы потеряем, делая это таким образом.
В конце концов, реляционная модель - это всего лишь модель. Это способ представления вещей. Очень успешный способ, но это не находка, поэтому в некоторых случаях он должен быть скомпрометирован.