Se le chiavi naturali sono difficili da identificare, puoi comunque utilizzare i surrogati sia per i database regionali sia per quelli principali.
Ad esempio, schema del database regionale:
CREATE TABLE main_table (
region_id INT NOT NULL AUTO_INCREMENT,
region_name CHAR(30) NOT NULL,
[other fields],
PRIMARY KEY (region_id)
);
Lo schema del database master sarà simile a questo:
CREATE TABLE main_table (
id INT NOT NULL AUTO_INCREMENT,
region_id INT NOT NULL,
region_name CHAR(30) NOT NULL,
[other fields],
PRIMARY KEY (id)
);
Il trucco consiste nel disporre che ogni sistema regionale fornisca un valore univoco per il campo "region_name". Quindi ogni sistema raccoglierà dati felicemente e non si verificheranno problemi durante l'aggregazione. Il database master avrà i suoi ID univoci e ci sarà un riferimento all'origine dei dati (region_id, region_name).
Il più grande mal di testa con questo approccio è il riferimento ad altre tabelle. Quando copi i dati dal database regionale a quello master, dovrai anche impiegare un approccio simile ad altre tabelle, che è, come ho detto, un mal di testa.
Un altro modo è usare un PK composto:
CREATE TABLE main_table (
region_id INT NOT NULL AUTO_INCREMENT,
region_name CHAR(30) NOT NULL,
[other fields],
PRIMARY KEY (region_id, region_name)
);
In questo modo la tabella avrà esattamente lo stesso aspetto tra le regioni e il master. Allo stesso tempo, le chiavi composte sono un mal di testa da solo.
Mentre scrivo questa risposta, capisco che non esiste una soluzione facile, come sempre:)
Aggiornamento:
Se viene utilizzata una chiave naturale, ci sarà uno schema unificato:
CREATE TABLE main_table (
id CAHR(32) NOT NULL, -- most likely ID is going to be a string, not number
region_name CHAR(30) NOT NULL, -- if you want to keep the info about the origin of data
[other fields],
PRIMARY KEY (id)
);
L'idea di una chiave naturale, che è unica indipendentemente da una regione. Nei libri, i soliti esempi sono il numero di previdenza sociale, il numero di passaporto, ecc.
Puoi avere una soluzione ibrida semplice. Lo schema rimane come illustrato sopra e tu stesso calcoli i valori ID:
UYT49.2873645
UYT49.2873646
UYT23.7824
La prima parte della stringa è l'ID della tua regione, la seconda parte, il numero auto-incrementale. Nel complesso, la stringa è globalmente unica, ed è ciò che desideri.