2012-09-13 15 views
8

Estoy creando un sitio web y necesito almacenar una cantidad aleatoria de datos en mi base de datos.¿Cómo almacenar una relación uno a muchos en mi base de datos sql? (MySQL)

por ejemplo: usuario John puede tener un número de teléfono donde puede tener jack 3.

que necesito para poder así almacenar un número infinito de valores por usuario.

No he podido encontrar la forma de hacerlo, ¡espero que me ayudes! :)

Soy un principiante en las bases de datos relacionales.

+0

Esto es sólo una relación de uno a muchos. Por ejemplo, un usuario puede tener muchos números de teléfono. Esto se tratará en un tutorial de conceptos de bases de datos en alguna parte. – Arran

Respuesta

19

Crea una tabla separada para números de teléfono (es decir, una relación 1: M).

create table `users` (
    `id` int unsigned not null auto_increment, 
    `name` varchar(100) not null, 
    primary key(`id`) 
); 

create table `phone_numbers` (
    `id` int unsigned not null auto_increment, 
    `user_id` int unsigned not null, 
    `phone_number` varchar(25) not null, 
    index pn_user_index(`user_id`), 
    foreign key (`user_id`) references users(`id`) on delete cascade, 
    primary key(`id`) 
); 

Ahora puede, de una manera fácil, obtener un usuarios de números de teléfono con un simple unirse;

select 
    pn.`phone_number` 
from 
    `users` as u, 
    `phone_numbers` as pn 
where 
    u.`name`='John' 
    and 
    pn.`user_id`=u.`id` 
+1

buena respuesta Debo decir ... –

+0

Esto está muy bien, ¡no sabía de esto! :) esto es genial, gracias! – Weacked

+1

En cuanto a la 2da tabla, ¿es necesario el campo phone_numbers.id? ¿Sería correcto hacer 'update phone_numbers where user_id = '12345' AND phone_number = '123-456-7890'' Quiero hacer esto correctamente, pero estoy tratando de entender por qué el campo phone_numbers.id es necesario. ¡Gracias! – cmpreshn

Cuestiones relacionadas