Domanda

Ho un database con due tavoli - chiamiamoli Foo e Bar. Ogni foo può essere correlato a qualsiasi numero di barre, e ciascuna barra può essere correlato a qualsiasi numero di foos. Voglio essere in grado di recuperare, con una query, i Foos che sono associati con un certo bar, e le barre che sono associati con una certa foo.

La mia domanda è, qual è il modo migliore di registrare queste relazioni? Devo avere una tabella separata con registri di ogni rapporto (ad esempio due colonne, e foo bar)? Se il tavolo foo avere una colonna per una lista di bar, e viceversa? C'è un'altra opzione che sto con vista?

È stato utile?

Soluzione

Si chiama una relazione molti-a-molti. La soluzione "standard" è di creare una terza tabella, con la chiave primaria ogni tavola di ciascuna riga in cui c'è una relazione.

La terza tabella è chiamata tabella di congiunzione. "Tavolo Junction" da Wikipedia: http://en.wikipedia.org/wiki/Junction_table

Per fare un esempio:

Foo
UID
Col1
Col2

Bar
UID
Col1
Col2

Foo_Bar
UID
Foo_UID
Bar_UID

Quindi, in quanto sopra, ci potrebbero essere molti foos e molti bar. Ogni foo che si riferisce ad una barra e ogni barra che si riferisce ad un foo esisterebbero nella tabella foo_bar. Per ottenere tutti i Foos che si riferiscono ad un determinato bar, è possibile utilizzare il seguente SQL:

select *
from foo
where uid in (
    select foo_uid
    from foo_bar
    where bar_uid=<some bar uid>)

(Non trovo nessun gonzi esatte di questa domanda, ma le seguenti domande si espandono sul tema.)

molti a molti domanda design del tavolo
molti a molti relazioni Design - Intersezione Struttura tabella

Altri suggerimenti

E 'davvero una relazione molti a molti nave di relazione. Oltre alla risposta di Michael, ho voluto fornire le seguenti risorse come ulteriore. Ho visto troppi poveri implementazione del database di non portare questo in su (non solo per voi, ma altri che potrebbero vedere questo in futuro)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top