2011-09-21 1 views
0

Я боролся и искал решение об этом в течение нескольких дней, но я не могу найти «лучшие практики» или хорошие объяснения того, как добиться того, чего я хочу.Дизайн базы данных - Несколько типов объектов показаны иерархическими?

Допустим, у меня есть база данных, состоящая из следующих таблиц (всего лишь пример);

Customers (Fields: Id, CustomerName, Location) 

Products (Fields: Id, ProductName, ProductCode) 

Groups (Fields: Id, GroupName) 

Мне нужно связать их вместе, чтобы они отображались в Treeview. Например;

Customer1 
    | 
    |-Group1 
    | |-Product1 
    | |-Product2 
    | 
    |-Group2 
     |-Product2 
     |-Product3 
     |-Group3 
       | 
       |-Product1 
       |-Product4 

Как я уже сказал, это всего лишь пример. Реальное решение состоит из других типов.

Поскольку продукты могут возникать в нескольких местах, мне нужно создать «таблицу ссылок» для отображения иерархических данных.

Итак, я создал другую таблицу, похожую на это;

Id (int) 
ParentId (int) 
ObjectType (int) 
GroupId (int) 
ProductId (int) 
CustomerId (int) 

Причина поля ObjectType должен знать, в какую базу данных мне нужно проверить для элементов имя и т.д., чтобы отобразить в виде дерева.

Мой вопрос сейчас: Есть ли другой способ создать эту базу данных? Я разрабатываю в C# с использованием LINQ и т. Д.

ответ

0

из вашего примера, каждый уровень дерева должен быть новой таблицей ссылок.

Вы не показываете, повторяется ли группа 1 для более чем одного клиента, если также необходимо повторить содержимое группы1.? но я предполагаю, что содержимое группы 1 одинаково независимо от того, какие клиенты связаны.

, если вы действительно можете связать что-нибудь к чему-либо, то OBJECTTYPE это путь ... но вы бы что-то вроде:

parentId 
ParentObjectType 
childId 
childObjectType 
+0

Объект группа будет просто заполнитель (прямо сейчас), чтобы логически группировать продукты для лучшего обзора. У клиента могут быть разные цели, сайты или местоположения, которые мои пользователи будут группировать. Что я получу, чтобы иметь childId/childObjectType в моей таблице? Все должно быть намного проще, если бы я мог хранить объекты класса в базе данных :) – Peter