sql >> Databáze >  >> RDS >> Mysql

Generujte jedinečné AI ID přes více datových tabulek

Chápu vaše obavy. Jakmile se rozhodnete navrhnout databázi pomocí technických ID, vždy existuje nebezpečí záměny ID. Zatímco

insert into album_track (album, artist, track, no) 
  values ('B0016991-00', 'JBIEBER', 'BOYFRIEND0001', 2);

místo

insert into album_track (album, artist, track, no) 
  values ('B0016991-00', 'BOYFRIEND0001', 'JBIEBER', 2);

pravděpodobně došlo k chybě,

insert into album_track (album_id, artist_id, track_id, no) values (40, 22, 12, 2);

místo

insert into album_track (album_id, artist_id, track_id, no) values (40, 12, 22, 2);

pravděpodobně ne, a když si všimnete chyby programu, může být příliš pozdě na to, abyste rozeznali špatné záznamy od dobrých. Vaše data by byla technicky konzistentní, ale opravdu nepořádek.

Chcete-li tento problém vyřešit, potřebujete jeden zdroj, ze kterého můžete získat svá ID. V Oracle byste například použili sekvenci. V MySQL můžete vytvořit tabulku ID pouze pro tento účel:

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');

Kdykoli tedy vložíte záznam do jedné z vašich tabulek, musíte zadat ID (protože není automaticky získáno). ID získáte vložením do tabulky ID a poté zavoláte LAST_INSERT_ID() MySQL.

Méně bezpečnou, ale jednodušší alternativou by bylo začít ID s různými offsety:

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');

Funguje to tak dlouho, dokud vaše ID zůstanou v požadovaném rozsahu.



  1. PDO Multi-query SQLSTATE[HY000]:Obecná chyba

  2. exportovat velká datatable data do souboru .csv v aplikacích c# windows

  3. Více formulářů a jedna stránka zpracování

  4. Jak přidat uživatelskou skupinu Active Directory jako přihlášení na SQL Server