Crear una relación en base de datos (sql oracle)

Iniciado por alpachino98, 26 Noviembre 2018, 21:59 PM

0 Miembros y 1 Visitante están viendo este tema.

alpachino98

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:


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

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.

EdePC

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 (sql) [Seleccionar]
CREATE TABLE Multiusos (
  id_multiusos INTEGER PRIMARY KEY,
  megafonia    VARCHAR(20),
  red          VARCHAR(5) DEFAULT 'FALSE'
)

CREATE TABLE Reservas (
  id_reserva   INTEGER PRIMARY KEY,
  id_multiusos INTEGER FOREIGN KEY REFERENCES Multiusos(id_multiusos),
  fecha        DATE,
  hora_ini     TIME,
  hora_fin     TIME,
  evento       VARCHAR(20)
)


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

alpachino98

Cita de: EdePC en 27 Noviembre 2018, 03:12 AM
- 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.