SQL - Insercion de datos sql oracle

   
Vista:

Insercion de datos sql oracle

Publicado por oraclesql (1 intervención) el 02/04/2016 20:58:12
Hola amigos acudo a vuestra sabiduría para que alguien me ilumine en sql. El problema es el siguiente: tengo que crear una bd oracle a partir de estas tablas:
30iuwch
Creo las tablas con sus correspondientes restricciones, etc (dejo código, bastante sencillo).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE LOCALIDADES (
    ID_LOCALIDAD NUMBER(5) NOT NULL,
    NOMBRE VARCHAR2(50) NOT NULL,
    POBLACION NUMBER(8) NOT NULL,
    N_PROVINCIA NUMBER(2) NOT NULL,
    CONSTRAINT PK_LOCALIDADES PRIMARY KEY (ID_LOCALIDAD)
    );
CREATE TABLE PROVINCIAS (
    N_PROVINCIA NUMBER(2) NOT NULL,
    NOMBRE VARCHAR2(25) UNIQUE NOT NULL,
    SUPERFICIE NUMBER(5) NOT NULL,
    ID_CAPITAL NUMBER(5) UNIQUE NOT NULL,
    ID_COMUNIDAD NUMBER(2) NOT NULL,
    CONSTRAINT PK_PROVINCIAS PRIMARY KEY (N_PROVINCIA),
    CONSTRAINT FK_PROVINCIAS FOREIGN KEY (ID_CAPITAL) REFERENCES LOCALIDADES(ID_LOCALIDAD) ON DELETE CASCADE
    );
CREATE TABLE COMUNIDADES (
    ID_COMUNIDAD NUMBER(2) NOT NULL,
    NOMBRE VARCHAR2(50) UNIQUE NOT NULL,
    ID_CAPITAL NUMBER(5) UNIQUE NOT NULL,
    CONSTRAINT PK_COMUNIDADES PRIMARY KEY (ID_COMUNIDAD),
    CONSTRAINT FK_COMUNIDADES FOREIGN KEY (ID_CAPITAL) REFERENCES LOCALIDADES(ID_LOCALIDAD) ON DELETE CASCADE
    );
ALTER TABLE LOCALIDADES ADD CONSTRAINT FK_LOCALIDADES FOREIGN KEY (N_PROVINCIA) REFERENCES PROVINCIAS (N_PROVINCIA) ON DELETE CASCADE;
ALTER TABLE PROVINCIAS ADD CONSTRAINT FK_PROVINCIAS2 FOREIGN KEY (ID_COMUNIDAD) REFERENCES COMUNIDADES(ID_COMUNIDAD) ON DELETE CASCADE;
Y luego viene la hora de los INSERT que es donde tengo la duda del millón, y es como pongo ID_CAPITAL al insertar datos en la tabla COMUNIDADES si procede de la tabla LOCALIDADES que esta vacía, la solución que he tomado ha sido darle un "auto-increment" al igual que en ID_COMUNIDADES y lógicamente un alter table para desabilitar la constraint. Hasta ahí, todo "bien", ahora continuo con la inserción de las provincias y ya se complica todo, porque comparte clave ajena con COMUNIDADES y no puedo inventar, ilustro:
1
2
3
4
5
6
7
ALTER TABLE COMUNIDADES DISABLE CONSTRAINT FK_COMUNIDADES;
INSERT INTO COMUNIDADES (ID_COMUNIDAD, NOMBRE, ID_CAPITAL)
VALUES (1,'Madrid',1);
INSERT INTO PROVINCIAS (N_PROVINCIA, NOMBRE, SUPERFICIE, ID_CAPITAL, ID_COMUNIDAD)
VALUES (1, 'Madrid', 8028, 1, 1);
INSERT INTO PROVINCIAS (N_PROVINCIA, NOMBRE, SUPERFICIE, ID_COMUNIDAD)
VALUES (2, 'Almería', 1020, 2);
Me explico como un libro en llamas lo sé, pero a ver si alguien sabe como plantear el asunto, para que pueda realizar las inserciones de COMUNIDADES y PROVINCIAS. Una posible había pensado en modificar ambos campos y hacerlos NULL, sería correcto? Gracias por leer el tochaco si has llegado hasta aquí :elrisas: Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Insercion de datos sql oracle

Publicado por Gonzalo (21 intervenciones) el 03/04/2016 22:53:59
Estimad@:
Lo que tienes alli es lo que se denomina dependencia circular, que es un defecto de diseño de los peores. Jamás deben crearse dependencias de esa forma, porque además son totalmente irracionales.
Una dependencia donde A depende de B, B depende de C y C depende de A, no permite inserciones.
Es simplemente un error de análisis.

En tu caso lo que debes analizar es exactamente cómo es la definición de las entidades. DE allí parte todo.
Sin tener en claro qué es para tu país la diferencia entre una Localidad y una Comuna, y suponiendo que una comuna pueda pertenecer a una Localidad, tendrías:
1) Provincias.
2) Localidades, que pertenecen a las provincias.
3) Comuna, que pertenece a una Localidad.

En ese contexto, Localidad tiene la FK de Provincia, y Comuna la FK de Localidad. Nada más... La determinación de cual comuna pertenece a cual provincia es una dependencia transitiva a través de Localidad.

Ten en cuenta que ni Comuna necesita la FK de Provincia, ni tampoco Provincia necesita la FK de la localidad capital, ya que la Localidad podría tener perfectamente un campo que determine cual es si TIPO (localidad común o Capital)..

NOTA: A mi no me queda claro qué diferencia una comunidad de una localidad, porque en mi pais una comuna es una localidad que carece de gobierno autónomo y depende de otra mayor debido a la escasa cantidad de población que posee. Y una Localidad en ese contexto es una CIUDAD. Por su lado, en una provincia hay una división geográfica administrativa denominada Departamento, que es la que contiene las ciudades. Usualmente el departamento Capital es único y contiene solo a la Ciudad Capital de la provincia.
En una de las provincias, incluso, no hay división departamental, sino por partidos, y las ciudades no son autónomas. Pero tampoco hay comunas.

Como verás, para poder plantear correctamente la solución primero deberías describirnos cómo es la estructura geografico-politica de tu país.
No hay una estructura única para todo el universo de países...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar