Ссылка на объект из столбца в другой таблице - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть следующая объектная модель:

class ObjectA{
    public string Description {get;set;}
}

class ObjectB{
    public string Description {get;set;}
    public ObjectA A {get;set;}
}

class ObjectC{
    public string Description {get;set;}
    public ObjectB B {get;set;}
}

class ObjectD{
    public string Description {get;set;}
    public ObjectC C {get;set;}
    public ObjectA A {get;set;}
}

Мои таблицы таковы:

A: ID (int), ОПИСАНИЕ (строка)

B: ID (int), ОПИСАНИЕ (строка), A_ID (int)

C: ID (int), ОПИСАНИЕ (строка), B_ID (int)

D: ID (int), ОПИСАНИЕ (строка), C_ID (int), A_ID (int)

В таблице D A_ID - это внешний ключ первичного ключа таблицы A. Первоначально это было сделано для того, чтобы вы могли легко получить доступ к ObjectA из ObjectD: ObjectD.A. Это приводит к необходимости добавления идентификатора из таблицы A в каждую таблицу, которая хочет получить доступ к ObjectA, таким образом, нормализуя базу данных (представьте, что у вас есть ObjectE и ObjectF, к которым все хотят легко получить доступ ObjectA). В этом случае ObjectB всегда будет иметь ссылку на ObjectA.

Я хотел бы избавиться от ссылки на A_ID во всех моих таблицах, но я хочу иметь возможность легко получить доступ к ObjectA из моих классов. Я знаю, что могу сделать ObjectD.ObjectC.ObjectB.ObjectA, чтобы получить ObjectA, когда это необходимо, но это, кажется, лишает цели ленивой загрузки моих объектов.

Как я могу сопоставить свой ObjectD, чтобы иметь прямой доступ к ObjectA без идентификатора ObjectA в таблице ObjectD?

Примечание: Я использую файлы hbm / xml для сопоставления своих классов.

1 Ответ

1 голос
/ 05 апреля 2011

Мне кажется, что вы либо живете с избыточными данными по соображениям производительности, либо нет.Я не могу представить себе третий вариант.(Но есть лучшие умы NHibernate, которые могут исправить это представление.)

Если чтение этих объектов намного выше, чем записи, и сценарии использования требуют доступа к ObjectA большую часть времени, когда вы работаетес ObjectD тогда избыточность в порядке.В противном случае подход ObjectD.CBA, на который вы ссылаетесь, станет более привлекательным.

...