Sei sulla pagina 1di 5

4.

2 Relationship Between Spatial Levels







Relacin entre los niveles espaciales

Una relacin entre los niveles forman una
jerarqua
corresponde a una relacin binaria en el
modelo entidad relacion.
Por lo tanto, esta relacin se puede
representar en la
O modelo utilizando la cartografa tradicional
para el binario
-muchos a-uno relaciones. Para ello es
necesario incluir
en la tabla creada para el nivel secundario un
atributo
para la representacin de una clave primaria.
Figura 1 incluye la jerarqua espacial ubicacin
Geo
que contiene el nivel del Estado y del
Condado.
Puesto que ya hemos creado una tabla para el
Estado
nivel, al lado definimos una tabla para el nivel
de Condado:

Geometry mdsys.sdo geometry,
Name varchar2(25), Population number(10),
Area number, StateRef ref StateType);
create table County of CountyType (
StateRef NOT NULL,
constraint CountyPK primary key (Name),
constraint CountyFK foreign key (StateRef)
references State);

El objeto CountyType incluye una referencia
(ref) tipo
que puntero a la fila correspondiente en la
tabla de estado.
De esta manera, el enfoque o sustituye
valuebased
se une con acceso directo a las filas
relacionadas utilizando
los identificadores. Adems, no permitiendo
que el atributo
StateRef tener valores nulos y referencial
hacer cumplir
integridad limita asegurar que cada miembro
del condado
ha asignado un miembro de estado vlido.
Sin embargo, para insertar
datos en la tabla del Condado, los sustitutos
de la
miembros estatales correspondientes deben
ser conocidos. a
facilitar esta operacin se crea una vista que
permite a
introducir un nombre de estado en lugar de
un sustituto del Estado:

create view CountyView (Geometry, Name,
Population, Area, StateName) as
select C.Geometry, C.Name,
C.Population, C.Area, S.Name
from County C, State S
where C.StateRef = ref(S);

Desde las vistas definidas en dos tablas no se
pueden actualizar,
para insertar datos en la tabla usando el
Condado
CountyView, un lugar de gatillo deben
crearse;
que realiza acciones en lugar de la operacin
especificadas
en el gatillo.
Adems, las relaciones topolgicas entre
espacial
niveles forman una jerarqua tambin deben
ser considerados
durante la aplicacin para evitar la inclusin
de
datos incorrectos y para indicar qu tipo de
agregacin
procedimientos deben ser desarrollados. Dos
soluciones
se puede proponer: (1) Restricciones en la
geometra de
el miembro de nio durante la operacin de
insercin o (2)
verificar las relaciones topolgicas entre lo
geomtrico
unin de las extensiones espaciales de
miembros secundarios y
la extensin espacial de su padre miembro
asociado,
despus de la insercin de todos los
miembros secundarios.
La primera solucin requiere la verificacin
de la
relacin topolgica entre extensiones
espaciales de un
condado y un miembros del estado:
create or replace trigger CountySpaIns instead of
insert on CountySpaView for each row
declare StGeometry State.Geometry%Type;
begin select S.Geometry into StGeometry
from State S where S.Name = :new.StateName;
if SQL%found then
if sdo geom.relate(StGeometry,anyinteract,
:new.Geometry,0.005) = TRUE then
insert into County select :new.Geometry,
:new.Name, :new.Population; :new.Area, ref(S)
from State S where S.name = :new.StateName;
else raise application error(-2002, Invalid
Top. Rel.); end if;
else raise raise application error(-2000,
Invalid State Name: jj :new.StateName); end if;
end;
El disparador plantea errores si el nombre del
estado no es vlido o
si la geometra de un miembro de condado es
disjunta de
la geometra de su estado miembro
correspondiente. De lo contrario,
que inserta los nuevos datos en la tabla
Condado.
En el ejemplo, para comprobar las relaciones
topolgicas que
utilizar la funcin geom.relate sdo con una
'anyinteract'
mscara, que acepta cualquier relaciones
topolgicas pero
disjuntos entre padres miembros infantil y.
Sin embargo,
una relacin topolgica especfico se puede
utilizar en lugar
de anyinteract, por ejemplo, cubre.
En la segunda solucin nos permitimos incluir
hijo
miembros sin la activacin de un lugar de
disparo. Despus
todos los miembros secundarios se insertan,
la verificacin
de la relacin topolgica entre el geomtrica
unin de las extensiones espaciales de
miembros secundarios y
la extensin espacial de su padre miembro
asociado es
realizado. Se da un ejemplo de esta
verificacin
siguiente. En primer lugar, se define una
funcin que recibe un estado
nombrar y devuelve 1 si la extensin espacial
de un hecho
Estado miembro es igual a la unin
geomtrica de la
extensiones espaciales de sus miembros
County:
create or replace function ChildrenWithinParent
(StateName State.Name%Type) return Number is
StName State.Name%type;
begin select S1.Name into StName
from State S1, (select S2.Name as SName,
sdo aggr union(sdoaggrtype(C.Geometry, 0.005))
as Geometry from County C , State S2
where C.StateRef = ref(S2)
group by S2.Name ) GU
where S1.Name = StateName and GU.SName =
S1.Name and sdo geom.relate(S1.Geometry, equal,
GU.Geometry, 0.005)= equal;
if SQL%found then return 1; else return 0; end if;
end;

Utilizamos la funcin de unin aggr sdo, que
devuelve un
objeto espacial representada como la unin
geomtrica de
los objetos especificados espaciales, por
ejemplo, los miembros del condado.
Esta funcin funciona de manera similar a las
funciones de agregado
utilizado para los datos no espaciales, es
decir, cuando el grupo de
clusula est incluida y se selecciona la
funcin especfica
(por ejemplo, suma) con la diferencia de que
se refiere a espacial
datos. La instruccin de seleccin en la
clusula from, crea
una tabla temporal GU con dos atributos
SName y
Geometra. Esta ltima es la unin
geomtrica de los condados
agrupados por el nombre del estado. A
continuacin, se utiliza esta tabla
en el segundo, donde la declaracin para
probar la igualdad de
relacin topolgica.
La funcin ChildrenWithinParent puede ser
llamado
para un estado especfico o para todos los
estados. A continuacin, se muestra un
ejemplo de esta convocatoria mostrando un
mensaje en lugar de
tomar alguna accin especfica:
declare StName State.Name%type;
cursor RetrieveState is
select S.Name from State S;
begin open RetrieveState;
loop fetch RetrieveState into StName;
exit when RetrieveState%notfound;
if (ChildrenWithinParent (StName) = 1) then
dbms output.put line(StName jj
is totally covered by its counties);
else dbms output.put line(StName jj
is not totally covered by its counties);
end if; end loop;
close RetrieveState;
end;

Potrebbero piacerti anche