2011-04-12 11 views
9

Tenía una pregunta sobre si mi idea de implementación es o no fácil de trabajar con/escribir consultas.Columna de la base de datos MySQL que tiene valores múltiples

Actualmente tengo una base de datos con varias columnas. La mayoría de las columnas son la misma cosa (elementos, pero se dividen en el ítem 1, ítem 2, ítem 3, etc.).

así que tengo actualmente en mi base de datos ID, Nombre, artículo 1, punto 2 ..... Artículo 10.

Quiero condensarse en esta identificación, nombre, artículo.

Pero lo que quiero que el elemento tenga es almacenar valores múltiples como filas diferentes. Es decir.

ID = One Name = Hello Item = This 
           That 
           There 

Me gusta el formato que se ve. ¿Es esta una buena idea y cómo exactamente voy a hacer esto? No usaré números en la base de datos y toda la información será estática y nunca cambiará.

¿Puedo hacer esto usando 1 tabla de base de datos (y sería fácil hacer coincidir elementos de una ID con otra ID), o tendría que crear 2 tablas y vincularlas?

Si es así, ¿cómo exactamente crearía 2 tablas y las relacionaría?

¿Alguna idea sobre cómo implementar esto? ¡Gracias!

+0

Creo que su pregunta es probablemente demasiado específica. ¿Cuál es el objetivo más amplio que intentas lograr? –

+1

Las respuestas a continuación son muy claras: lo que tienes es el caso clásico sobre por qué las bases de datos almacenan datos en varias tablas, haciendo referencia cruzada filas por número (también conocido como "claves"). – boisvert

Respuesta

2

No creo que una mesa realmente tenga sentido en este caso. En su lugar puede hacer:

Main Table: 
ID 
Name 

Item Table: 
ID 
Item # 
Item Value 
Main_ID = Main Table.ID 

Entonces, cuando usted hace las preguntas que puede hacer un simple unirse

6

Se trata de un tipo clásico de la base de datos no normalizados. La desnormalización a veces hace que ciertas operaciones sean más eficientes, pero más a menudo conduce a ineficiencias. (Por ejemplo, si una de sus consultas de escritura cambiara el nombre asociado con una identificación, tendría que cambiar muchas filas en lugar de una sola.) La desnormalización solo debería realizarse por razones específicas después de una base de datos completamente normalizada ha sido designado. En su ejemplo, un diseño de base de datos normalizado sería:

table_1: ID (clave), Nombre
table_2: ID (clave externa asignada a table_1.ID), artículo

4

Estamos hablando de una tabla desnormalizada, que las bases de datos SQL tienen un tiempo difícil de tratar. Su campo de artículo se dice que tiene una relación de muchos a uno con los otros campos. Lo correcto es hacer dos tablas. El ejemplo típico es un álbum y canciones. Las canciones tienen una relación de varios a uno a los álbumes, por lo que podría estructurar sus ables como esto:

Table Album 
album_id [Primary Key] 
Title 
Artist 

Table Song 
song_id [Primary Key] 
album_id [Foreign Key album.album_id] 
Title 

A menudo este ejemplo se da con una tercera tabla del artista, y se podía sustituir el campo del artista para un campo artist_id que es una clave foránea de Artist_id de una tabla Artist.

Por supuesto, en realidad las canciones, los álbumes y los artistas son más complejos. Una canción puede estar en varios álbumes, varios artistas pueden estar en un álbum, hay varias versiones de la misma canción, e incluso hay algunas canciones que no tienen ningún lanzamiento del álbum.

Ejemplo:

Album 
album_id Title  Artist 
1  White  Beatles 
2  Black  Metallica 

Song 
song_id album_id Title 
1  2   Enter Sandman 
2  1   Back in the USSR 
3  2   Sad but True 
4  2   Nothing Else Matters 
5  1   Helter Skelter 

Para consultar este que acaba de hacer una combinación: SELECT * FROM Album INNER JOIN Song ON Album.album_id = Song.album_id

+0

upvote para nombres de álbumes en blanco y negro – d512

Cuestiones relacionadas