- 追加された行はこの色です。
- 削除された行はこの色です。
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>高度午前 - 技術要素]]
*目次 [#hdcba025]
#contents
*概要 [#sf08fe78]
データベース = RDBMS
*詳細 [#u9b8282d]
**3層スキーマ [#kf017979]
***内部スキーマ [#zbbbc503]
ファイル構成、インデックスの編成など。
-ファイル構成、インデックスの編成など。
-B木インデックス構造
--ルートノードは
---1≦i≦2k レコード
---2k+1 枝
--ルートノード以外は 0≦i≦2k レコード
---k≦i≦2k レコード
---2k+1 枝
***概念スキーマ [#jecead0a]
-対象世界をモデル化した、ER図
-用語
--弱実体(weak entity)~
ON DELETE CASCADEの子エンティティ
--関数従属
|#|律|説明|h
|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に依存リレーションシップを足さないと重複登録できないみたいな。
***外部スキーマ [#c8bd1f43]
ビューなど。
-サブスキーマともいう。
-n列の射影の組合せは、2^n
-ビューなど。
--サブスキーマともいう。
--n列の射影の組合せは、2^n
-ビューの目的
--論理データ独立性の担保
--データの保護
**モデリング [#t86726ae]
***関連エンティティ [#r1cfd41e]
-多対多の2つのエンティティ間に挿入されるエンティティ
-2つのエンティティの主キーを足した主キーを持つ。
-以下の様に関連に"*"が集まる感じになる。
(A)1----*(関連)*----1(B)
(A)1 ---- *(関連)* ---- 1(B)
***関数従属・候補キー [#xf78b021]
-問題
--{A, B} → C
--{B, C} → D
--D → {A, E}
-分析~
推移関数従属を除いてルートを辿って候補キーを見つける。
--関数従属がループしていない時は難しくない。
--関数従属がループしている時は候補が増える感じ。~
起点にできる属性 or 冗長性の無い属性の組が候補キーになる。
--関数従属がループしている時は候補が増える感じ。
---起点にできる属性 or 冗長性の無い属性の組が候補キーになる。
---組み合わせの選定が難しい感ある。↓の例では、{B, D} → C
---関数従属のXXX律を使用して候補キーを見つける~
方法もあるようだが解法に規則性が無いので難しい。
--図示
{{┌A┐, B} → C} → D
└E┘←──────┘
***正規形 [#sb6b0126]
-非正規形
--繰り返し項目を持つ
--導出項目(算出できる値)を持つ
-第1正規形
--繰り返し項目を持たない
--導出項目(算出できる値)を持たない
-第2正規形
--第1正規形を満たしている
--主キーに対してすべての非キー属性が完全関数従属(≒部分関数従属しない状態)
-第3正規形
--第2正規形を満たしている
--どの候補キーに対しても非キー属性の推移的関数従属性が排除されている。
**DDL・DML [#bffc1731]
***テーブル [#pfe8e567]
-CREATE TABLE~
≒ [[関数従属・候補キー>#xf78b021]]の問題
***インデックス [#q304eb95]
-n段のB木インデックスの最大レコード数
--2段、K=1で計算すると、
---1段目 : 2 = 2
---2段目 : 3*2 = 6
---合計 : 2+6 = 8
---適合する式~
以下は、等比数列の和の公式に~
初項 a=2k, 公比 r=2k+1 項数 n を代入したもの。
= ( 2K + 1 ) ^ n - 1
***制約と操作 [#b2b075d7]
-制約で禁止され得る操作
--外部参照
---マスタ側に無いデータをトランザクション側に挿入
---トランザクション側にあるデータをマスタ側から削除
***関係演算 [#b2b075d7]
-関係演算
--射影(projection)~
SELECTの列指定
--選択(selection)~
SELECTのWHERE
--結合(join)~
---直積(CROSS JOIN)+選択~
SELECTのFROMに複数のテーブルを指定し、WHEREに結合条件を指定。
---内部結合(INNER JOIN)~
SELECTのINNER JOINに、結合テーブル、ONに結合条件を指定。
---外部結合(OUTER JOIN)~
SELECTのOUTER JOINに、結合テーブル、ONに結合条件を指定。~
(結合が出来なかった列も残る。LEFTやRIGHTで残す列を選択可能。)
--商(division)~
割られる側の関係(表)の中から割る側の値の組み合わせを含む組(行)を抽出し、~
重複する組(行)と割る側に含まれる属性を取り除いたものを求める。~
RDBMSに商を実行する句は無いので、他の方法で代替して実行するらしい。
-集合演算
集合演算は直積を除いて、型適合≒和両立(union-compatibility)が必要。
--和(集合)~
集合のいずれか少なくとも一つに含まれているような要素を全て集める~
ことにより得られる集合(を求める演算でRDBMSではUNION、UNION ALLが使える)。
--差(集合)~
ある集合の中から別の集合に属する要素を取り去って~
得られる集合(を求める演算でRDBMSではEXCEPT、MINUSが使える)
--積(集合)~
交叉とも言う共通部分(を求める演算でRDBMSではINTERSECTが使える)。
--直積(集合)
---(全ペアみたいな)全組合せ(を求める演算でRDBMSではCROSS JOINが使える)。
---積集合と言うとコチラを意味するケースが多いので前述の積集合は共通部分と呼ぶケースが多いらしい。
※ 共通部分 (R∩S) は、差 (R-(R-S)) で表現できるという問題が出たりする。