Capisco le tue preoccupazioni. Una volta che decidi di progettare il tuo database con ID tecnici, c'è sempre il pericolo di confondere gli ID. Mentre
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'JBIEBER', 'BOYFRIEND0001', 2);
invece di
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'BOYFRIEND0001', 'JBIEBER', 2);
probabilmente per un errore,
insert into album_track (album_id, artist_id, track_id, no) values (40, 22, 12, 2);
invece di
insert into album_track (album_id, artist_id, track_id, no) values (40, 12, 22, 2);
probabilmente non lo sarebbe, e nel momento in cui si nota l'errore del programma potrebbe essere troppo tardi per distinguere i record cattivi da quelli buoni. I tuoi dati sarebbero tecnicamente coerenti, ma davvero un pasticcio.
Per superare questo problema, hai bisogno di una fonte da cui estrarre i tuoi ID. In Oracle, ad esempio, useresti una sequenza. In MySQL puoi creare una tabella ID solo per questo scopo:
create table ids(id int auto_increment primary key);
create table album(id int primary key, album_no text, album_name text,
foreign key (id) references ids(id));
create table track(id int primary key, track_name text, record_date date, take int,
foreign key (id) references ids(id));
insert into ids values ();
insert into album (id, album_no, album_name) values
((select last_insert_id), 'B0016991-00', 'Justin Bieber – Believe - Deluxe Edition');
Quindi ogni volta che inserisci un record in una delle tue tabelle, devi specificare un ID (perché non viene ottenuto automaticamente). Ottieni l'ID con un inserto nella tabella degli ID e quindi chiami LAST_INSERT_ID() di MySQL.
Un'alternativa meno sicura, ma più semplice, sarebbe quella di avviare gli ID a diversi offset:
create table album(id int auto_increment primary key, album_no text, album_name text);
create table track(id int auto_increment primary key, track_name text, record_date date);
alter table track auto_increment=10000001;
create table artist(id int auto_increment primary key, artist_name varchar(100));
alter table artist auto_increment=20000001;
insert into artist (artist_name) values ('Justin Bieber');
Funziona finché i tuoi ID rimangono nell'intervallo desiderato.