基本情報の勉強をしてみた ①データベース
文系出身の私が、営業職として飛び込んだIT業界。現在育休中なので隙間時間にて改めてITのお勉強。。。難しいなと思ったポイントを備忘録として整理しておきます。
データベースとは
データベースとは、大量のデータを統合し組織的に管理・蓄積管理したものであり、目的のデータを効率よく検索できる仕組みとなっている。ファイルでの取り扱いと比べて、得られるメリットとしては下記が挙げられる。
・データの一貫性が保てる(完全性)
・データの独立性が高い(独立性)
・データを同時に利用できる(安全性)
リレーショナルデータベースとは
現在主流となっているのは関係データベース(リレーショナル型)である。データを表形式で管理する。この表は、列(属性)ならびに行(組)からなる。有名な製品で言うと、Oracle, MySQL, SQLServer, PostageSQL などが挙げられる。
リレーショナルデータベースは、DBMS(データベース管理システム)に依存する。代表的な機能は下記。
・データベース定義機能
DDL(データ定義言語)にて、データベースの作成を行う
・データベース操作機能
DML(データ操作言語)にて、データに指示を出し、データベースの操作を行う
・データベース管理機能
データベースは同時に複数ユーザーからのアクセスが生じうるもの。保全(排他制御、障害回復など)、秘密保護(アクセス制御、暗号化)を行う。
データベースの正規化
関係モデルでデータベースを構築する際に必要となる作業であり、データの冗長性をなくし一貫性と整合性を保つ。一般的に第三正規化まで行う。
・正規化の手順を理解するための用語
非正規化:生データ。整理されておらず重複部分を持った状態。
候補キー:テーブルの中で1つのレコードを特定できるカラム、またはカラムの組み合わせ。
主キー:上記候補キーの中から開発者が一つを選んだもの。ただし、空値は使えない。(NOT NULL)
関数従属性:ある項目の値が決まれば、それに対応して他の項目の値も決まる性質のこと。
(例)社員番号→社員名
推移関数従属性:第二正規化を行った表において、キー項目以外の項目に関数従属していること。
正規化の流れ
非正規形
ただ並んでいる状態
受注番号 | 受注日 | 得意先コード ・・・ | 商品コード | 商品名 | 販売価格 | 受注数量 | 受注金額 |
---|---|---|---|---|---|---|---|
商品コード | 商品名 | 販売価格 | 受注数量 | 受注金額 | |||
商品コード | 商品名 | 販売価格 | 受注数量 | 受注金額 | |||
商品コード | 商品名 | 販売価格 | 受注数量 | 受注金額 |
①第1正規化
テーブルで表現できるようにする。繰り返し部分を1つのレコードとすべく、行を特定できるキーとなる項目(候補キー)が必要になる。計算によって求めることができるものは除外する。
受注番号・・・ | 商品コード | 商品名 | 販売価格 | 受注数量 |
---|
②第2正規化
テーブルのすべての候補キーにおいて部分関数従属性を排除し、別の表にする。
受注番号 | 受注日 | 得意先コード | 得意先名 | 得意先住所 |
---|
受注番号 | 商品コード | 受注数量 |
---|
商品コード | 商品名 | 販売単価 |
---|
※赤字=主キー
※青字=外部キー
③第3正規化
キー項目以外でも他の値を特定できる、非キー属性の関数従属を排除し、別の表にする。
受注番号 | 受注日 | 得意先コード | 得意先名 | 得意先住所 |
---|
得意先コード | 得意先名 | 得意先住所 |
---|
受注番号 | 商品コード | 受注数量 |
---|
商品コード | 商品名 | 販売単価 |
---|
リレーショナルデータベース言語 - SQL
SQLは(Structured Query Language) は関係データベースを操作するための一般的な言語である。データ定義を行うDDL(Data Definition Language)、データ操作を行うDML(Data Manipulation Language)、データ制御を行うDCL(Data Control Language)から成る。
全ては難しいが、一旦以下コマンドは覚えておく。
DDL | DML | DCL |
---|---|---|
CREATE 作成 | INSERT 挿入 | GRANT 権限付与 |
ALTER 変更 | UPDATE 更新 | REVOKE 権限剥奪 |
DROP 消去 | DELETE 消去 | |
SELECT 選択 |
DMLによる操作
・INSERT 挿入
① INSERT INTO 表名 VALUES 列のデータ, ・・・
② INSERT INTO 表名 SELECT ・・・
(例文)
商品表にB200の商品データを追加する
INSERT INTO 商品表 VALUES ('B200','商品B',160)
品番 | 商品名 | 単価 |
---|---|---|
A100 | 商品A | 80 |
B200 | 商品B | 160 |
・UPDATE 更新
UPDEATE 表名 SET 列名 = 式 WHERE 条件
(例文)
商品表の全ての単価を2割引にする
UPDATE 商品表 SET 単価 = 単価* 80/100
品番 | 商品名 | 単価 |
---|---|---|
A100 | 商品A | 64 |
B200 | 商品B | 128 |
・DELETE 消去
DELETE FROM 表名 WHERE 条件
(例文)
商品表の品番B200の行を消去する
DELETE FROM 商品表 WHERE 品番 = 'D400'
品番 | 商品名 | 単価 |
---|---|---|
A100 | 商品A | 64 |
・SELECT 選択
(例文)
売上表から、数量が10以上30未満の行を取り出す
SELECT * FROM 売上表 WHERE 数量 >= 10 AND 数量 < 30
| 品番 |顧客番号 |数量 |
| --- | --- | --- |
| A100 |200 |10 |
| B200 |100 |30 |
A100のみが取り出される
例題を見てみる
社員表に対して、下記のSQL文を実行する。結果として得られるデータは?
SELECT 社員番号 FROM 社員表 WHERE 座席番号 > 300 AND 給与 <= 320000 ;
・社員表
社員番号 | 社員名 | 給与 | 座席番号 |
---|---|---|---|
100 | A | 210000 | 302 |
110 | B | 330000 | 301 |
111 | C | 270000 | 202 |
112 | D | 320000 | 301 |
122 | E | 350000 | 101 |
解答
社員A と 社員D
WHERE以下の条件により、座席番号は300より大きいもの、かつ、給与32万以下のデータが選択される