2013-06-11 10 views

risposta

8

Aggiungere una chiave esterna in Mappa che fa riferimento alla chiave primaria dell'Area. Ciò imporrà una relazione uno-a-molti tra Mappe e Aree.

Per quanto riguarda l'applicazione di almeno una mappa per area (se necessario) ci sono alcune idee in questo post here. Una delle soluzioni più semplici potrebbe essere quella di creare una vista che visualizza solo le aree che hanno le mappe:

CREATE VIEW viewAreas AS 
SELECT * 
FROM Areas, Maps 
WHERE Areas.ID = Maps.AreaID; 

In questo modo, è possibile creare una zona, e quindi aggiungere le mappe ad esso. Puoi anche far sì che la chiave esterna nelle mappe sia NOT NULL, quindi una mappa deve sempre avere un'area.

+0

A mio avviso, la soluzione di trigger postet è la più adatta. Grazie per la tua risposta! – tellob

2

Una tabella per Mappa e Area, con una chiave esterna su Mappa che collega all'Area.

+0

Ciò significa che ho un ID area nella mia tabella mappa? – tellob

+0

@tellob: Sì, esattamente. –

+0

Ma questo non fa altro che assicurarsi che una mappa abbia un'area? come è sicuro che un'area abbia anche una mappa, quando è stata creata? – tellob

11
create table Area(id int primary key auto_increment, name varchar(100)); 

create table Map(id int primary key auto_increment, 
       area_id int not null, 
       name varchar(100), 
       foreign key (area_id) references area(id)); 

SqlFiddle

Ogni Map deve avere un Area, come area_id non è nulla (ed è un Foreign key su Area)

Ma non sarà in grado (e non è desiderato) a avere "almeno una mappa" per ogni area.

Un giorno, sarà necessario creare un Area. E non avrà alcun Map in questo momento. Oppure fai controlli "regolari" per vedere le Aree senza Mappa.

È possibile eliminare uno Area, se non è più correlato Map, quando si elimina uno Map.

+0

Quindi: non sono in grado di costruire una cosa del tipo: un'area deve avere una mappa? Posso solo assicurarmi che una mappa abbia un'area finora? – tellob

+0

@tellob. Sì. Almeno al livello db. Potresti gestire questo tipo di controllo a livello di applicazione, piuttosto. –

+1

So da dove vieni ma non sono sicuro di essere d'accordo. Questo argomento, se seguito per tutti gli articoli, tende a far sì che non sia richiesta alcuna relazione estera. Penso che sia meglio richiederlo e affrontare il lavoro, ad es. crea prima il bambino, poi il genitore e assegna il bambino in quel punto. Evitare le convalide perché "un giorno" hai bisogno di un record vuoto non ha funzionato così bene per me in passato. –

Problemi correlati