Saya memahami kekhawatiran Anda. Setelah Anda memutuskan untuk mendesain database Anda dengan ID teknis, selalu ada bahaya membingungkan ID. Sementara
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'JBIEBER', 'BOYFRIEND0001', 2);
bukannya
insert into album_track (album, artist, track, no)
values ('B0016991-00', 'BOYFRIEND0001', 'JBIEBER', 2);
mungkin akan melalui kesalahan,
insert into album_track (album_id, artist_id, track_id, no) values (40, 22, 12, 2);
bukannya
insert into album_track (album_id, artist_id, track_id, no) values (40, 12, 22, 2);
mungkin tidak, dan saat Anda melihat kesalahan program Anda, mungkin sudah terlambat untuk membedakan catatan buruk dari yang baik. Data Anda akan konsisten secara teknis, tetapi benar-benar berantakan.
Untuk mengatasi masalah ini, Anda memerlukan satu sumber untuk menarik ID Anda. Di Oracle misalnya Anda akan menggunakan urutan. Di MySQL Anda dapat membuat tabel ID hanya untuk tujuan ini:
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');
Jadi setiap kali Anda memasukkan catatan di salah satu tabel Anda, Anda harus menentukan ID (karena tidak secara otomatis didapat). Anda mendapatkan ID dengan memasukkan ke dalam tabel ID Anda dan kemudian memanggil LAST_INSERT_ID() MySQL.
Alternatif yang kurang aman, tetapi lebih sederhana adalah memulai ID pada offset yang berbeda:
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');
Ini berfungsi selama ID Anda tetap dalam rentang yang diinginkan.