Какая модель базы данных? - PullRequest
0 голосов
/ 20 января 2011

Я в основном реализовал реляционные СУБД, но я не думаю, что это подходит для следующего ... У меня есть набор из 10 ^ 4 относительно сложных «объектов», которые состоят из нумерации «частей»до 10 ^ 2.Детали собраны в «сборки».На объектах выполняются операции, чтобы установить шаблоны как для деталей, так и для сборок, и сравниваются с шаблонами, присутствующими в других объектах в базе данных.

Используя СУБД, я мог бы просто объединить «детали» в таблицу B,очень мало используется вне контекста (в отличие от номера элемента, например, в счете-фактуре) и связывает их с их родительскими «объектами» в таблице «A» или «сборками» в таблице C. Однако мне придется запустить SQL SELECTво всей этой таблице просто для «сопоставления» объектов, которые на самом деле являются просто последовательным подмножеством в таблице «B».

В качестве альтернативы, все они могут быть в одной таблице с полем ParentID;отсутствие которого указывает на «объект», а не «сборку» или «деталь».

Однако я думаю, что для каждого объекта можно настроить VIEWS для «индексации» таблицы как бы.Я не знаю, возможно ли или лучше всего использовать 10 000 представлений!

Есть ли еще одна модель, которую я должен изучить, которая может упорядочить данные более удобным способом?Эти данные будут представлять собой набор иерархических объектов, состоящих из «сборок» других «сборок» или атомарных «деталей».

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 3 ]

1 голос
/ 20 января 2011

Если я правильно читаю ваше описание вашей объектной модели, это звучит так:

  • 1-много частей в объекте
  • 1-много деталей в сборке

Звучит так, как будто вы изначально думали что-то вроде этого:

Assembly
  ID int

Object
  ID int

Part
  ID int

ObjectPart
   ObjectID 
   PartID

AssemblyPart
    AssemblyID
    PartID

После этого вы сможете найти детали для данной сборки:

 SELECT P.* 
 FROM Parts AS P 
 INNER JOIN AssemblyPart AS AP ON AP.PartID = P.ID
 WHERE AP.AssemblyID = @SomeAssemblyID

Я бы посоветовал хранить отдельные и отдельные сущности и избегать поля ParentID, которое бы определяло тип сущности каждой строки. Я согласен с вами, что просмотр для каждой сущности не будет хорошим / поддерживаемым способом. Вы хотели бы выбрать из представления с предложением WHERE на AssemblyID или AssemblyName.

Возможно, опубликуете быструю реляционную схему, которая, по вашему мнению, создаст вам проблемы, и описание ваших ожидаемых проблем?

0 голосов
/ 26 мая 2012

В дополнение к ответу Стивена, я работаю на Райму, и один из наших инженеров написал очень подробный пост о Модель сетевой базы данных , как она работает и чем отличается от реляционной модели.

0 голосов
/ 20 января 2011

Сетевая модель с RAIMA или Heirarchal с IBM IMS - единственные доступные опции (проприетарные). Так что это либо XML, как Zope, либо использование онлайн-методов для реализации сетевой модели с использованием RDBMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...