Я пытаюсь найти чистое и эффективное решение этой проблемы, но как-то застрял.Иерархические данные из БД - присоединиться или не присоединиться
Общая информация:
-ASP.Net C# приложения (.Net 3.5)
-MS-SQL Server 2005
Это как данные выглядит следующим образом:
Категория -> Шаблон -> Instance
Категория может содержать несколько шаблонов.
Шаблон может содержать несколько экземпляров.
Существует класс для каждого из этих 3 и соответствующая таблица базы данных с большим количеством столбцов.
Я хочу загрузить полную категорию из базы данных в объект класса класса C#, включая все связанные с ним объекты шаблона и экземпляра.
У меня есть два варианта сейчас:
1) Соедините все 3 таблицы и сразу прочитайте все данные.
Поверхность: намного быстрее на стороне базы данных, вся информация в одном запросе.
Даунсайд: Я передаю много избыточных данных, потому что в каждой строке есть одна и та же категория и данные шаблона для каждого экземпляра.
Пример (упрощенный):
CategoryID | CategoryName | TemplateID | TemplateName | InstanceID | InstanceName
1 | FirstCategory | 1 | FirstTemplate | 1 | FirstInstance
1 | FirstCategory | 1 | FirstTemplate | 2 | SecondInstance
1 | FirstCategory | 1 | FirstTemplate | 3 | ThirdInstance
1 | FirstCategory | 1 | SecondTemplate | 4 | FourthInstance
2) я запрос каждую таблицу по себе, во-первых сбора данных категории, то соответствующие данные шаблона с категорией ID и так далее.
Поверхностный индекс: Интуитивно понятный подход, более простой в обращении на кодовой стороне, нет избыточных данных.
Даунсайд: Несколько запросов к серверу, возможно, медленнее.
Каков наилучший путь? У меня отсутствует опция?
Решение 1, похоже, имеет лучшую производительность, но для меня это выглядит «нечистым». Мне нужно было бы получить данные для категории из целой группы строк данных.
Если я выберу решение 1, это лучший способ получить данные категории и шаблона?
Прочтите его из первой строки данных и создайте новый экземпляр после изменения значения?
Что-то типа группировки?
Заранее благодарен! Эта проблема дает мне головные боли с тех пор.
Я смущен, если вы используете опцию №1, почему есть избыточные данные? Если вы организуете свои классы таким образом, чтобы внешняя категория класса содержала только идентификатор или первичный ключ для внутренних классов, то это не избыточные данные. С большинством ORM я использовал именно то, как это делается. –
Возможно, упрощенный пример - это пропуски: в опции № 1 полная категория и данные шаблона (а не только идентификатор и имя) будут включены в каждую строку. Таким образом, его довольно избыточный, чтобы иметь информацию несколько раз для каждого экземпляра, где он не меняется. – magnattic
Мне нужна информация для категорий и шаблонов, чтобы заполнить классы данными, но если я присоединяюсь как к опции № 1, у меня она есть несколько раз для каждой строки экземпляра. Пример: CategoryID | CategoryName | CategoryLocation | КатегорияXYZ | TemplateID | TemplateName | TemplateLocation | TemplateXYZ | InstanceID | InstanceName | ... – magnattic