データ独立性 :データ(数字や文字列)と操作(プログラム)を分離する.
論理データ独立 :データを変更してもプログラムを変更不要(項目が増減,表が増減,構造の変更)
物理データ独立 :データの物理的な保存方法を変更してもプログラム変更不要(CSV,TSV,固定長ファイル,OS,CPU…)
外部スキーマ → 論理データ独立 → 概念スキーマ → 物理データ独立 → 内部スキーマ
データ一貫性 :格納されたデータが正確ないし妥当であること.DBは保証する.
複数の同時アクセス:ロックで解決.デッドロック問題.
機密保護
リレーション:データの関係(一対一,一対多,多対多)
他には
関係代数によってrelationを示す(集合と集合の関係)
集合演算(和集合,積集合,差集合,直積)
関係演算(選択,射影,結合)
選択:条件に合う行のみを取り出す
射影:指定した列のみを取り出す(select カラム名 from テーブル名;)
結合:指定した列に基づき2つの表を結合させる.(全部あれば等結合,それ以外は内部結合か外部結合)
内部結合:両方の表に存在するもののみ結合(inner join テーブル名 on 条件式;)
外部結合:存在しないものは空白(NULL)として結合
left outer join テーブル名 on 条件式;
right outer join テーブル名 on 条件式;
full outer join テーブル名 on 条件式;
履修科目
学生 | 講義名 |
---|---|
桂 | 哲学 |
桂 | 日本国憲法 |
桂 | 組織意思決定 |
桂 | 社会心理学 |
坂田 | 哲学 |
坂田 | 日本国憲法 |
坂本 | 日本国憲法 |
坂本 | ビジネスイノベーション |
坂本 | ベンチャービジネス論 |
開講情報
講義名 | 曜日 |
---|---|
哲学 | 月曜 |
日本国憲法 | 火曜 |
社会心理学 | 水曜 |
ビジネスイノベーション | 水曜 |
組織意思決定 | 木曜 |
ベンチャービジネス論 | 金曜 |
上記二つのテーブルを結合する
where句で書いてもjoin on 句で書いても等価
select * from 履修科目 join 開講情報 on 履修科目.講義名 = 講義情報.講義名;
select * from 履修科目, 開講情報 where 履修科目.講義名 = 講義情報.講義名;
三つ以上の場合は where句の条件式を and で結ぶ
where 条件式 and 条件式 and 条件式
学生 | 講義名 | 曜日 |
---|---|---|
桂 | 哲学 | 月曜 |
桂 | 日本国憲法 | 火曜 |
桂 | 組織意思決定 | 木曜 |
桂 | 社会心理学 | 水曜 |
坂田 | 哲学 | 月曜 |
坂田 | 日本国憲法 | 火曜 |
坂本 | 日本国憲法 | 火曜 |
坂本 | ビジネスイノベーション | 水曜 |
坂本 | ベンチャービジネス論 | 金曜 |
結合後のテーブルから 射影 する
select 講義名 from 受講状況;
講義名 |
---|
哲学 |
日本国憲法 |
組織意思決定 |
社会心理学 |
哲学 |
日本国憲法 |
日本国憲法 |
ビジネスイノベーション |
ベンチャービジネス論 |
先ほどの結合後のテーブルから 選択 する
select * from 受講状況 where 講義名 = "ビジネスイノベーション";
学生 | 講義名 | 曜日 |
---|---|---|
坂本 | ビジネスイノベーション | 水曜 |
履修科目
学生 | 講義名 |
---|---|
桂 | 哲学 |
桂 | 日本国憲法 |
桂 | 組織意思決定 |
桂 | 社会心理学 |
坂田 | 哲学 |
坂田 | 日本国憲法 |
坂本 | 日本国憲法 |
坂本 | ビジネスイノベーション |
坂本 | ベンチャービジネス論 |
開講情報
講義名 | 曜日 |
---|---|
哲学 | NULL |
日本国憲法 | 火曜 |
社会心理学 | 水曜 |
ビジネスイノベーション | 水曜 |
組織意思決定 | 木曜 |
ベンチャービジネス論 | 金曜 |
内部結合
学生 | 講義名 | 曜日 |
---|---|---|
桂 | 日本国憲法 | 火曜 |
桂 | 組織意思決定 | 木曜 |
桂 | 社会心理学 | 水曜 |
坂田 | 日本国憲法 | 火曜 |
坂本 | 日本国憲法 | 火曜 |
坂本 | ビジネスイノベーション | 水曜 |
坂本 | ベンチャービジネス論 | 金曜 |
外部結合
受講状況
学生 | 講義名 | 曜日 |
---|---|---|
桂 | 哲学 | NULL |
桂 | 日本国憲法 | 火曜 |
桂 | 組織意思決定 | 木曜 |
桂 | 社会心理学 | 水曜 |
坂田 | 哲学 | NULL |
坂田 | 日本国憲法 | 火曜 |
坂本 | 日本国憲法 | 火曜 |
坂本 | ビジネスイノベーション | 水曜 |
坂本 | ベンチャービジネス論 | 金曜 |
select:データを読み込む
insert:新規行を追加する
update:行のデータを変更する
delete:行を削除する
create:テーブル等を作成する
alter:テーブル等を変更する
drop:テーブル等を削除する
注意!
SQL文では大文字と小文字は区別されない
値やパターンを入力する際は "ダブルクオテーション" でくくる
行末は ; をつける
データを絞り込む条件式を形成する
ある条件にマッチする行のみを対象とする
like句を用いることで曖昧検索も可能
曖昧検索に用いる
%:任意の0文字以上の文字列
_:任意の1文字
テーブル等を作成する
テーブル名とカラム名,カラムの型を指定できる
カラムは列(縦)のこと
名前カラムを持つ登場人物テーブルを作成する
create table 登場人物 (名前);
名前カラムと誕生日カラムを持つキャラテーブルを作成する
create table キャラ (名前, 誕生日);
テーブル等を削除する
テーブルの削除の場合
キャラクターテーブルを削除する
drop table キャラ;
テーブルを変更する
テーブルの名前を変更する
テーブルにカラムを追加する
登場人物テーブルをキャラテーブルにリネームする
alter table 登場人物 rename to キャラ;
キャラテーブルに誕生日カラムを追加する
alter table 登場人物 add 誕生日;
テーブルに行を追加する
insert into テーブル名 values("カラム1の値", "カラム2の値", … );
キャラテーブルに 名前が金太郎で誕生日が10月10日である行を追加する
insert into キャラ values("金太郎","10月10日");
行を削除する
キャラテーブルから名前が金太郎の行を削除する
delete from "キャラ" where name = "金太郎";
指定したデータを抽出する
を指定すると,全てのデータという意味になる.
select * from テーブル名;
select * from テーブル名 where 条件式;
select * from テーブル名 where カラム名 like パターン;
キャラテーブルから名前が坂田銀時であるユーザの名前と誕生日を抽出する
select 名前 , 誕生日 from キャラ where 名前 = "坂田銀時";
キャラから名前に田を含むユーザの名前と誕生日を抽出する
select 名前 , 誕生日 from キャラ where 名前 like "%田%";
行のデータを変更する
条件句(WHERE句)で対象行を絞り込む
対象行が複数ある場合は,複数の行が全て置き換わる
キャラテーブルの坂田銀時の名前を坂田金時にする
update "キャラ" set "名前" = "坂田金時" where "名前" = "坂田銀時";
キャラテーブルの名前に田がつく人の名前を全てウイルス・ミスにする
update "キャラ" set "名前" = "ウイルス・ミス" where "名前" like "%田%";
テーブルの行を特定できる項目,項目の組み合わせ
複数の項目の組み合わせがキーとなる場合は 複合キー ともいう
名前 | 誕生日 | 所属 |
---|---|---|
坂田銀時 | 10月10日 | 万事屋 |
志村新八 | 8月12日 | 万事屋 |
神楽 | 11月3日 | 万事屋 |
近藤勲 | 9月4日 | 真選組 |
土方十四郎 | 5月5日 | 真選組 |
沖田総悟 | 7月8日 | 真選組 |
この場合は 名前 がキー
名前 | 誕生日 | 所属 |
---|---|---|
坂田銀時 | 10月10日 | 万事屋 |
志村新八 | 8月12日 | 万事屋 |
神楽 | 11月3日 | 万事屋 |
近藤勲 | 9月4日 | 真選組 |
土方十四郎 | 5月5日 | 真選組 |
沖田総悟 | 7月8日 | 真選組 |
名前が主キー
誕生日は候補キー(誕生日は被らない場合のみ)
誕生日は現状ではキーたり得るが,行が追加されると被ってしまうかもしれない
ID | 名前 | 誕生日 | 所属 |
---|---|---|---|
01 | 坂田銀時 | 10月10日 | 万事屋 |
02 | 志村新八 | 8月12日 | 万事屋 |
03 | 神楽 | 11月3日 | 万事屋 |
04 | 近藤勲 | 9月4日 | 真選組 |
05 | 土方十四郎 | 5月5日 | 真選組 |
06 | 沖田総悟 | 7月8日 | 真選組 |
ID | 名前 | 誕生日 | 所属 |
---|---|---|---|
01 | 坂田銀時 | 10月10日 | 万事屋 |
02 | 志村新八 | 8月12日 | 万事屋 |
03 | 神楽 | 11月3日 | 万事屋 |
04 | 近藤勲 | 9月4日 | 真選組 |
05 | 土方十四郎 | 5月5日 | 真選組 |
06 | 沖田総悟 | 7月8日 | 真選組 |
NULL | 長谷川 泰三 | 6月13日 | NULL |
履修科目
ID | 学生 | 講義名 |
---|---|---|
1 | 桂 | 哲学 |
2 | 桂 | 日本国憲法 |
3 | 桂 | 組織意思決定 |
4 | 桂 | 社会心理学 |
5 | 坂田 | 哲学 |
6 | 坂田 | 日本国憲法 |
7 | 坂本 | 日本国憲法 |
8 | 坂本 | ビジネスイノベーション |
9 | 坂本 | ベンチャービジネス論 |
開講情報
講義名 | 曜日 |
---|---|
哲学 | 月曜 |
日本国憲法 | 火曜 |
社会心理学 | 水曜 |
ビジネスイノベーション | 水曜 |
組織意思決定 | 木曜 |
ベンチャービジネス論 | 金曜 |
検索を高速にするために用いる
なんらかのルールでソートされていると検索しやすい
全ての行をソートするのは難しい(データがあとで増えた時は?)
生データと別にインデックス作成し,各行をポインタで示す
インデックスから検索する際,リニアサーチと バイナリサーチ が考えられる
リニアサーチ : スキャン
バイナリサーチ : シーク
クラスタインデックス
非クラスタインデックス
データベースの表と表の関係を示す図
記法
教科書の書き⽅
IE記法 (Information Engineering記法)
IDEF1X記法 (Integration Definition記法 )
Peter Chen記法
様々な記法があるが基本は同じ
どれも三つの構成要素からなる
教科書の書き方
教科書の書き方の例
使いやすいデータ,更新異常の発生しないデータを作る
非正規形
第一正規形 :値がスカラー(集合やベクトルでない)
第二正規形 :非キー属性が全ての候補キーに完全従属
第三正規形 :非キー属性が候補キーに非推移的関数従属
ボイスコット正規形 :非キー属性が主キーに完全従属している
第四正規形 :自明でない多値従属性を排除する
第五正規形 :結合従属性の決定項が候補キーのみ
実質は第三正規形まで
授業で扱うのも第三正規形まで
ボイスコット正規形が存在することのみ把握する必要あり
非正規形
名前 | アイテム名 | 価格 |
---|---|---|
坂田銀時 | いちごみるく | 120 |
坂田銀時 | 週刊少年ジャンプ | 270 |
坂田銀時 | 週刊少年ジャンプ | 270 |
坂田銀時 | 木刀,財布 | 4000, 1500 |
土方十四郎 | マヨネーズ | 270 |
土方十四郎 | タバコ | 600 |
土方十四郎 | タバコ | 600 |
土方十四郎 | タバコ | 580 |
土方十四郎 | 刀 | 200000 |
土方十四郎 | 週刊少年ジャンプ | 270 |
土方十四郎 | 財布 | 20000 |
第一正規形 ①
名前 | アイテム名 | アイテムID | 数量 | 単価 |
---|---|---|---|---|
坂田銀時 | いちごみるく | 01 | 01 | 120 |
坂田銀時 | 週刊少年ジャンプ | 01 | 01 | 270 |
坂田銀時 | 週刊少年ジャンプ | 02 | 01 | 270 |
坂田銀時 | 木刀 | 01 | 01 | 4000 |
坂田銀時 | 財布 | 01 | 01 | 15000 |
土方十四郎 | マヨネーズ | 01 | 01 | 270 |
土方十四郎 | タバコ | 01 | 02 | 600 |
土方十四郎 | タバコ | 02 | 01 | 580 |
土方十四郎 | 刀 | 01 | 01 | 200000 |
土方十四郎 | 週刊少年ジャンプ | 01 | 01 | 270 |
土方十四郎 | 財布 | 01 | 01 | 20000 |
第一正規形 ②
ID | 名前 | アイテム名 | アイテムID | 数量 | 単価 |
---|---|---|---|---|---|
001 | 坂田銀時 | いちごみるく | 01 | 01 | 120 |
002 | 坂田銀時 | 週刊少年ジャンプ | 01 | 01 | 270 |
003 | 坂田銀時 | 週刊少年ジャンプ | 02 | 01 | 270 |
004 | 坂田銀時 | 木刀 | 01 | 01 | 4000 |
005 | 坂田銀時 | 財布 | 01 | 01 | 15000 |
006 | 土方十四郎 | マヨネーズ | 01 | 01 | 270 |
007 | 土方十四郎 | タバコ | 01 | 02 | 600 |
007 | 土方十四郎 | タバコ | 02 | 01 | 580 |
008 | 土方十四郎 | 刀 | 01 | 01 | 200000 |
009 | 土方十四郎 | 週刊少年ジャンプ | 01 | 01 | 270 |
010 | 土方十四郎 | 財布 | 01 | 01 | 20000 |
第一正規形
名前 | アイテム名 | アイテムID | 価格 | 販売場所 |
---|---|---|---|---|
坂田銀時 | いちごみるく | 01 | 120 | コンビニ |
坂田銀時 | 週刊少年ジャンプ | 01 | 270 | コンビニ |
坂田銀時 | 週刊少年ジャンプ | 02 | 270 | コンビニ |
坂田銀時 | 木刀 | 01 | 4000 | 通販 |
坂田銀時 | 財布 | 01 | 15000 | 百貨店 |
土方十四郎 | マヨネーズ | 01 | 300 | コンビニ |
土方十四郎 | タバコ | 01 | 600 | タバコ屋 |
土方十四郎 | タバコ | 02 | 580 | タバコ屋 |
土方十四郎 | 刀 | 01 | 200000 | 刀匠 |
土方十四郎 | 週刊少年ジャンプ | 01 | 270 | コンビニ |
土方十四郎 | 財布 | 01 | 20000 | 百貨店 |
第二正規形 (所有アイテム)
名前 | アイテム名 | アイテムID | 価格 |
---|---|---|---|
坂田銀時 | いちごみるく | 01 | 120 |
坂田銀時 | 週刊少年ジャンプ | 01 | 270 |
坂田銀時 | 週刊少年ジャンプ | 02 | 270 |
坂田銀時 | 木刀 | 01 | 4000 |
坂田銀時 | 財布 | 01 | 15000 |
土方十四郎 | マヨネーズ | 01 | 300 |
土方十四郎 | タバコ | 01 | 600 |
土方十四郎 | タバコ | 02 | 580 |
土方十四郎 | 刀 | 01 | 200000 |
土方十四郎 | 週刊少年ジャンプ | 01 | 270 |
土方十四郎 | 財布 | 01 | 20000 |
第二正規形 (販売場所)
いちごみるく | コンビニ |
---|---|
週刊少年ジャンプ | コンビニ |
木刀 | 通販 |
財布 | 百貨店 |
マヨネーズ | コンビニ |
タバコ | タバコ屋 |
刀 | 刀匠 |
第二正規形
ID | 名前 | 誕生日 | 所属 | 代表 |
---|---|---|---|---|
01 | 坂田銀時 | 10月10日 | 万事屋 | 坂田銀時 |
02 | 志村新八 | 8月12日 | 万事屋 | 坂田銀時 |
03 | 神楽 | 11月3日 | 万事屋 | 坂田銀時 |
04 | 近藤勲 | 9月4日 | 真選組 | 近藤勲 |
05 | 土方十四郎 | 5月5日 | 真選組 | 近藤勲 |
06 | 沖田総悟 | 7月8日 | 真選組 | 近藤勲 |
第三正規形 (名前)
ID | 名前 |
---|---|
01 | 坂田銀時 |
02 | 志村新八 |
03 | 神楽 |
04 | 近藤勲 |
05 | 土方十四郎 |
06 | 沖田総悟 |
第三正規形 (パーソナルデータ)
名前 | 誕生日 | 所属 |
---|---|---|
坂田銀時 | 10月10日 | 万事屋 |
志村新八 | 8月12日 | 万事屋 |
神楽 | 11月3日 | 万事屋 |
近藤勲 | 9月4日 | 真選組 |
土方十四郎 | 5月5日 | 真選組 |
沖田総悟 | 7月8日 | 真選組 |
第三正規形 (組織情報)
所属 | 代表 |
---|---|
万事屋 | 坂田銀時 |
真選組 | 近藤勲 |
名前 | 科目 | 得点 |
---|---|---|
桂 | 習字 | 80 |
桂 | 算盤 | 70 |
桂 | 地理 | 80 |
坂田 | 習字 | 60 |
坂田 | 算盤 | 50 |
坂田 | 地理 | 70 |
坂本 | 習字 | 40 |
坂本 | 算盤 | 90 |
坂本 | 地理 | 80 |
高杉 | 習字 | 80 |
高杉 | 算盤 | 80 |
高杉 | 地理 | 80 |
名前 | 習字 | 算盤 | 地理 |
---|---|---|---|
桂 | 80 | 70 | 80 |
坂田 | 60 | 50 | 70 |
坂本 | 50 | 90 | 80 |
高杉 | 80 | 80 | 80 |
所持金
名前 | 所持金 |
---|---|
坂田銀時 | 2000 |
土方十四郎 | 4000 |
所持品
名前 | 所持品 |
---|---|
坂田銀時 | イチゴ牛乳 |
坂田銀時 | 週刊少年ジャンプ |
土方十四郎 | マヨネーズ |
土方十四郎 | タバコ |
土方十四郎 | 土方スペシャル |
複数のトランザクションがロックされた情報にアクセスするために互いの処理終了を待ち,そこから処理が進まなくなる
簡単な例)AとBが互いにお金を振り込む