Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベースの基本設計

 データベースの基本設計

データベースの設計についてまとめた資料です。

Masato Tezuka

October 06, 2023
Tweet

More Decks by Masato Tezuka

Other Decks in Programming

Transcript

  1. データベースに関係する用語 ・データ  ある形式に揃えられた事実.
 ・データベース(DB)  データの集まり. 二次元の表.
 ・ DBMS(Database Management System)

     データベースを管理するシステム.(MySQL、PostgreSQL)
  データベースを使わないシステムはない.
 ・情報  データ+文脈. 
  データからある文脈なり観点なりに従って、集約したり加工したもの.
 ・データベースの代表的モデル ・リレーショナルデータベース ・オブジェクト指向データベース  ・XMLデータベース
  2. テーブル テーブルとは、共通点を持ったレコードの集合. テーブルにおいて、縦と横のデータの組みを「行」と「列」という. 社員ID 社員名 年齢 部署 001A 藤本 28

    開発 001B 手塚 35 営業 001C 福谷 30 人事 002A 山岡 42 開発 002B 井上 27 営業 002B 井上 27 営業 行(レコード) 列(カラム・属性)
  3. 外部キー 外部キーは2つのテーブル間の列同士で設定する.(親子関係を作る) 子テーブルは親テーブルを参照するので一種の制約が形成される. = 参照整合性制約 社員ID 社員名 年齢 部署 001A

    藤本 28 開発 001B 手塚 35 営業 001C 福谷 30 人事 002A 山岡 42 開発 002B 井上 27 営業 部署 開発 営業 人事 開発 営業 外部キー 子テーブル 親テーブル
  4. データの登録での注意点 親テーブルにない部署があるレコードは子テーブルに登録できない. 社員ID 社員名 年齢 部署 001A 藤本 28 開発

    001B 手塚 35 営業 001C 福谷 30 人事 002A 山岡 42 開発 002B 井上 27 営業 004A 松永 52 研究 社員ID 社員名 年齢 部署 部署 開発 営業 人事 開発 営業 子テーブル 親テーブル
  5. 第1正規化の流れ 社員ID 社員名 子 001A 藤本 太朗 二朗 001B 手塚

    001C 福谷 花子 社員ID 社員名 子1 001A 藤本 太朗 001B 手塚 001C 福谷 花子 二朗 子2 社員ID 社員名 子 001A 藤本 太朗 001A 藤本 001B 手塚 二朗 001C 福谷 花子 社員ID 社員名 001A 藤本 001B 手塚 001C 福谷 社員ID 子 001A 太朗 001A 二朗 001C 花子 wide型 long型 主キーにNULLが含むのはNG 無駄なデータ領域が多く、拡張性が低い. 主キー
  6. 第2正規化 第2正規化とは、部分関数従属を解消し完全関数従属のみテーブルにすることである. 異なるレベルのエンティティをテーブルとして分離することでもある. 会社コード 会社名 社員ID 社員名 年齢 部署コード 部署

    C001 A食品 001A 藤本 28 D002 開発 C001 A食品 001B 手塚 35 D001 営業 C001 A食品 001C 福谷 30 D003 人事 C002 B化成 002A 山岡 42 D002 開発 C002 B化成 002B 井上 27 D001 営業 このテーブルの主キーは{会社コード, 社員ID}であり、「会社名」は部分関数従属している.
  7. 第2正規化の流れ 第2正規化は可逆的な操作であり無損失分解である. 会社コード 会社名 社員ID 社員名 年齢 部署コード 部署 C001

    A食品 001A 藤本 28 D002 開発 C001 A食品 001B 手塚 35 D001 営業 C001 A食品 001C 福谷 30 D003 人事 C002 B化成 002A 山岡 42 D002 開発 C002 B化成 002B 井上 27 D001 営業 会社コード 社員ID 社員名 年齢 部署コード 部署 C001 001A 藤本 28 D002 開発 C001 001B 手塚 35 D001 営業 C001 001C 福谷 30 D003 人事 C002 002A 山岡 42 D002 開発 C002 002B 井上 27 D001 営業 会社コード 会社名 C001 A食品 C002 B化成 第2正規形でないと、、、 社員のデータはなく、新たな会社名のデータのみを登録→社員IDをNULLにするしかない.
  8. 第3正規化 第3正規化とは、テーブル内部の推移的関数従属をなくすことである. 推移的関数従属とは、テーブル内部に存在する段階的な従属関係のこという. 会社コード 社員ID 社員名 年齢 部署コード 部署 C001

    001A 藤本 28 D002 開発 C001 001B 手塚 35 D001 営業 C001 001C 福谷 30 D003 人事 C002 002A 山岡 42 D002 開発 C002 002B 井上 27 D001 営業 {会社コード, 社員ID} → {部署コード} → {部署} 非キー項目が他の項目に関数従属している.
  9. 第3正規化の流れ 会社コード 社員ID 社員名 年齢 部署コード 部署 C001 001A 藤本

    28 D002 開発 C001 001B 手塚 35 D001 営業 C001 001C 福谷 30 D003 人事 C002 002A 山岡 42 D002 開発 C002 002B 井上 27 D001 営業 会社コード 社員ID 社員名 年齢 部署コード C001 001A 藤本 28 D002 C001 001B 手塚 35 D001 C001 001C 福谷 30 D003 C002 002A 山岡 42 D002 C002 002B 井上 27 D001 部署コード 部署 D002 開発 D001 営業 D003 人事 D002 開発 D001 営業 第3正規形でないと、、、 社員のデータはなく、新たな部署のデータのみを登録→社員IDをNULLにするしかない.
  10. 正規化のまとめ 正規化は関数従属性を満たす必要がある. 第2正規化では主キー、第3正規化では非キーに着目する. 会社コード 社員ID 社員名 年齢 部署コード C001 001A

    藤本 28 D002 C001 001B 手塚 35 D001 C001 001C 福谷 30 D003 C002 002A 山岡 42 D002 C002 002B 井上 27 D001 部署コード 部署 D002 開発 D001 営業 D003 人事 D002 開発 D001 営業 会社コード 会社名 C001 A食品 C002 B化成 主キー 非キー 会社コード 会社名 社員ID 社員名 年齢 部署コード 部署 C001 A食品 001A 藤本 28 D002 開発 C001 A食品 001B 手塚 35 D001 営業 C001 A食品 001C 福谷 30 D003 人事 C002 B化成 002A 山岡 42 D002 開発 C002 B化成 002B 井上 27 D001 営業