PJ

PB>Engine choice is another issue. InnoDB properly isolates FK
 enforcement in the database. The MyISAM tradeoff (for speed) is that
 you have to implement FK logic in code.

PJ>Forgive my naiveté, but how do you do that?

You write application code to implement the equivalent of ON DELETE CASCADE | SET NULL | ... when a parent row is deleted.
For normalisation, however, you need the A-B-AB setup no matter what
engine you use.
PJ>What is simpler?

Using InnoDB.

Workbench gave you a model with two book_authors tables? I suggest asking about it in the Workbench forum.

PB

-----

PJ wrote:
Peter Brawley wrote:
PJ

But what about foreign keys? Don't I need that to find the relationships
between the books, the authors and the categories? After all, isn't this
a relational db? If so, I can't use the default engine (MyISAM) which
does not support FK. So, if I have to use foreign keys, I have to change
to INNODB, right?
Engine choice is another issue. InnoDB properly isolates FK
enforcement in the database. The MyISAM tradeoff (for speed) is that
you have to implement FK logic in code.
Forgive my naiveté,  but how do you do that?
For normalisation, however, you need the A-B-AB setup no matter what
engine you use.

What is simpler?
BTW, I have set up an EER diagram using MySQL Workbench... and exported
this sql script...
does it make sense?
Strange that it created two instances to create the table book_author???
Maybe a glitch in Workbench....

-- -----------------------------------------------------
-- Table `language`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `language` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `language` VARCHAR(7) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `books`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `books` (
  `id` SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(148) NULL ,
  `sub_title` VARCHAR(90) NULL ,
  `descr` TINYTEXT NULL ,
  `comment` TEXT NULL ,
  `bk_cover` VARCHAR(32) NULL ,
  `publish_date` YEAR NULL ,
  `ISBN` BIGINT(13) NULL ,
  `language_id` INT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_books_language` (`language_id` ASC) ,
  CONSTRAINT `fk_books_language`
    FOREIGN KEY (`language_id` )
    REFERENCES `biblane`.`language` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `authors`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `authors` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `first_name` VARCHAR(32) NULL ,
  `last_name` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `categories`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `categories` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `category` VARCHAR(70) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = MyISAM;


-- -----------------------------------------------------
-- Table `sellers`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `sellers` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `seller_link` VARCHAR(128) NULL ,
  `seller_img` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `publishers`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `publishers` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `publisher` VARCHAR(72) NOT NULL ,
  `pub_link`  NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `book_author`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `book_author` (
  `books_id` SMALLINT(4) UNSIGNED NOT NULL ,
  `author_id` INT UNSIGNED NOT NULL ,
  `list_order` TINYINT(1) NULL ,
  PRIMARY KEY (`books_id`, `author_id`) ,
  INDEX `fk_book_author_books` (`books_id` ASC) ,
  INDEX `fk_book_author_authors` (`author_id` ASC) ,
  CONSTRAINT `fk_book_author_books`
    FOREIGN KEY (`books_id` )
    REFERENCES `biblane`.`books` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_book_author_authors`
    FOREIGN KEY (`author_id` )
    REFERENCES `biblane`.`authors` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `book_author`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `book_author` (
  `books_id` SMALLINT(4) UNSIGNED NOT NULL ,
  `author_id` INT UNSIGNED NOT NULL ,
  `list_order` TINYINT(1) NULL ,
  PRIMARY KEY (`books_id`, `author_id`) ,
  INDEX `fk_book_author_books` (`books_id` ASC) ,
  INDEX `fk_book_author_authors` (`author_id` ASC) ,
  CONSTRAINT `fk_book_author_books`
    FOREIGN KEY (`books_id` )
    REFERENCES `biblane`.`books` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_book_author_authors`
    FOREIGN KEY (`author_id` )
    REFERENCES `biblane`.`authors` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `book_publisher`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `book_publisher` (
  `books_id` SMALLINT(4) UNSIGNED NOT NULL ,
  `publishers_id` INT NOT NULL ,
  PRIMARY KEY (`books_id`, `publishers_id`) ,
  INDEX `fk_books_has_publishers_books` (`books_id` ASC) ,
  INDEX `fk_books_has_publishers_publishers` (`publishers_id` ASC) ,
  CONSTRAINT `fk_books_has_publishers_books`
    FOREIGN KEY (`books_id` )
    REFERENCES `biblane`.`books` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_books_has_publishers_publishers`
    FOREIGN KEY (`publishers_id` )
    REFERENCES `biblane`.`publishers` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `book_categories`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `book_categories` (
  `books_id` SMALLINT(4) UNSIGNED NOT NULL ,
  `categories_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`books_id`, `categories_id`) ,
  INDEX `fk_books_has_categories_books` (`books_id` ASC) ,
  INDEX `fk_books_has_categories_categories` (`categories_id` ASC) ,
  CONSTRAINT `fk_books_has_categories_books`
    FOREIGN KEY (`books_id` )
    REFERENCES `biblane`.`books` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_books_has_categories_categories`
    FOREIGN KEY (`categories_id` )
    REFERENCES `biblane`.`categories` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `book_seller`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `book_seller` (
  `seller_id` INT NOT NULL ,
  `books_id` SMALLINT(4) UNSIGNED NOT NULL ,
  PRIMARY KEY (`seller_id`, `books_id`) ,
  INDEX `fk_seller_has_books_seller` (`seller_id` ASC) ,
  INDEX `fk_seller_has_books_books` (`books_id` ASC) ,
  CONSTRAINT `fk_seller_has_books_seller`
    FOREIGN KEY (`seller_id` )
    REFERENCES `biblane`.`seller` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_seller_has_books_books`
    FOREIGN KEY (`books_id` )
    REFERENCES `biblane`.`books` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB; ------------------------------------------------------------------------


Internal Virus Database is out of date.
Checked by AVG - http://www.avg.com Version: 8.0.176 / Virus Database: 270.10.12/1909 - Release Date: 1/22/2009 7:08 AM

Reply via email to