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

duda Mysql: tabla de discos->implementar tipo

Estas en el tema de duda Mysql: tabla de discos->implementar tipo en el foro de Bases de Datos General en Foros del Web. Hola buenas, tengo una duda en cómo hacer una cosa. Resulta que tengo una tabla llamada discos, con varias columnas: Grupo,Disco,Fecha,Nota... y quiero además saber ...
  #1 (permalink)  
Antiguo 09/12/2004, 05:21
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
duda Mysql: tabla de discos->implementar tipo

Hola buenas, tengo una duda en cómo hacer una cosa.
Resulta que tengo una tabla llamada discos, con varias columnas: Grupo,Disco,Fecha,Nota... y quiero además saber de qué tipo es el disco, pongamos que hay 5 tipos y que cada disco puede tener más de un tipo.

¿Cómo hago esto?
Yo estaba pensando en hacer una columna por tipo, o sea 5 columnas principales dentro de la tabla Discos, y si el disco es de un tipo determinado, esa columna valdrá 1 y sino valdrá 0. Si esto estuviera bien, cómo sería una consulta que quisiera mostrar los 10 discos de Tipo1 con más nota??

Veo que habéis entendido la idea.
Bueno a ver que me recomendáis.
Muchas gracias y saludos.
  #2 (permalink)  
Antiguo 10/12/2004, 01:48
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Pongamos que hay 5 tipos, y ¿qué pasa si hay 10 tipos?, y ¿que pasa si hay 20 tipos?, ¿vas a hacer un campo por cada tipo nuevo que aparezca, vas a modificar la programación para que los tenga en cuenta, ...?.
Si estás seguro de que vas a tener sólo 5 tipos o un número corto de datos, puedes hacerlo así. Pero si no sabes la cantidad de tipos, si es un número variable, ..., lo mejor es una tabla relacionada que contenga los tipos de cada disco (rel_disco_tipo, define la relación entre discos y tipos de discos), tan simple como que tenga dos columnas: id_disco (la clave única de la tabla discos) y idtipo, donde tipo llevará un valor x que identifica el tipo. Si consideras dar una descripción al tipo, necesitarás otra tabla Tipos (idtipo, nomtipo).
¿Con esta estructura que te propongo como sacas los 10 discos de tipo 1 con más nota?, sencillo:
Código:
select disco, nota 
from discos a join rel_disco_tipo b on b.id_disco=b.id_disco
where b.tipo = 1
order by nota desc
limit 0, 10
Si aún quieres usar la estructura que tú propones, la consulta sería igualmente sencilla:
Código:
select disco, nota from discos
where campo_tipo1=1
order by nota desc
limit 0,10
Espero que te sirva de ayuda.
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 10/12/2004 a las 01:52
  #3 (permalink)  
Antiguo 10/12/2004, 04:44
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
MM no lo acabo de ver. ¿¿Tu me dices tener una Tabla TIPODISCO con una fila para cada TipoDisco de cada ID de Disco??

Por ejemplo un Disco de ID=1 que sea de Tipo1,Tipo2 y Tipo3 haría que:
Código:
TIPODISCO
T_ID D_ID
  1     1
  2     1
  3     1
Y si ya se le añade un Disco de ID=2 que sea de Tipo2,Tipo3 y Tipo4:
Código:
TIPODISCO
T_ID D_ID
  1     1
  2     1
  3     1
  2     2
  3     2
  4     2
¿¿Y la Clave Primaria de la tabla TIPODISCO cuál sería??Así no podría haber ninguna porque no hay una columna que tenga valore únicos por fila.

Es así lo que me dices??No lo veo claro...

Muchas gracias por todo.

Última edición por apañero; 10/12/2004 a las 04:55
  #4 (permalink)  
Antiguo 10/12/2004, 05:24
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Si es así como lo digo, es una tabla de relacion donde la clave primaria sería el conjunto de los dos campos: iddisco, idtipo.
Las tablas que definen relaciones entre otras tablas se implementan tomando las claves primarias de las tablas que relacionan.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #5 (permalink)  
Antiguo 10/12/2004, 06:04
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Vale ya te cojo el asunto. O sea que lo ideal sería tener 2 tablas, una principal llamada

Código:
TIPODISCO
T_ID-T_Valor-T_Nombre
  1         x         Tipo1
  2         x         Tipo2
  3         x         Tipo3
  ..
  n         x         Tipon
y luego una tabla de relaciones que relacione la tabla DISCOS con TIPODISCO:
Código:
RELACIONDT
T_ID -  D_ID
  1         1         
  2         1         
  3         1   
  2         2
  3         2
Me parece bien

Pero cómo se define al crear la tabla que la Clave Primaria es la combinación de las 2 columnas??
Suelo crear la tabla de esta forma:
Código:
CREATE TABLE RelacionDT (
  D_ID INT(7) DEFAULT '0' NOT NULL,
  T_ID INT(7) DEFAULT '0' NOT NULL,
  PRIMARY KEY (D_ID)
);
Ahora qué tendría que poner en PRIMARY KEY??

Gracias de nuevo.

Última edición por apañero; 10/12/2004 a las 06:07
  #6 (permalink)  
Antiguo 14/12/2004, 19:57
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Cómo defino al crear la tabla que la Clave Primaria es la combinación de las 2 columnas??
  #7 (permalink)  
Antiguo 15/12/2004, 02:21
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
La clave primaria es la combinación de ambas columnas:
primary key (d_id, t_id).
Un saludo
__________________
Estoy contagiado de Generación-I
  #8 (permalink)  
Antiguo 15/12/2004, 04:49
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Perfecto esa es la sentencia que quería saber, es que no la veía por ahí.

Muchas gracias por todo Vice.
  #9 (permalink)  
Antiguo 15/12/2004, 05:53
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
De nada, para eso estamos.
Un saludo.
__________________
Estoy contagiado de Generación-I
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 13:46.