MySQL - jedno ID do wielu tabel

0

Witam

Stworzyłem w phpMyAdmin natępujące tabele z powiązaniami:

CREATE DATABASE books;

CREATE TABLE `books`.`book` (
`b_id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`b_isbn` VARCHAR( 20 ) NOT NULL ,
`b_title` VARCHAR( 30 ) NOT NULL ,
`b_year` YEAR( 4 ) NOT NULL ,
`b_subject` VARCHAR( 50 ) NOT NULL ,
`b_publisher` VARCHAR( 30 ) NOT NULL ,
UNIQUE (
`b_isbn` 
),
FOREIGN KEY (b_id) REFERENCES publication(b_id)
);

CREATE TABLE `books`.`author` (
`a_id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`a_fname` VARCHAR( 20 ) NOT NULL ,
`a_lname` VARCHAR( 20 ) NOT NULL ,
FOREIGN KEY (a_id) REFERENCES publication(a_id)
);


CREATE TABLE `books`.`publication` (
`b_id` INT( 10 ) NOT NULL ,
`a_id` INT( 10 ) NOT NULL ,
PRIMARY KEY ( `b_id` , `a_id` ) 
);

Dane są tabele:

  1. Book - informacje o konkretnej książce z wyłączeniem autora
  2. Author - dane autora
  3. Publication - służy do połączenia autorów z książkami i odwrotnie

Założenie jest następujące:
Jedna książka może mieć wielu autorów oraz jeden autor może mieć wiele książek. W tabeli publication mamy podwójny klucz główny, czyli para wartości musi być unikalna, a nie pojedyncza wartość.

Problem jest następujący:
Wstawianie książki i autora odbywa się przez autoinkrementację ich kluczy głównych (czyli bez udziału z zewnątrz). Chcę stworzyć transakcję wstawiania Całej publikacji do bazy (czyli jednocześnie książki i autora), więc potrzebuję wstawić do tabeli publication 2 indeksy (jeden od dodanej książki i jeden od dodanego autora). Nie wiem jak mam wstawić te indeksy.

Wprawdzie znalazłem funkcję przypominania numeru ostatnio wstawionego indeksu, jednak w sytuacji wstawienia danych ksiazki i autora, bedzie pamietany tylko jeden indeks, a mi potrzebne są dwa.

Pytanie:
Jak powinien wyglądać kod SQL?

Pytanie 2:
Może ktoś inaczej by tą bazę w ogóle zaprojektował?

0

Chyba troszkę źle zaprojektowałem. Znalazłem takie zdjęcie bazy, o to mi właściwie chodzi:

http://serviciipeweb.ro/iafblog/content/binary/part2/relations2.bmp

No i jak wstawić do tych tabel odpowiednie ID?

(żeby Author.IDAuthor == Author_Book.IDAuthor oraz Book.IDBook == Author_Book.IDBook
i to jeszcze, żeby było wstawione w ten sam rekord tabeli Author_Book).

Chodzi o sam kod SQL.

No wydaje mi się, że jest to banalne, ale nie mogę tego zaskoczyć ;-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.