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:
- Book - informacje o konkretnej książce z wyłączeniem autora
- Author - dane autora
- 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ł?