0

データベース モデルを設計していて、ある疑問が浮かびました。生成された DDL に影響を与えないことを念頭に置いて、リレーションシップの結合テーブル側がオプションかどうかを指定する意味は何ですか?

たとえば、次の 2 つの異なる図を見てください。

A_to_B_join 側の A と A_to_B_join の間の必須の関係を示す図: 必須

A_to_B_join 側の A と A_to_B_join の間のオプションの関係を示す図:

オプション

私は、それらが異なっていても、両方とも同じ DDL を厳密に生成することに気付きました!

生成された DDL:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`A`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`A` (
  `A_ID` INT NOT NULL ,
  PRIMARY KEY (`A_ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`B`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`B` (
  `B_ID` INT NOT NULL ,
  PRIMARY KEY (`B_ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`A_to_B_join`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`A_to_B_join` (
  `A_ID` INT NOT NULL ,
  `B_ID` INT NOT NULL ,
  PRIMARY KEY (`A_ID`, `B_ID`) ,
  INDEX `fk_A_to_B_join_B1` (`B_ID` ASC) ,
  INDEX `fk_A_to_B_join_A` (`A_ID` ASC) ,
  CONSTRAINT `fk_A_to_B_join_A`
    FOREIGN KEY (`A_ID` )
    REFERENCES `mydb`.`A` (`A_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_A_to_B_join_B1`
    FOREIGN KEY (`B_ID` )
    REFERENCES `mydb`.`B` (`B_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

では、サイドがオプションか必須かを言及するポイントは何ですか? 気にする必要がありますか?DDL が MySQL に固有のものと同じであるという事実はありますか?

よろしく、

4

1 に答える 1

2

MySQL固有のものである可能性が非常に高いです。

他の製品 (Oracle? Postgres? ...) はわずかに異なる DDL を生成する可能性があり、その違いをクエリ オプティマイザーが使用して、結合を含むクエリの変換方法を決定できます。

于 2011-10-13T15:06:17.073 に答える