09/03/2013, 16:24
|
| | Fecha de Ingreso: diciembre-2011
Mensajes: 32
Antigüedad: 12 años, 11 meses Puntos: 0 | |
Claves Ajenas y primarias. Hola buenas, estoy algo liado con las claves primarias y ajenas.
Yo tengo entendido que cada tabla tiene que tener 1 clave primaria.
Y las claves ajenas son para relacionar las tablas.
Entonces yo que estoy estudiando esto, tengo dudas xddd..
Miren las claves primarias:
Código:
ALTER TABLE alojamiento
ADD CONSTRAINT alojamiento_Cod_Alojamiento_pk primary key(Cod_Alojamiento);
ALTER TABLE alservicio
ADD CONSTRAINT alservicio_Cod_Alojamiento_pk primary key(Cod_Alojamiento);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Num_cliente_pk primary key(Num_cliente);
ALTER TABLE contrato
ADD CONSTRAINT contrato_Num_contrato_pk primary key(Num_contrato);
ALTER TABLE empleados
ADD CONSTRAINT empleados_Cod_Empleado_pk primary key(Cod_Empleado);
ALTER TABLE transporte
ADD CONSTRAINT transporte_Cod_Transporte_pk primary key(Cod_Transporte);
ALTER TABLE tipotrans
ADD CONSTRAINT tipotrans_Cod_Transporte_pk primary key(Cod_Transporte);
Y estas son las ajenas:
Código:
ALTER TABLE clientes
ADD CONSTRAINT clientes_Num_cliente_fk foreign key (Num_cliente)
References contrato(Num_cliente);
ALTER TABLE empleados
ADD CONSTRAINT empleados_Cod_Empleado_fk foreign key (Cod_Empleado)
References contrato(Cod_Empleado);
ALTER TABLE contrato
ADD CONSTRAINT contrato_Num_contrato_fk foreign key (Num_contrato)
References transporte(Num_contrato);
ALTER TABLE contrato
ADD CONSTRAINT contrato_Num_contrato_fk foreign key (Num_contrato)
References alojamiento(Num_contrato);
ALTER TABLE alojamiento
ADD CONSTRAINT alojamiento_Cod_Alojamiento_fk foreign key (Cod_Alojamiento)
References alservicios(Cod_Alojamiento);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Cod_Alojamiento_fk foreign key (Cod_Alojamiento)
References alojamiento(Cod_Alojamiento);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Fecha_A_Inicio_fk foreign key (Fecha_A_Inicio)
References alojamiento(FechaInicio);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Fecha_A_Fin_fk foreign key (Fecha_A_Fin)
References alojamiento(FechaFin);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Cod_Transporte_fk foreign key (Cod_Transporte)
References transporte(Cod_Transporte);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Fecha_T_Inicio_fk foreign key (Fecha_T_Inicio)
References transporte(Fecha_Inicio);
ALTER TABLE clientes
ADD CONSTRAINT clientes_Fecha_T_Fin_fk foreign key (Fecha_T_Fin)
References transporte(Fecha_Fin);
Pero me da error ORA-02270.
¿Todas las relaciones tienen que tener 1 clave primaria? Si es asi, ¿Las relaciones con clave primaria son 1:1? ¿Como las hago 1:N? ¿Y las N:M?
Estructura de la bd por si interesa:
Código:
--CREATE_TABLE
CREATE TABLE alojamiento (
Cod_Alojamiento decimal(10,0) NOT NULL,
Num_Contrato decimal(10,0) DEFAULT NULL,
FechaInicio date DEFAULT NULL,
FechaFin date DEFAULT NULL,
Tipo_Habitación varchar(20) DEFAULT NULL,
Comida varchar(20) DEFAULT NULL);
CREATE TABLE alservicio (
Cod_Alojamiento decimal(10,0) DEFAULT NULL,
Tipo_Servicio varchar(20) DEFAULT NULL,
Fecha_Hora_Servicio date DEFAULT NULL);
CREATE TABLE clientes (
Num_cliente decimal(10,0) NOT NULL,
Nombre varchar(20) DEFAULT NULL,
Apellido varchar(20) DEFAULT NULL,
DNI varchar(20) DEFAULT NULL,
DetallesPago varchar(20) DEFAULT NULL,
Cod_Alojamiento decimal(10,0) DEFAULT NULL,
Fecha_A_Inicio date DEFAULT NULL,
Fecha_A_Fin date DEFAULT NULL,
Cod_Transporte decimal(10,0) DEFAULT NULL,
Fecha_T_Inicio date DEFAULT NULL,
Fecha_T_Fin date DEFAULT NULL);
CREATE TABLE contrato (
Num_contrato decimal(10,0) NOT NULL,
Num_cliente decimal(10,0) DEFAULT NULL,
Fecha_Realización date DEFAULT NULL,
Cod_Empleado decimal(10,0) DEFAULT NULL);
CREATE TABLE empleados (
Cod_Empleado decimal(10,0) NOT NULL,
Nombre varchar(20) DEFAULT NULL,
Apellidos varchar(20) DEFAULT NULL,
DNI varchar(20) DEFAULT NULL,
hiredate date DEFAULT NULL,
loc varchar(20) DEFAULT NULL);
CREATE TABLE tipotrans (
Cod_Transporte decimal(10,0) DEFAULT NULL,
Tipo varchar(20) DEFAULT NULL);
CREATE TABLE transporte (
Cod_Transporte decimal(10,0) NOT NULL,
Num_contrato decimal(10,0) DEFAULT NULL,
Fecha_Inicio date DEFAULT NULL,
Fecha_Fin date DEFAULT NULL);
Gracias, espero debate |