Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2013, 16:24
minatohd
 
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