SQL」タグアーカイブ

VBA エクセルからSQL実行

以前作ったものにSELECT以外も動くように少し修正。
SQLの動きを調べるのにエクセルからテーブルの作成やSQLの実行ができると楽。

 

SQL インデックス

基本はB-tree(B+tree)インデックスが利用されることが多い。

特徴としては、ノードにキーを持ち、リーフノードにポインタがある。作成時はキーをソートする。
リーフノードまでの距離が均一でバランスがいいのが特徴。

インデックスが必要な箇所

大規模(数万以上)なテーブル。規模が小さいとフルスキャンと大差ない。

カーディナリティ(入る値の種類数のこと)が高い列。さらに入る値が集中していないこと。

検索条件や結合条件の列以外は無意味。(検索条件内でもインデックスの列で演算などするとダメ)注意点として、否定形(<>)やORやLIKE演算子はダメで、暗黙の型変換もダメ。

主キーは既にインデックスされているので不要。

SQL EXCEPT, INTERSECTについて

Accessでは使えないためSQL Serverも利用した。

久しぶりに動かしたら
your sql server installation is either corrupt or has been tampered
というエラー。

ほとんど使わないので関連サービスを止めていた。

管理ツールのサービスから
SQL Server (SQLEXPRESS)
手動起動したら繋がった。

SQL DB正規化

直ぐ忘れてしまう。

先ず、一方の値が決まると他方も決まるものを、関数従属性という。

第一正規化

一つのセルに複数のデータを持たない。

第二正規化

部分関数従属を取り除く。
部分関数従属とは、主キーの一部だけで一意に決まる列のこと。

主キーが複数あり、その内の一つだけで値が決まるものを別のテーブルにする。

第三正規化

推移的関数従属を取り除く。

推移的関数従属とは、テーブル内の段階的な関数従属のこと。
つまり、主キー以外と関数従属があること。

主キー以外の項目で、他の列の値を一意に決めるものを別テーブルにする。

例えば、(主)社員ID → 部署コード → 部署名

部署コードが決まれば部署名が決まる。当然主である社員IDと部署コードは関数従属の関係なので、
段階的な関数従属があるといえる。

部分関数従属、推移的関数従属を取り除くことの必要性。

あるテーブルの中で推移的関数従属が残っていると、間違った登録が可能。(会社コードと会社名)
また、主キーが不明の段階で登録できない。

キー| メンバー名 | 会社コード  | 会社名
1  | 太郎     | 0000   | AAA
2  | 次郎     | 0001   | AAA

テーブルの関連

1対1、1対多、多対多があるが、通常1対多のみ使う。

多対多となる場合、関連実体というテーブルを作る。ただ、通常の業務要件では、
マスタとマスタを直接関連付けることはないので、普通に考えると多対多とはならない。