Каковы преимущества и недостатки включения ключей «дедушка + родитель» в таблицу.
Например, если моя объектная модель выглядит следующим образом.(Значительно упрощенный, поэтому он не подходит для использования в иерархической рекурсивной таблице.)
a {aId, bCollection, ...}
b {bId, cCollection, ...}
c {cId, dCollection, ...}
d {dId}
На ум приходят две опции модели данных:
опция 1:
a {pkA, ...}
b {pkB, fkA, ...}
c {pkC, fkB, ...}
d {pkD, fkC, ...}
вариант 2:
a {pkA, ...}
b {pkB, fkA, ...}
c {pkC, fkB, fkA, ...}
d {pkD, fkC, fkB, fkA, ...}
Вариант 1 более нормализован, вставки и обновления будут проще, но я вижу, что запросы становятся довольно сложными, особенно со многими отношениями и / или составными ключами.
Вариант 2 усложняет вставки и обновления, но извлечение отчетов будет проще.Кроме того, база данных будет больше, но меня это не особо волнует, так как в любом случае она довольно мала.
Но это довольно незначительные проблемы по сравнению с проблемами, которые возникают у ORM-подобной структуры сущностей.Я склоняюсь к варианту 2, потому что я хотел бы получить доступ к внукам напрямую от родителя следующим образом:
Class A { id, bCollection, cCollection, dCollection, ... }
Class B { id, cCollection, dCollection, ... }
Class C { id, dCollection, ... }
Class D { id, ...}
Платформа сущностей 4.0 изящно обрабатывает эту ситуацию?Каковы плюсы и минусы двух вариантов?Есть ли другая альтернатива, которую я должен рассмотреть?
Или, проще говоря, как, черт возьми, этот гугл задает такой любопытный вопрос?в значительной степени к варианту A, но я знаю, что прочитал статью msdn, в которой подробно рассказывается, почему вариант B лучше.К сожалению, я не могу найти это.: (
Заранее спасибо за ваши мысли.