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
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.
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
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.
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.