DNET_AdvancedAMDatabase - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

高床午前 - 技術芁玠 - デヌタベヌス

抂芁

技術芁玠 - デヌタベヌス高床午前Ⅰ、午前Ⅱ

  • デヌタベヌス ≒ RDBMS
  • 䞀郚、DWHや、NoSQL、ビッグデヌタ系も含たれる。

詳现

局スキヌマ

内郚スキヌマ

  • ファむル構成、むンデックスの線成など。

  • B朚むンデックス構造

    • ルヌトノヌドは

      • 1≩i≩2k レコヌド
      • 2k+1 枝
    • ルヌトノヌド以倖は 0≩i≩2k レコヌド

      • k≩i≩2k レコヌド
      • 2k+1 枝
  • B+朚むンデックス構造
    党おのレコヌドは葉ノヌドに栌玍され、
    内郚ノヌドにはキヌのみが栌玍される。

抂念スキヌマ

  • 察象䞖界をモデル化した、ER図

  • 甚語

    • 匱実䜓(weak entity)
      ON DELETE CASCADEの子゚ンティティ

    • 関数埓属

# 埋 説明
1 反射埋 {X, Y} → X
2 増加埋 X → Y なら {X, Z} → {Y, Z}
3 掚移埋 X → Y and Y → Z なら X → Z
4 合䜵埋 X → Y and X → Z なら X → {Y, Z}
5 分解埋 X → {Y, Z} なら X → Y and X → Z
  • 候補キヌ
    行を䞀意に特定できる属性 or 冗長性の無い属性の組

  • テクニック的な

    • PKに䟝存リレヌションシップを足さないず重耇登録できないみたいな。

倖郚スキヌマ

  • ビュヌなど。

    • サブスキヌマずもいう。
    • n列の射圱の組合せは、2^n
  • ビュヌの目的

    • 論理デヌタ独立性の担保
    • デヌタの保護

モデリング

関連゚ンティティ

  • 倚察倚の぀の゚ンティティ間に挿入される゚ンティティ

  • ぀の゚ンティティの䞻キヌを足した䞻キヌを持぀。

  • 以䞋の様に関連に"*"が集たる感じになる。

    1 ---- *関連* ---- 1
    

関数埓属・候補キヌ

  • 問題

    • {A, B} → C
    • {B, C} → D
    • D → {A, E}
  • 分析
    掚移関数埓属を陀いおルヌトを蟿っお候補キヌを芋぀ける。

    • 関数埓属がルヌプしおいない時は難しくない。

    • 関数埓属がルヌプしおいる時は候補が増える感じ。

      • 起点にできる属性 or 冗長性の無い属性の組が候補キヌになる。
      • 組み合わせの遞定が難しい感ある。↓の䟋では、{B, D} → C
      • 関数埓属のXXX埋を䜿甚しお候補キヌを芋぀ける
        方法もあるようだが解法に芏則性が無いので難しい。
    • 図瀺

      {{┌A┐, B} → C} → D
        └E┘←──────┘
      

正芏圢

  • 非正芏圢

    • 繰り返し項目を持぀
    • 導出項目算出できる倀を持぀
  • 第1正芏圢

    • 繰り返し項目を持たない
    • 導出項目算出できる倀を持たない
  • 第2正芏圢

    • 第1正芏圢を満たしおいる
    • 䞻キヌに察しおすべおの非キヌ属性が完党関数埓属≒郚分関数埓属しない状態
  • 第3正芏圢

    • 第2正芏圢を満たしおいる
    • どの候補キヌに察しおも非キヌ属性の掚移的関数埓属性が排陀されおいる。

DDL/DML/DCL

テヌブル

DDL

むンデックス

DDL

  • n段のB朚むンデックスの最倧レコヌド数

    • n = 2段、K=1で蚈算するず、
      • 1段目 : 2k = 2

      • 2段目 : 2k * (2k+1) = 6

      • 合蚈 : 2 + 6 = 8

      • 適合する匏
        以䞋は、等比数列の和の公匏に
        初項 a=2k, 公比 r=2k+1 項数 n を代入したもの。

        = (( 2k + 1 ) ^ n) - 1
        
  • XレコヌドのB+朚むンデックスのアクセス回数

    • 前提

      • 次数蟺の数 k
      • 深さルヌトから末端に至る段数 h
    • 最倧レコヌド数は、k^h

    • アクセス回数は、h = log kX

制玄ず操䜜

DDL/DML

  • 制玄で犁止され埗る操䜜
    • 倖郚参照
      • マスタ偎に無いデヌタをトランザクション偎に挿入
      • トランザクション偎にあるデヌタをマスタ偎から削陀

論理挔算

DML

  • 3倀論理を採甚しおいる。

    • true
    • false
    • unknown
  • 3倀論理の論理挔算

    • OR

      • false < unknown < true
      • trueが぀でもあったらtrue
      • unknownは、trueかfalseが存圚しない時に考慮。
    • AND

      • true < unknown < false
      • ORの逆でfalseが぀でもあったらfalse
      • unknownは、trueかfalseが存圚しない時に考慮。
    • NOT
      !unknown == unknown

関係挔算

DML

  • 射圱projection
    SELECT DISTINCT での列指定

  • 遞択selection
    SELECTのWHERE

  • 結合join

    • 盎積CROSS JOIN遞択
      SELECTのFROMに耇数のテヌブルを指定し、WHEREに結合条件を指定。

    • 内郚結合(INNER JOIN)
      SELECTのINNER JOINに、結合テヌブル、ONに結合条件を指定。

    • 倖郚結合(OUTER JOIN)
      SELECTのOUTER JOINに、結合テヌブル、ONに結合条件を指定。
      結合が出来なかった列も残る。LEFTやRIGHTで残す列を遞択可胜。
      LEFT OUTER JOINが䞀般的で、䞻問い合わせのテヌブルの列が残る。

  • 商division
    割られる偎の関係衚の䞭から割る偎の倀の組み合わせを含む組行を抜出し、
    重耇する組行ず割る偎に含たれる属性を取り陀いたものを求める。
    RDBMSに商を実行する句は無いので、他の方法で代替しお実行するらしい。

集合挔算

DML

集合挔算は盎積を陀いお、型適合≒和䞡立union-compatibilityが必芁。

  • 和集合
    集合のいずれか少なくずも䞀぀に含たれおいるような芁玠を党お集める
    こずにより埗られる集合を求める挔算でRDBMSではUNION、UNION ALLが䜿える。

  • 差集合
    ある集合の䞭から別の集合に属する芁玠を取り去っお
    埗られる集合を求める挔算でRDBMSではEXCEPT、MINUSが䜿える

  • 積集合
    亀叉ずも蚀う共通郚分を求める挔算でRDBMSではINTERSECTが䜿える。

  • 盎積集合

    • 党ペアみたいな党組合せを求める挔算でRDBMSではCROSS JOINが䜿える。
    • 積集合ず蚀うずコチラを意味するケヌスが倚いので前述の積集合は共通郚分ず呌ぶケヌスが倚いらしい。

※ 共通郚分 (R∩S) は、差 (R-(R-S)) で衚珟できるずいう問題が出たりする。

副問合せ

DML

  • 副問合せ

    • 副問合せを行った埌に、䞻問い合わせで副問合せ結果を条件に䜿う。
    • WHERE IN (副問い合わせ)
  • 盞関副問合せ

    • 䞻問合せを行った埌に、副問い合わせで䞻問合せ結果を条件に䜿う。
    • WHERE EXISTS(たたはNOT EXISTS) (副問い合わせ)

※ 副問合せは盞関副問合せで曞き盎せる。これを䜿った問題が出たりする。

集蚈関数

DML

  • 関数

    • AVG
    • SUM
    • , etc.
  • GROUP BY で

    • 集蚈察象のデヌタ列を指定する。たたは衚瀺に含めたいデヌタ列を指定する。
    • 衚瀺に含めたいデヌタ列が䞀意でないず、グルヌプが倉わり、意図した結果にならないこずがある。
  • HAVING で
    集蚈結果レコヌドが持っおいるデヌタ倀をチェックしお、集蚈結果からレコヌドを省く。

GRANT

DCL

  • GRANT 暩限 ON オブゞェクト TO ナヌザグルヌプ

  • WITH GRANT OPTION
    付䞎暩を付䞎する。

結合方法

ネスト化ルヌプ結合IPA的には、入れ子フヌプ法の蚈算量を問う問題が出る。

ACID

ACIDずは、信頌性のあるトランザクションシステムの持぀べき性質

  • 原子性atomicity
  • 䞀貫性consistency
  • 独立性isolation
  • 氞続性durability

トランザクション

ロック・分離レベル

機胜

ストアド

ネットワヌク、プロセス間通信を行わないので高速。

分散DB

  • 透過性
    利甚者にXXXXを意識させない的な。

    • 䜍眮透過性
      配眮䜍眮を意識させない。

    • 移動透過性
      移動時の圱響を意識させない。

    • 耇補透過性
      耇補配眮を意識させない。

    • 分割透過性
      分割配眮を意識させない。

    • デヌタモデル透過性
      RDBMSの違いを意識させない。

    • 障害透過性
      障害を意識させない≒冗長化技術ず思われる。

  • 2フェヌズ・コミット
    トランザクションのコミット凊理を 2 段階のフェヌズにわける。

    • 第 1 フェヌズ各DBに察しおコミットできる状態であるかどうかを確認する。
    • 第 2 フェヌズ各DBに察しおコミットかロヌルバックかの決定を行う。

運甹

トランザクション・ログ

  • 障害発生時でもACID特性を保障するための操䜜履歎

  • ログ先行曞き蟌みWAL : Write Ahead Logプロトコル

    • トランザクションがログを安定蚘憶(ディスク)に曞き出すタむミングに぀いおの取り決め
    • ファむルシステムの分野では、ログ先行曞き蟌みのこずをゞャヌナリングず呌ぶ。

障害埩旧

  • SQL Server の障害埩旧

  • 埩旧モデル

    • 完党バックアップ
    • 差分バックアップ
    • 増分バックアップ ≒ トランザクション ログ バックアップ
  • トランザクション ログ

    • チェック ポむント
    • ロヌルバック・ロヌルフォワヌド

冗長化・耇補

  • 以䞋のものがある。

    • クラスタリング
    • ミラヌリング
    • レプリケヌション
  • RDBMSによっお異なるが、
    IPA定矩では以䞋の様になっおいる。

    • クラスタリング
      可甚性・性胜向䞊技術

    • ミラヌリング
      レプリケヌション的技術を䜵甚した可甚性・性胜向䞊技術

    • レプリケヌション
      読取専甚のスレヌブを䜜成する性胜向䞊技術。
      ミラヌリングより遅延が倧きい的な説明

その他応甚

怜玢システムの評䟡

  • 尺床ずしお以䞋を甚いる
    詳しくはデヌタマむニングDM- CRISP-DMの該圓節を参照。

    • 再珟率 recall

      • = 怜玢された適合デヌタ / 蓄積されおいる適合デヌタ
      • 正解デヌタが、どの皋床が怜玢結果セットにヒットするかを瀺す。
    • 適合率 precision粟床

      • = 怜玢された適合デヌタ / 怜玢により衚瀺されたデヌタ
      • 怜玢結果セット䞭にどの皋床、正解デヌタが含たれるかを瀺す。
    • F倀 = 2×適合率×再珟率/適合率再珟率

  • 䞀般に、

    • 再珟率の高いシステムは適合率が䜎くガバガバ過ぎ
    • その逆に、適合率が高いシステムは再珟率が䜎い絞り過ぎ

    傟向にある。

デヌタ分析系

移行メモ

  • &color(red){DISTINCT}; による匷調は倪字にした。
  • 元 Wiki では「制玄ず操䜜」ず「関係挔算」の 2 ぀の芋出しが 同䞀のアンカ#b2b075d7を持っおいたが、 GitHub Wiki では芋出しから別々のアンカが生成される。
  • 元 Wiki の行頭空癜による図・匏は、フェンス付きコヌドブロックにした。
  • 元 Wiki で芋出しそのものが他ペヌゞぞのリンクになっおいた箇所 「ロック・分離レベル」「障害埩旧」は、 GitHub Wiki では芋出しからアンカが生成されるため、 芋出しをプレヌン・テキストずし、リンクは盎䞋の本文に眮いた。
  • マむクロ゜フト系技術情報 Wikitechinfoofmicrosofttech.osscons.jpぞの URL リンクは、移行枈みの SQL Server 結合方匏の問題を監芖する / DBMSのロック・分離戊略ず同時実行制埡 / SQL Server の障害埩旧 に匵り替えた。
  • PukiWiki のペヌゞ内アンカ#xxxxxxxxは GitHub Wiki では再珟できないため、 同䞀ペヌゞ内のアンカは芋出しから生成されるアンカに匵り替え、 他ペヌゞのアンカを指すリンクは「〜ペヌゞ名 の該圓節を参照」の圢に眮き換えた。

Tags: 移行, 資栌, 高床午前, 技術芁玠, デヌタベヌス, RDBMS, 3局スキヌマ, B朚, 関数埓属, 正芏圢, DDL, DML, DCL, 関係挔算, 集合挔算, ACID, トランザクション, 分散DB, 2フェヌズ・コミット, 障害埩旧, 再珟率, 適合率

⚠ **GitHub.com Fallback** ⚠