Rozumiem twoje obawy. Gdy zdecydujesz się zaprojektować bazę danych z identyfikatorami technicznymi, zawsze istnieje niebezpieczeństwo pomylenia identyfikatorów. Podczas
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'JBIEBER', 'BOYFRIEND0001', 2);
zamiast
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'BOYFRIEND0001', 'JBIEBER', 2);
prawdopodobnie przez błąd,
insert into album_track (album_id, artist_id, track_id, no) values (40, 22, 12, 2);
zamiast
insert into album_track (album_id, artist_id, track_id, no) values (40, 12, 22, 2);
prawdopodobnie nie, a gdy zauważysz błąd programu, może być za późno, aby odróżnić złe rekordy od dobrych. Twoje dane byłyby spójne technicznie, ale naprawdę bałagan.
Aby rozwiązać ten problem, potrzebujesz jednego źródła, z którego możesz pobrać swoje identyfikatory. Na przykład w Oracle użyłbyś sekwencji. W MySQL możesz utworzyć tabelę identyfikatorów tylko w tym celu:
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');
Tak więc za każdym razem, gdy wstawiasz rekord do jednej ze swoich tabel, musisz podać identyfikator (ponieważ nie jest on automatycznie pobierany). Otrzymasz identyfikator z wstawką do tabeli identyfikatorów, a następnie wywołasz LAST_INSERT_ID() MySQL.
Mniej bezpieczną, ale prostszą alternatywą byłoby rozpoczęcie identyfikatorów z różnymi przesunięciami:
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');
Działa to tak długo, jak długo Twoje identyfikatory pozostają w żądanym zakresie.