Это слишком долго для комментария.
Во-первых, я предполагаю, что столбец в C
будет называться D
, а не A
.
Во-вторых, вынарушая один из принципов нормализации.Значение D
хранится в двух местах (в обеих таблицах A
и C
), но, согласно вашему описанию, это действительно означает одно.
То, что вы предлагаете, является существенным осложнением длямодель данных.Совсем другое дело гарантировать, что D
, на который ссылается A
, соответствует D
.Осуществить это сложно.Нарушения становятся ошибкой данных.
Что касается производительности, соединения по первичным ключам обычно довольно быстрые.Цепочки таких объединений, как правило, не являются узким местом производительности.
Что касается технического обслуживания, то в итоге вы получите совершенно разные способы представления одного и того же набора результатов.Это может усложнить отладку кода.
Реляционные базы данных очень гибкие, и они определенно поддерживают такие конструкции.В некоторых случаях такой подход может оказаться полезным (например, если существует параллельная база данных, в которой ключи разделения на таблицах находятся в разных столбцах).Однако я бы не назвал это лучшей практикой или обычно рекомендуемой.