Re: Help with complex db design concepts
Date: 29 May 2002 17:25:16 -0700
Message-ID: <a6e74506.0205291625.7be061bd_at_posting.google.com>
> Consider a database where my tables represent spatial entities... > ...associate documents with one or more of these entities > Users will need to search all documents, > as well as search for documents associated with spatial objects.
This is an excellent problem to demonstrate the advantages of an oodb which can be:
- Much simpler. Would someone like to model some representative data?
- Much faster. Would someone like to perform a benchmark?
- More generic. Would someone like to compare the ability of algorithms to survive schema changes and addition/deletion of entity types?
In rdb solution1 below, problems come up in joining T_EntityDocMap with appropriate T_EntityX. If you add/delete a T_EntityX, the sql will need tweaking.
T_Doc
T_Entity1
T_Entity2
...
T_EntityX
T_EntityDocMap
DocId
EntityTableId
EntityId
In rdb solution2 below, problems come in joining T_Entity with appropriate T_EntityXProps. If you add/delete T_EntityXProps, the sql will need tweaking.
T_Doc
T_Entity
T_Entity1Props
EntityId
...
T_EntityXProps
EntityId
T_EntityDocMap
DocId
EntityId
Below is a solution using XDb, a simple oodb (www.xdb1.com).
Note:
"." is a property.
"[]" is class of object.
-> is a reference to an object.
A property can have multiple values.
Example Classes:
Note SpEntity is the ancestor class of all other Spacial Entity
Classes
which allows generic queries shown below.
Doc
SpEntity
City [SpEntity]
.Doc
Road [SpEntity]
.Doc
Building [SpEntity]
.Doc
UtilPole [SpEntity]
.Doc
Lake [SpEntity]
.Doc
Pond [SpEntity]
.Doc
River [SpEntity]
.Doc
Stream [SpEntity]
.Doc
Etc [SpEntity]
.Doc
Example Instances
DocFolder
Doc1
Doc2
Doc3
...
DocX
City1
.Doc
->Doc1
Road1
.Doc
->Doc2
BldgFolder
Bldg1 .Doc ->Doc1 ->Doc3 Bldg2 .Doc ->Doc6 ->Doc9 ->Doc8 PoleFolder Pole1 .Doc ->Doc6 Pole2 .Doc ->Doc7 ->Doc8 Pond1 .Doc ->Doc4 ->Doc5
Example Object Queries (www.xdb1.com/HowTo/CreateQuerySimple.asp)
Query - Find where Doc7 is referenced within City1. Type
Select
SearchMode
Instances ->Doc7 Criteria AncestPar ->City1 ObjectType ->Ref
Query - Find in City1, SpEntity instances whose property Doc is Doc7.
Type
Select
SearchMode
Instances ->SpEntity Criteria AncestPar ->City1 Property .Doc = Doc7
The above object queries will survive schema changes and addition/deletion of entity types (ie Bldg, Pond). Received on Thu May 30 2002 - 02:25:16 CEST