2012-09-13 4 views
8

Realizzo un sito Web e ho bisogno di memorizzare un numero casuale di dati nel mio database.Come memorizzare una relazione uno a molti nel mio database sql? (MySQL)

ad esempio: utente john può avere un numero di telefono dove jack possibile 3.

devo poter così memorizzare un numero infinito di valori per utente.

Non riuscivo a trovare il modo di farlo ovunque, spero che tu possa aiutarmi! :)

Sono un principiante in database relazionali.

+0

questo è solo un uno a molti. Ad esempio, un utente può avere molti numeri di telefono. Questo sarà coperto in un tutorial di concetti di database da qualche parte. – Arran

risposta

19

Si crea una tabella separata per i numeri di telefono (ad esempio una relazione 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`) 
); 

Ora è possibile, in modo semplice, ottenere numeri di telefono di utenti con un join semplice;

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

buona risposta Devo dire .. –

+0

Questo è davvero bello, non sapevo di questo! :) questo è fantastico, grazie! – Weacked

+1

Per quanto riguarda la seconda tabella, è necessario il campo phone_numbers.id? Sarebbe ok per fare 'aggiornare phone_numbers dove user_id = '12345' AND phone_number = '123-456-7890'' Voglio farlo correttamente, ma sto cercando di capire perché è necessario il campo phone_numbers.id. Grazie! – cmpreshn