Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Error de Modelo de Tablas

Estas en el tema de Error de Modelo de Tablas en el foro de Oracle en Foros del Web. Buenas, Tengo un ligero problema que me está molestando desde haceya un tiempo. Pero mas que nada es de modelo conceptual. Es correcto poner una ...
  #1 (permalink)  
Antiguo 16/06/2012, 11:58
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Error de Modelo de Tablas

Buenas, Tengo un ligero problema que me está molestando desde haceya un tiempo. Pero mas que nada es de modelo conceptual.

Es correcto poner una Tabla Nub que tenga su propia Primary Key?

Porque en oracle inserto una fila repitiendo las 2 FK, y estas no me las acepta. Esa es la gracia de haber puesto una PK en el Nub, para poder establecer varias relaciones sobre 2 FK.
  #2 (permalink)  
Antiguo 20/06/2012, 17:06
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Error de Modelo de Tablas

Para darte una respuesta más concreta tendrías que postear el modelo, de todos modos, en la mayoría de los casos no es necesario agregar una columna como PK ya que la combinación de columnas FKs es suficiente para identificar cada fila como única, por ejemplo, un modelo que requiera almacenar la cantidad y productos disponible en cada tienda tendrías las tablas:

Código:
create table Tienda (id int);
alter table Tienda add constraint pk_tienda primary key (id);

create table Producto (id int);
alter table Producto add constraint pk_producto primary key (id);

create table ProductoPorTienda (idTienda int, idProducto int, cantidad int);
alter table ProductoPorTienda add constraint fk_tienda 
 foreign key (idTienda) references Tienda(id);
alter table ProductoPorTienda add constraint fk_producto 
 foreign key (idProducto) references Producto(id);
create unique index ind_producto_tienda on 
 ProductoPorTienda (idTienda, idProducto);
Donde las filas de la tabla ProductoPorTienda se identifican por el par IdTienda,IdProducto.

Saludos
  #3 (permalink)  
Antiguo 22/06/2012, 08:13
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Error de Modelo de Tablas

Este es el modelo del Nub

Código SQL:
Ver original
  1. (
  2.    ID_S                 INTEGER              NOT NULL,
  3.    NRC_R                INTEGER              NOT NULL,
  4.    CLASE_C              INTEGER              NOT NULL,
  5.    HORA_I               TIMESTAMP,
  6.    HORA_T               TIMESTAMP,
  7.    CONSTRAINT PK_CLASE PRIMARY KEY (ID_S, NRC_R)
  8. );
Pero igual, se repiten las relaciones entre las dos tablas, en este caso las tablas son: Sala_de_Clases y Ramo, se pueden realizar varias Clases de un Ramo en una misma Sala, por ello necesitaba una PK en la Tabla, pero aun así Oracle no permite que se repitan dichas relaciones, de ahí que no se que hacer.
  #4 (permalink)  
Antiguo 22/06/2012, 16:18
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Error de Modelo de Tablas

El problema está en que la relación es ternaria, es decir, se define por los atributos Sala, Ramo y Horario, en estos casos, dependiendo del grado de normalización, tienes dos opciones:

Código:
create table Sala (idSala pk, ubicación varchar, etc..);
create table Ramo (idRamo pk, temario varchar, etc..);
create table Horario (idHorario pk, hora_inicio date, etc..);

create table Clases (idSala, IdRamo, IdHorario, etc..);
alter table Clases add constraint pk_clases 
 primary key (idSala, IdRamo, IdHorario);
o bien

Código:
create table Sala (idSala pk, ubicación varchar, etc..);
create table Ramo (idRamo pk, temario varchar, etc..);

create table Clases (idSala, IdRamo, hora_inicio, etc..);
alter table Clases add constraint pk_clases 
 primary key (idSala, IdRamo, hora_inicio);
Saludos

Etiquetas: modelo, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:37.