POSC Specifications: Epicentre Version 3.0 | Logical Data Model |
Eliminate the many-to-many relationships between spatial subtypes.
CHANGE ERP_remove_spatial_many_to_many_ (*<REMARK>====vertex >- bind/be bounded by -< edge====*) ALTER ENTITY vertex; INVERSE ALTER edge AS bounded_first ALTER FOR AS first_boundary (*<DESC>Defines the edges for which this vertex forms the first boundary.*) (*<VERB>be the first boundary for*); ADD bounded_second : SET[0:?] OF edge FOR second_boundary (*<DESC>Defines the edges for which this vertex forms the second boundary.*) (*<VERB>be the second boundary for*); END_ENTITY; ALTER ENTITY edge; ALTER vertex AS first_boundary DROP AGGREGATE (*<DESC>The first of the two vertices which form the boundary of the edge.*) (*<VERB>have as first boundary*); ADD second_boundary : OPTIONAL vertex (*<DESC>The second of the two vertices which form the boundary of the edge.*) (*<VERB>have as second boundary*); ADD first_node : OPTIONAL ndt_edge_boundary_type (*<DESC>Asserts a topological relationship with the grid of the edge. FIRSTBOUND specifies that the first boundary is coincident with the first node of the grid. SECONDBOUND specifies that the second boundary is coincident with the first node of the grid.*); END_ENTITY; ADD TYPE ndt_edge_boundary_type = ENUMERATION OF ( firstbound (*<DESC>The first boundary of an edge.*), secondbound (*<DESC>The second boundary of an edge.*) ); (*<DESC>Lists the types of boundaries for an edge.*) END_TYPE; (*<REMARK>====ring >- be composed of/be a component of -< edge====*) ALTER ENTITY edge; ALTER ring ALTER INVERT ALTER TYPE AS ring_composition; END_ENTITY; ALTER ENTITY ring; INVERSE ALTER edge ALTER TYPE AS ring_composition; END_ENTITY; ADD ENTITY ring_composition SUBTYPE OF (association); (*<DESC>This association asserts that an edge is part of the composition of a ring.*) (*<CHANGE>Replaces ring >- be composed of/be a component of -< edge. Previously implemented as table RING_X.*) ring: ring (*<DESC>This is an edge which is a component part of the ring.*) (*<VERB>be a component of*); edge : edge (*<DESC>This is a ring for which the edge is a component part.*) (*<VERB>be composed of*); UNIQUE si : ring, edge; END_ENTITY; (*<REMARK>====ring >- bind/be bounded by -< face====*) ALTER ENTITY face; ALTER bounding_ring ALTER INVERT ALTER TYPE AS ring_face_binding; END_ENTITY; ALTER ENTITY ring; INVERSE ALTER face ALTER TYPE AS ring_face_binding ALTER FOR AS ring; END_ENTITY; ADD ENTITY ring_face_binding SUBTYPE OF (association); (*<DESC>This association asserts that a face is bound by a ring. A face may be externally bound by only one ring but may be internally bound by many rings.*) (*<CHANGE>Replaces ring >- bind/be bounded by -< face. Previously implemented as table FACE_BND_RING_X.*) ring: ring (*<DESC>This is a ring which bounds the face.*) (*<VERB>be bounded by*); face : face (*<DESC>This is a face which is being bound by the ring.*) (*<VERB>bind*); binding_type : ndt_spatial_binding_type (*<DESC>Describes the type of binding: internal_boundary or external_boundary.*); UNIQUE si : ring, face; END_ENTITY; ADD TYPE ndt_spatial_binding_type = ENUMERATION OF ( internal_boundary (*<DESC>The bound object is bounded internally. There can be many internal boundaries.*), external_boundary (*<DESC>The bound object is bounded externally. There can only be one external boundary.*) ); (*<DESC>Lists the types of bindings which are allowed between spatial objects of dimension greater than zero.*) END_TYPE; DROP ENTITY ref_shell_region_binding; ALTER ENTITY shell_region_binding; ALTER ref_shell_region_binding AS binding_type ALTER TYPE AS ndt_spatial_binding_type; END_ENTITY; (*<REMARK>====shell >- be composed of/be a component of -< face====*) ALTER ENTITY face; ALTER shell ALTER INVERT ALTER TYPE AS shell_composition; END_ENTITY; ALTER ENTITY shell; INVERSE ALTER face ALTER TYPE AS shell_composition; END_ENTITY; ADD ENTITY shell_composition SUBTYPE OF (association); (*<DESC>This association asserts that a face is part of the composition of a shell.*) (*<CHANGE>Replaces shell >- be composed of/be a component of -< face. Previously implemented as table SHELL_X.*) shell: shell (*<DESC>This is a shell for which the face is a component part.*) (*<VERB>be a component of*); face : face (*<DESC>This is a face which is a component part of the shell.*) (*<VERB>be composed of*); UNIQUE si : shell, face; END_ENTITY; END_CHANGE;