Я пытался придумать хороший шаблон проектирования для сопоставления данных, содержащихся в реляционных базах данных, с бизнес-объектами, которые я создал, но я продолжаю упираться в стену.
Рассмотрим следующие таблицы:
TYPE: typeid, description
USER: userid, username, usertypeid->TYPE.typeid, imageid->IMAGE.imageid
IMAGE: imageid, location, imagetypeid->TYPE.typeid
Я хочу собрать всю информацию о конкретном пользователе. Создать запрос для этого не так уж сложно.
SELECT u.*, ut.*, i.*, it.* FROM user u
INNER JOIN type ut ON ut.typeid = u.usertypeid
INNER JOIN image i ON i.imageid = u.imageid
INNER JOIN type it ON it.typeid = i.imagetypeid
WHERE u.userid = @userid
Проблема в том, что имена полей конфликтуют, и тогда я вынужден использовать псевдоним для каждого отдельного поля, что очень быстро выходит из-под контроля.
Есть ли у кого-нибудь достойный шаблон дизайна для такого рода вещей?
Я думал о получении нескольких результатов из одной хранимой процедуры, а затем об использовании набора данных для итерации каждой из них, но меня беспокоит, что некоторые проблемы с производительностью могут укусить меня позже. Например, вместо приведенного выше запроса что-то вроде:
SELECT u.*, t.* FROM user u
INNER JOIN type t ON t.typeid = u.usertypeid
WHERE u.userid = @userid;
SELECT i.*, t.* FROM image i
INNER JOIN type t ON t.typeid = i.imagetypeid
INNER JOIN user u ON u.imageid = i.imageid
WHERE u.userid = @userid;
Это кажется достойным решением? Может ли кто-нибудь предвидеть проблемы с этим подходом?