domingo, 22 de mayo de 2011

Codigo Oracle AMIGOS Y CERVEZA

 SE CREA LA TABLA AMIGO. ENCABEZADO CON CREATE, LOS ATRIBUTOS Y SUS TIPOS. LA LINEA QUE DICE CONSTRAINT AMIGO ... SE SEÑALA IDAMIGO COMO LA PK
CREATE TABLE AMIGO
 (
   IDAMIGO NUMBER,
   NOMBRE VARCHAR2(30),
   APELLIDO VARCHAR2(30),
   TELEFONO NUMBER,
   EMAIL VARCHAR2(50),
   TWITTER VARCHAR2(30),
   FECHANACIMIENTO DATE,
   CONSTRAINT AMIGO_PK PRIMARY KEY(IDAMIGO) ENABLE
 );



 SE CREA LA TABLA CERVEZA CON SUS ATRIBUTOS Y PK.
CREATE TABLE CERVEZA
 (   
   IDCERVEZA NUMBER,
   NOMBRE VARCHAR2(20),
   MARCA VARCHAR2(10),
   CONSTRAINT CERVEZA_PK PRIMARY KEY (IDCERVEZA) ENABLE
 );
  
 SE CREA TABLA PRUEBA, CON ATRIBUTOS Y PRIMARY KEY. LAS DOS LINEAS QUE DICEN CONSTRAINT PRUEBA_FK ... SEÑALA LAS LLAVES FORANEAS (FK). DICEN QUE POR EJEMPLO, IDCERVEZA SERA LO MISMO QUE LA PK IDCERVEZA DE LA TABLA CERVEZA. MEDIANTE ESO SE UNEN LAS TABLAS AMIGO, PRUEBA Y CERVEZA.
CREATE TABLE  PRUEBA
 (   
   IDPRUEBA  NUMBER,
   IDAMIGO   NUMBER,
   IDCERVEZA NUMBER,
   CONSTRAINT PRUEBA_PK PRIMARY KEY (IDPRUEBA) ENABLE,
   CONSTRAINT PRUEBA_FK_AMIGO FOREIGN KEY (IDAMIGO) REFERENCES  AMIGO (IDAMIGO) ENABLE,
   CONSTRAINT PRUEBA_FK2_CERVEZA FOREIGN KEY (IDCERVEZA) REFERENCES  CERVEZA (IDCERVEZA) ENABLE
 );

 SE CREA LA TABLA BAR, CON SUS ATRIBUTOS Y PK.
CREATE TABLE BAR
 (
   IDBAR NUMBER,
   NOMBRE VARCHAR2(25),
   DIRECCION VARCHAR2(50),
   COMUNA VARCHAR(20),
   TELEFONO NUMBER,
   CONSTRAINT BAR_PK PRIMARY KEY(IDBAR) ENABLE
 );

 SE CREA TABLA FRECUENTA, CON ATRIBUTOS, PK Y 2 FK. CON ESTO UNEN AMIGO, FRECUENTA Y BAR. ADEMAS EN EL ULTIMO CONSTRAINT FRECUENTA_HORARIO ... SE USA COMO UNA VALIDACION. MECIONA QUE EL ATRIBUTO HORARIO SOLO PODRA RECIBIR LOS VALORES MAÑANA, TARDE, NOCHE O INDIFERENTE.
CREATE TABLE FRECUENTA
 (
   IDFRECUENTA NUMBER,
   IDAMIGO NUMBER,
   IDBAR NUMBER,
   HORARIO VARCHAR2(10),
   CONSTRAINT FRECUENTA_PK PRIMARY KEY(IDFRECUENTA) ENABLE,
   CONSTRAINT FRECUENTA_FK_AMIGO FOREIGN KEY (IDAMIGO) REFERENCES  AMIGO (IDAMIGO) ENABLE,
   CONSTRAINT FRECUENTA_FK2_BAR FOREIGN KEY (IDBAR) REFERENCES  BAR (IDBAR) ENABLE,
   CONSTRAINT FRECUENTA_HORARIO CHECK (HORARIO IN ('MAÑANA', 'TARDE', 'NOCHE', 'INDIFERENTE')) ENABLE
 );

 CREA TABLA SIRVE, CON SUS ATRIBUTOS, PK Y SUS 2 FK. SE CREA LA CONEXION BAR, SIRVE, CERVEZA.
CREATE TABLE SIRVE
 (
   IDSIRVE NUMBER,
   IDBAR NUMBER,
   IDCERVEZA NUMBER,
   CONSTRAINT SIRVE_PK PRIMARY KEY(IDSIRVE) ENABLE,
   CONSTRAINT SIRVE_FK_CERVEZA FOREIGN KEY (IDCERVEZA) REFERENCES  CERVEZA (IDCERVEZA) ENABLE,
   CONSTRAINT SIRVE_FK2_BAR FOREIGN KEY (IDBAR) REFERENCES  BAR (IDBAR) ENABLE
 );

 ACA SE POBLA LA TABLA AMIGO, ES DECIR, SE LE AGREGAN DATOS. EL BEGIN Y EL END HACEN QUE SE PUEDAN AGREGAR TODOS LOS DATOS DE UNA VEZ.
Begin
Insert into Amigo values (10, 'Pedro', 'Picapiedra', 5555555, 'ppicapiedra@gmail.com','@Picapiedra', '06/06/1966');
insert into Amigo Values (20, 'Rick', 'Wackeman', 932456765, 'rwackeman@hotmail.com', '@wackeman', '25/05/1960');
insert into Amigo Values (30, 'Jack', 'Bauer', 74859632, 'jbauer@ctu.org', '@bauer', '24/06/1970');
insert into Amigo Values (40, 'Chuck', 'Norris', 7777777, 'cnorris@dios.com', '@DonChuck', '07/07/1940');
End

SE POBLA LA TABLA CERVEZA.
BEGIN
insert into Cerveza values (10, 'Escudo', 'CCU');
insert into Cerveza values (20, 'Pale Ale', 'Kunstmann');
insert into Cerveza values (30, 'Bock', 'Kunstmann');
insert into Cerveza values (40, 'Cristal', 'CCU');
insert into Cerveza values (50, 'Baltica', 'CCU');
insert into Cerveza values (60, 'Heinecken', 'Heinecken');
insert into Cerveza values (70, 'Chimbombo', 'Cuneta');
END

SE POBLA LA TABLA PRUEBA
Begin
insert into prueba values (10, 10, 10);
insert into prueba values (11, 10, 20);
insert into prueba values (12, 10, 30);
insert into prueba values (13, 20, 10);
insert into prueba values (14, 20, 70);
insert into prueba values (15, 30, 40);
insert into prueba values (16, 30, 60);
insert into prueba values (17, 40, 70);
insert into prueba values (18, 40, 20);
END

SE POBLA LA TABLA BAR
BEGIN
insert into bar values (1, 'El Bar de Moe', 'Av. Siempre Viva 278', 'Springfield', 4884665);
insert into bar values (2, 'El Pobre Carlos', 'Av. Balmaceda 2487', 'Talagante', 8154879);
insert into bar values (3, 'Groops!', 'Downtown 200', 'Ciudad de York', 9905674);
insert into bar values (4, 'Atico', 'Santelices 669', 'Isla de Maipo', 8194596);
END

SE POBLA LA TABLA FRECUENTA
BEGIN
insert into frecuenta values (1, 10, 1, 'NOCHE');
insert into frecuenta values (2, 20, 1, 'MAÑANA');
insert into frecuenta values (3, 10, 2, 'NOCHE');
insert into frecuenta values (4, 10, 3, 'TARDE');
insert into frecuenta values (5, 30, 1, 'NOCHE');
insert into frecuenta values (6, 40, 1, 'TARDE');
insert into frecuenta values (7, 40, 3, 'MAÑANA');
insert into frecuenta values (8, 20, 4, 'NOCHE');
insert into frecuenta values (9, 40, 2, 'TARDE');
insert into frecuenta values (10, 30, 2, 'NOCHE');
END

SE POBLA LA TABLA SIRVE
BEGIN
insert into sirve values(30, 1, 10);
insert into sirve values(31, 2, 20);
insert into sirve values(32, 1, 10);
insert into sirve values(33, 2, 20);
insert into sirve values(34, 3, 60);
insert into sirve values(35, 3, 30);
insert into sirve values(36, 3, 20);
insert into sirve values(37, 4, 40);
insert into sirve values(38, 4, 60);
END

SELECT * FROM nombreTabla: DEVUELVE TODOS LOS REGISTROS (DATOS ALMACENADOS EN ATRIBUTOS) DE LA TABLA MENCIONADA
SELECT * FROM AMIGO
SELECT * FROM CERVEZA
SELECT * FROM PRUEBA
SELECT * FROM BAR
SELECT * FROM FRECUENTA
SELECT * FROM SIRVE

EN ESTA CONSULTA, SE ABREN LAS TABLAS AMIGO, CERVEZA Y PRUEBA, DONDE SE LE ASIGNAN ALIAS A, C Y P. SE DEVOLVERA SOLO EL NOMBRE Y EL APELLIDO DEL AMIGO. PRIMERO SE HACE EL JOIN, DONDE SE IGUALAN LAS ID DE UNA TABLA CON EL ID DE LA TABLA INTERMEDIA (EJ: IDAMIGO DE LA TABLA AMIGO CON IDAMIGO DE LA TABLA PRUEBA) . Y FINALMENTE SE ESCRIBE LA CONDICION. ESTA DICE QUE DEVUELVA EL NOMBRE Y APELLIDO DE LOS QUE HAN CONSUMIDO ESCUDO Y ADEMAS BOCK (SE HACE UNA INSTRUCCION ESPECIAL CON IN DONDE SOLO SE UTILIZA EL IDAMIGO PARA SABER LA SEGUNDA CERVEZA QUE BEBIO Y VOLVER A VERIFICAR).
SELECT A.NOMBRE, A.APELLIDO
FROM AMIGO A, CERVEZA C, PRUEBA P
WHERE A.IDAMIGO = P.IDAMIGO
      AND P.IDCERVEZA = C.IDCERVEZA
      AND C.NOMBRE = 'Escudo'
      AND A.IDAMIGO IN
      ( SELECT IDAMIGO
        FROM PRUEBA P, CERVEZA C
        WHERE C.IDCERVEZA = P.IDCERVEZA
              AND C.NOMBRE = 'Bock'
      );

VISTA: ESTA LINEA CREA UNA VISTA PARA SER OCUPADA DESPUES Y VER CAMBIOS. TAMBIEN PUEDE SER LLAMADA COMO SELECT * FROM VISTA SIEMPRE Y CUANDO SE HAYA COLOCADO ARRIBA EN UNA CONSULTA DEFINIDA.
CREATE VIEW VISTA

ESTA CONSULTA DICE QUE OCUPARA LAS TABLAS AMIGO, BAR, FRECUENTA, CERVEZA Y SIRVE. SOLO DEVOLVERA EL NOMBRE DEL AMIGO, NOMBRE DE LA CERVEZA, NOMBRE DEL BAR Y EL HORARIO (SIN CONDICION, VALIDACION O FILTRACION). SE HACEN LOS JOIN.
SELECT A.NOMBRE, C.NOMBRE, B.NOMBRE, HORARIO
FROM AMIGO A, BAR B, FRECUENTA F, CERVEZA C, SIRVE S
WHERE A.IDAMIGO = F.IDAMIGO
  AND F.IDBAR = B.IDBAR
  AND B.IDBAR = S.IDBAR
  AND S.IDCERVEZA = C.IDCERVEZA
 
USER_TABLES MUESTRA TODAS LA INFORMACION DE TODAS LAS TABLAS
SELECT * FROM USER_TABLES

ESTO DESCRIBE LA ESTRUCTURA DE LA TABLA CERVEZA
DESCRIBE CERVEZA

NAMASTE!!!

lunes, 2 de mayo de 2011

Formas Normales

Nuevamente, subimos el material usado para la Disertacion sobre: FORMAS NORMALES.

  • Normalizacion
  • Primera Forma Normal (1FN) + Ejemplo
  • Segunda Forma Normal (2FN) + Ejemplo
  • Tercera Forma Normal (3FN) + Ejemplo 
Descargable aca:  Formas Normales.ppsx


NAMASTE!