Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: alpachino98 en 26 Noviembre 2018, 21:59 pm



Título: Crear una relación en base de datos (sql oracle)
Publicado por: alpachino98 en 26 Noviembre 2018, 21:59 pm
Soy nueva en base de datos y tengo que crear una serie de tablas y sus relaciones. Lo primero que tengo que hacer son estas dos tablas y la relación que las une:
(https://i.imgur.com/3l3mDp2.png)

No entiendo muy bien donde tengo que colocar las foreign key, si en las tablas relacionadas o en la relación. Aquí pongo como lo he hecho yo que ha sido colocando una clave foránea con un nombre en la tabla relacionada y otra clave en la relación. No se muy bien como afecta que sea una relación 1,1 -> 1,n

Código:
CREATE TABLE MULTIUSOS ( 
    id_multiusos number,
    megafonia varchar(20),
    red varchar(5) default 'FALSE',   
    codigo number,
    nombre_salas varchar(50),
    capacidad number,
    tipo varchar(2),
   
    constraint CK_red_valor check (red ='TRUE' or red ='FALSE'),
    constraint multiusos_pk primary key (id_multiusos)
    );

CREATE TABLE RESERVAS (
    id_reserva number,
    fehca date,
    hora_ini date,
    hora_fin date,
    evento varchar(20),
    id_multiusos number,
    id_empleado number,
   
    constraint reservas_pk primary key (id_reserva),
    constraint multiusos_fk
        foreign key( id_multiusos)
            references MULTIUSOS(id_multiusos),
    constraint empleado_fk
        foreign key (id_empleado)
            references EMPLEADOS(id_empleado)
    );

CREATE TABLE RESERVAS_MULTIUSOS (
    id_reservas number,
    id_multiusos number,
   
    constraint rel_reservas_multiusos_fk
        foreign key (id_reservas)
            references RESERVAS(id_reserva),
    constraint rel_multiusos_reservas_fk
        foreign key(id_multiusos)
            references MULTIUSOS(id_multiusos)
    );


Si alguien puede sacarme de dudas :huh:...gracias.


Título: Re: Crear una relación en base de datos (sql oracle)
Publicado por: EdePC en 27 Noviembre 2018, 03:12 am
Saludos,

- Dependerá algo de la metodología y sintáxis que estés utilizando, yo lo haría así:

-- Multiusos (1,1) <=> Reservas (0,n), implica Cardinalidad máxima o mínima:
--- Un Multiusos puede tener como mínimo 0 Reservas
--- Un Multiusos puede tener como máximo n Reservas
--- Una Reserva puede tener como mínimo 1 Multiusos
--- Una Reserva puede tener como máximo 1 Multiusos

-- Se deduce una Relación 1 a muchos:
--- Multiusos (1:n) Reservas
--- Puede existir Multiusos sin necesidad de Reservas
--- Reservas DEPENDE de la existencia de Multiusos, entonces la clave foranea va en Reservas

Código
  1. CREATE TABLE Multiusos (
  2.  id_multiusos INTEGER PRIMARY KEY,
  3.  megafonia    VARCHAR(20),
  4.  red          VARCHAR(5) DEFAULT 'FALSE'
  5. )
  6.  
  7. CREATE TABLE Reservas (
  8.  id_reserva   INTEGER PRIMARY KEY,
  9.  id_multiusos INTEGER FOREIGN KEY REFERENCES Multiusos(id_multiusos),
  10.  fecha        DATE,
  11.  hora_ini     TIME,
  12.  hora_fin     TIME,
  13.  evento       VARCHAR(20)
  14. )

- Por lo tanto me parece que vas por buen camino.


Título: Re: Crear una relación en base de datos (sql oracle)
Publicado por: alpachino98 en 27 Noviembre 2018, 12:27 pm
- Dependerá algo de la metodología y sintáxis que estés utilizando, yo lo haría así:

-- Multiusos (1,1) <=> Reservas (0,n), implica Cardinalidad máxima o mínima:
--- Un Multiusos puede tener como mínimo 0 Reservas
--- Un Multiusos puede tener como máximo n Reservas
--- Una Reserva puede tener como mínimo 1 Multiusos
--- Una Reserva puede tener como máximo 1 Multiusos

-- Se deduce una Relación 1 a muchos:
--- Multiusos (1:n) Reservas
--- Puede existir Multiusos sin necesidad de Reservas
--- Reservas DEPENDE de la existencia de Multiusos, entonces la clave foranea va en Reservas


Muchas gracias.
Entonces entiendo que para una relación 1,1<->1,n no necesito una tabla de relación?
Es que he visto algunas tablas de relaciones. Supongo que se usaran para relaciones 1<->1.