Я пытался придумать хороший шаблон проектирования для сопоставления данных, содержащихся в реляционных базах данных, с созданными мною бизнес-объектами, но я продолжаю бить стену.
Рассмотрим следующие таблицы:
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;
Это похоже на приличное решение? Может ли кто-нибудь предвидеть какие-либо проблемы с этим подходом?