ho due tabelle:Relazione uno-a-molti in MySQL - come costruire il modello?
1) Area 2) Mappa
Ogni zona deve avere almeno 1 Mappa, ma possono anche avere più di una mappa.
Una mappa può appartenere a una sola area.
Come creare questo in MySQL?
ho due tabelle:Relazione uno-a-molti in MySQL - come costruire il modello?
1) Area 2) Mappa
Ogni zona deve avere almeno 1 Mappa, ma possono anche avere più di una mappa.
Una mappa può appartenere a una sola area.
Come creare questo in MySQL?
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.
Una tabella per Mappa e Area, con una chiave esterna su Mappa che collega all'Area.
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));
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
.
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
@tellob. Sì. Almeno al livello db. Potresti gestire questo tipo di controllo a livello di applicazione, piuttosto. –
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. –
A mio avviso, la soluzione di trigger postet è la più adatta. Grazie per la tua risposta! – tellob