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

ayuda en la creacion de una tabla m:n

Estas en el tema de ayuda en la creacion de una tabla m:n en el foro de Mysql en Foros del Web. mi pregunta es en la tercera tabla que se va a crear tiene que ir las 2 llaves primarias i las 2 llaves forana las ...
  #1 (permalink)  
Antiguo 23/10/2010, 02:51
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
ayuda en la creacion de una tabla m:n

mi pregunta es en la tercera tabla que se va a crear
tiene que ir las 2 llaves primarias i las 2 llaves forana

las dos tablas son
comarca: signo id,nombre_comarca,superficie
llave primaria signo_id
poblacion: codigo_poblacion,nom_pobla,habitantes
llave primaria codigo_poblacion


i se va a crear una tercera tabla
comarca_poblacion
signo_id
codigo_poblacion


dice que estas llaves primarias ya existen en la tercera tabla, o solo se tiene que poner
4 constraints 2 pk i 2 fk
  #2 (permalink)  
Antiguo 23/10/2010, 06:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ayuda en la creacion de una tabla m:n

Cita:
mi pregunta es en la tercera tabla que se va a crear
tiene que ir las 2 llaves primarias i las 2 llaves forana
La tabla que representa una relación N:M tiene las claves primarias de las tablas relacionadas como PK propia, ya que precisamente ese es el determinante de la necesidad de su existencia.

Una tabla relacional M:N sólo lleva un ID propio si y sólo si puede haber más de una instancia que vincule dos claves foraneas iguales.
Si la relación es tal que no existen posibilidades de que una misma clave de la tabla A se relacione más de una vez con la misma clave de la tabla B, entonces esa tabla no necesita un ID propio.
¿Se comprende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/10/2010, 01:00
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: ayuda en la creacion de una tabla m:n

asi solo tienen que ir las llaves foranas

si tengo que hacer una consulta voy a necessitar la llaver primaria de la tabla comarca i de poblacion i las foranas de comarca_población,

Código:
CREATE DATABASE  IF NOT EXISTS comarca;
USE comarca;
/*==============================================================*/
/* Table: Comarca                                          																													  */
/*==============================================================*/
CREATE TABLE comarca(
 siglas_id_comarca SMALLINT(2),
 nombre_comarca VARCHAR(45),
 superficie_comarca SMALLINT(2),
CONSTRAINT pk_siglas_id_comarca PRIMARY KEY (siglas_id_comarca)
)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

/*==============================================================*/
/* Table: Poblacio                                           																													  */
/*==============================================================*/
create table  poblacion (
codigo_poblacion int(9)  not null,
nombre_poblacio varchar(20) not null,
habitantes_poblacio varchar(20) not null,
CONSTRAINT pk_codigo_poblacion PRIMARY KEY (codigo_poblacio)
)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

/*==============================================================*/
/* Table: Comarca  Poblacion                                        																													  */
/*==============================================================*/
create table comarca_poblacion (

comarca_siglas_id_comarca SMALLINT(2) not null,
poblacion_codigo_poblacion int(9)  not null,

CONSTRAINT fk_comarca_siglas_id_comarca FOREIGN KEY (comarca_siglas_id_comarca) REFERENCES comarca(siglas_id_comarca),
CONSTRAINT fk_poblacion_codigo_poblacion FOREIGN KEY (poblacion_codigo_poblacion) REFERENCES poblacion(codigo_poblacion)

)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

Última edición por albertrc; 25/10/2010 a las 01:08
  #4 (permalink)  
Antiguo 25/10/2010, 04:15
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: ayuda en la creacion de una tabla m:n

de esta otra forma

cuando haces del modelo entidad-relacion al relacional
si es m:n

me decia que las llaves primaria
Multiple primary key defined

Código:
create table comarca_poblacion (
siglas_id_comarca_comarca_poblacion VARCHAR(6),
codigo_poblacion_comarca_poblacion SMALLINT(9)  not null,

comarca_poblacion_siglas_id_comarca VARCHAR(6),
comarca_poblacion_codigo_poblacion SMALLINT(9)  not null,

CONSTRAINT pk_siglas_id_comarca_comarca_poblacion PRIMARY KEY (siglas_id_comarca_comarca_poblacion),
CONSTRAINT pk_codigo_poblacion_comarca_poblacion PRIMARY KEY (codigo_poblacion_comarca_poblacion),

CONSTRAINT fk_comarca_poblacion_codigo_poblacion FOREIGN KEY (comarca_poblacion_codigo_poblacion) REFERENCES poblacion(codigo_poblacion),
CONSTRAINT fk_comarca_poblacion_siglas_id_comarca FOREIGN KEY (comarca_poblacion_siglas_id_comarca) REFERENCES comarca(siglas_id_comarca)

)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin

Última edición por albertrc; 25/10/2010 a las 04:44
  #5 (permalink)  
Antiguo 25/10/2010, 05:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ayuda en la creacion de una tabla m:n

Cita:
me decia que las llaves primaria
Multiple primary key defined
Porque lo que tienes que definir es una clave compuesta. No dos claves primarias:
Código MySQL:
Ver original
  1. CREATE TABLE comarca_poblacion (
  2. siglas_id_comarca_comarca_poblacion VARCHAR(6),
  3. codigo_poblacion_comarca_poblacion SMALLINT(9)  not null,
  4. comarca_poblacion_siglas_id_comarca VARCHAR(6)  not null,
  5. comarca_poblacion_codigo_poblacion SMALLINT(9)  not null,
  6. CONSTRAINT pk_siglas_id_comarca_comarca_poblacion
  7.   PRIMARY KEY (siglas_id_comarca_comarca_poblacion, codigo_poblacion_comarca_poblacion),
  8. CONSTRAINT fk_comarca_poblacion_codigo_poblacion
  9.   FOREIGN KEY (comarca_poblacion_codigo_poblacion)
  10.   REFERENCES poblacion(codigo_poblacion),
  11. CONSTRAINT fk_comarca_poblacion_siglas_id_comarca
  12.   FOREIGN KEY (comarca_poblacion_siglas_id_comarca)
  13.   REFERENCES comarca(siglas_id_comarca)
  14. )ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 25/10/2010, 07:36
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: ayuda en la creacion de una tabla m:n

ahora ya funciona
no me acordaba de las llaves compuestas
y hacia 2 llaves primarias

si hago una tabla calle que tiene una relacion en poblacion de
1:N y al mismo tiempo es una entidad debil

1 poblacion : N calle

tendria que hacer una llave compuesta entre nombre_calle i calle_codigo_poblacion
si no me sale este error

MySQL ha dicho:
#1068 - Multiple primary key defined


Código MySQL:
Ver original
  1. create table  calle (
  2. nombre_calle VARCHAR(9)  not null,
  3. calle_codigo_poblacion SMALLINT(9)  not null,
  4. largo VARCHAR(20) not null,
  5. ancho VARCHAR(20) not null,
  6. edificios SMALLINT(9) not null,
  7. poblacion_codigo_poblacion SMALLINT(9)  not null,
  8. CONSTRAINT pk_nombre_calle PRIMARY KEY (nombre_calle),
  9. CONSTRAINT pk_calle_codigo_poblacion PRIMARY KEY (calle_codigo_poblacion),
  10. CONSTRAINT fk_poblacion_codigo_poblacion FOREIGN KEY (poblacion_codigo_poblacion) REFERENCES poblacion(codigo_poblacion)
  11. )ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;

Última edición por albertrc; 25/10/2010 a las 07:59
  #7 (permalink)  
Antiguo 25/10/2010, 08:01
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: ayuda en la creacion de una tabla m:n

Código:
CONSTRAINT pk_nombre_calle PRIMARY KEY (nombre_calle),
CONSTRAINT pk_calle_codigo_poblacion PRIMARY KEY (calle_codigo_poblacion),
se tendria que hacer una llave compuesta

Código:
CONSTRAINT pk_nombre_calle_i_calle_codigo_poblacion 
PRIMARY KEY (nombre_calle,calle_codigo_poblacion),

Etiquetas: 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:18.