データベース勉強メモ

言葉

関係モデル SQL ファイルシステム
属性(アトリビュート) フィールド(項目)
タプル レコード
関係(リレーション) 表(テーブル) ファイル
● 外部キー
  • そのテーブルにおいて、他のテーブルとのリンクの役割をするキー。
  • そのテーブルから他のテーブルへのジャンプ先。
    • 「ちゃんとジャンプ先がないと駄目」っていうのが「外部キー制約(参照制約)」。
      • 外部キー制約:
        • 表に外部キーがあると、その外部キーの値は、参照する候補キーのどれかの値か、NULL値でなければならない。
● インデックス (索引)
  • Select 文のための補助ツール。
    • Where 句で効いてくる。
    • ヒット率が関係ある。
    • 検索時の性能が上がるが、データ追加時の性能が下がる可能性がある(インデックスを更新するため)。
● 導出項目
  • 他の情報から補完できる項目
相関副問合せ
  • 呼び出し元の情報を参照するようなサブクエリ。
select *
from TABLE_A
where exist (
    select *
    from TABLE_B
    where TABLE_A.ATTR = TABLE_B.ATTR
)

ログ

トランザクションログ。

  • ロールフォワード
    • データベースの媒体障害からの復旧時に使用する。
      • 更新「後」ジャーナルを利用する。
  • ロールバック
    • トランザクション処理が異常終了したときに使用する。
      • Revert みたいなもん。「やっぱやめる」。
      • 更新「前」ジャーナルを利用する。

正規化

Q: そもそもなんで正規化するの?
A: 正規化されたテーブルじゃないと、レコードの Insert, Delete, Update ができないため。

● 第1正規化
+----+---------+       +------+---------+
| 01 | Pikachu |       | 01-1 | Pikachu |
|    | Kairyu  | ----> | 01-2 | Kairyu  |
| 02 | Yadoran |       | 02   | Yadoran |
+----+---------+       +------+---------+
● 第2(3)正規化
+----+-----+---------+        +----+-----+
| No | Id  | Name    |        | No | Id  |
+----+-----+---------+        +----+-----+
| 01 | 025 | Pikachu |        | 01 | 025 |
| 02 | 149 | Kairyu  | --+--> | 02 | 149 |
| 03 | 080 | Yadoran |   |    | 03 | 080 |
+----+-----+---------+   |    +----+-----+
                         |
                         |    +-----+---------+
                         |    | Id  | Name    |
                         |    +-----+---------+
                         |    | 025 | Pikachu |
                         +--> | 080 | Yadoran |
                              | 149 | Kairyu  |
                              +-----+---------+
  • 「Id が決まれば Name も決まる」ような状態は、正規化できる。
  • Id 列が主キーだった場合は第2正規化
  • Id 列が非主キーだった場合は第3正規化

その他

  • 更新可能なビューにするためには、一つの表からのデータを選択するときに加工を行ってはいけない。
  • デッドロック
    • 複数のトランザクションが、テーブルの複数行を異なる順序で相互に更新する可能性があるときに発生する。
  • カーソル
    • SQL を使うとクエリの結果がまとめて返ってくるけど、アプリケーションからは 1 行づつ扱いたいことがある。
    • これを叶えるもの。