A5M2 ER図を入力DBとする場合の注意事項

ER図を使用する方法 メインへ

※ただいま Ver.6.2.0 用ドキュメント整備中です(2021/11/20)。古いバージョンの内容が残っていたり、リンク先が未作成であったりする箇所がありますがご容赦ください。

A5M2 の ER図(~.a5er) からテーブル定義書を作成する場合の注意事項です

A5 ER図から生成される HTMLテーブル定義書のサンプル

  • 設定制限
    設定オプションの「カラムコメントをカラム論理名にする」(Comment To Name)はチェックなし固定です。チェックありにはできません。
    また「テーブルリスト自動取得」(Table List Auto Create)はチェックあり固定です。チェックなしにはできません。

  • ビューレイアウト
     ビューレイアウト(カラム等)が表示されません。ER図ではビューのカラム情報を保持していないため、カラムレイアウト(明細)が生成できません。ビュー式のみの表示となります。
    (明細が空欄になります)

    (ボタンによるビュー式の表示は可能です)

  • ビュー式表示に関して(Oracleの場合のみの注意事項)
    ver.2.16.2で確認しましたが、この問題は解消したようです。
    Oracleのビュー式は改行やコメントを挿入できる仕様となっていますが、A5の「ER図リバース生成」機能でER図を生成すると、ビュー式の改行が除去されてしまいます。
    【DBに登録されているビュー式】

    【ER図に取り込まれたビュー式】(改行が除去される)

    このため、ビュー明細ページのボタンで生成されるDDL文は以下のようになってしまいます。

    -- DROP VIEW ( V0001 ) ----------------------------------------------------
    DROP VIEW V0001 CASCADE CONSTRAINTS
    ;
    
    -- CREATE VIEW ( V0001 ) --------------------------------------------------
    CREATE OR REPLACE VIEW V0001 AS
    SELECT T1.ORDER_NO                       -- 注文番号(ORACLEビューのT0001項目)      ,T1.ORDER_STATUS      ,T1.ORD_DATE      ,T2.GOODS_CD      ,T2.QTY          /* 価格 */      ,T1.CRE_REC ,T1.UPD_REC    /* コメントを長くすると表示はどうなるのか試すための長文コメント。ビュー式表示での確認事項。ブラウザ上ではこう表示される。 */  FROM T0001 T1       INNER JOIN T0002 T2    ON T1.ORDER_NO = T2.ORDER_NO
    ;
    COMMENT ON TABLE V0001 IS '注文ビュー'
    ;
    

    わかりずらいかもしれませんが、このDDLはコメントとSQL文の境目が判別できないものとなってしまっています。
    (実行すると、このCREATE VIEW文はエラーになります)
    回避するには、A5M2のER図編集の画面でコメントを除去するか、手動あるいはクエリデザイナで編集しなおす等する必要があります。(SELECT実行してもエラーにならないような形にする)

    例)手動で改行を挿入(実行してもエラーにならない形に)

  • プライマリーキーIDについて
    ER図ではプライマリキーIDは保持しないようです。リバース生成でER図を作成してもIDは記録されません。
    そのため当アプリでは、プライマリキー取得SQLを追加したDDL文を生成する仕様としています。
    欄のボタンをクリックした場合、以下のようなプライマリキー取得SQLを含んだDDLを生成します。(以下、生成DDLの一部を抜粋)

    -- ①プライマリキーIDを取得②プライマリキーを削除、からのテーブル生成..という流れのDDLを生成
    
    -- GET PRIMARY KEY ID -----------------------------------------------------
    SELECT CONSTRAINT_NAME "[Get Primary Key Id.]"
      FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
     WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
       AND TABLE_NAME in ('T0001','t0001')
    ;
    --   If [Get Primary Key Id.] is '[TABLE ID.]_pkey', it is the system automatic numbering ID.
    --   No need to specify ID in DDL(CREATE/ALTER TABLE) and not drop primary key.
    
    -- DROP PRIMARY KEY ( [Get Primary Key Id.] ) -----------------------------
    ALTER TABLE T0001_TEMP DROP CONSTRAINT [Get Primary Key Id.]
    ;
    ...
    
  • インデックス情報
    リバース生成でER図を作成する場合、デフォルトではインデックス物理名を取得しない設定となっています。(インデックス名=空欄でER図が生成される)

    (物理名が空欄になってしまう)

    ボタンの「DDL生成機能」で正確なDDLを生成するために、上記「物理名」欄に直接INDEX名(物理ID)を入力するか「インデックスは名前を取り込まない」チェックをOFFにして同期することをお勧めします。
    当アプリでは上記のようにインデックスの物理名が空欄になっている場合、インデックス名(ID)を仮採番しています。(実際の物理IDではありません)

    "Idx_" + [テーブルID] + "_" + 連番(2桁)

    実際の物理名はSQL(インデックス取得SQL)の実行で取得できます
    ※注) 外部キー制約が設定されているテーブルの場合、「インデックスは名前を取り込まない」のチェックをOFFにすると意図しない結果のER図になることがわかっています。詳しくは後述の【外部キー制約編集欄をご覧ください。

  • 外部キー制約情報
    【外部キー制約ID】
     ER図では外部キー制約のIDを保持していないため、当アプリではID.を仮採番しています。(実際の物理IDではありません)

    "FK_XXXX_ID_" + 連番(4桁)

    ※仮IDの状態で欄のボタンをクリックした場合、以下のような外部キー制約IDの取得SQLを含んだDDLを生成するようにはなっています。

    -- ①FKキーIDを取得②FKキーを削除③FK再生成..という流れのDDLを生成
    
    -- DROP FOREIGN KEY -------------------------------------------------------
    
    -- [Get Foreign Key Id.]
    SELECT DISTINCT
           REPLACE(T1.ID,'sampledb/','') '[Get Foreign Key Id.]'
      FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN T1
           INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS T2
        ON T1.ID = T2.ID
     WHERE T1.FOR_NAME = 'sampledb/M0002'
       AND T2.FOR_COL_NAME in ('ORG_CD')
       AND T1.REF_NAME = 'sampledb/M0001'
       AND T2.REF_COL_NAME in ('ORG_CD')
    ;
    
    ALTER TABLE M0002 DROP FOREIGN KEY [Get Foreign Key Id.]
    ;
    
    -- ADD FOREIGN KEY --------------------------------------------------------
    ALTER TABLE M0002 ADD CONSTRAINT [Get Foreign Key Id.] FOREIGN KEY (ORG_CD)
      REFERENCES M0001 (ORG_CD)
    ;
    ...
    

    ただし、この状態だとわずらわしい操作となってしまうので、ER図のリレーション編集画面の「制約物理名」項目に正しいIDを手動入力することをお勧めします。(この項目のIDが反映されます。実際の物理名はSQL(外部キー制約情報取得SQL)の実行で取得できます)
    (ER図の結合線をダブルクリックすると編集画面が開きます)

    【リレーション編集画面】および反映結果

    【外部キー制約判定】
     当アプリでER図のリレーション情報で外部キー制約と判別する設定は、「カーディナリティ(*)」が「0または1」-「0以上」の組み合わせのみになります。(他の組み合わせのリレーション設定は外部キー制約として取り込みません)

    【外部キー制約編集】
     リバース生成でER図を生成すると、外部キー制約情報がインデックス情報として取り込まれることがあります。
    当アプリでそのままテーブル定義書を生成すると外部キー制約情報がインデックス情報ページに表示されてしまいます。


    そういった場合は「行の削除」ボタンでインデックス情報から対象行を削除します。

    ※ER図生成時に「インデックスは名前を取り込まない」をチェックOFFにすると、この現象が発生するようです。チェックONにした場合、インデックスの物理ID欄は空欄になってしまうので、当アプリでは物理IDを仮採番するようにしていますが、実際の物理IDとは異なることになりますのでご注意ください。
    チェックをONにしてインデックスIDを自分で入力する(あるいは空白のままで自動採番に任せる)か、チェックOFFにしてインデックス情報から外部キー情報を削除するか。。どちらかの対応になるかと思います。