リレーショナルデータベースの基本まとめ この動画を視聴することによって,リレーショナルデータベースを学ぶことができます. 内容は,リレーショナルデータベースシステムの概要,SQL,SQLの実行,データベースの設計です. 入門者のため,重要事項をまとめています. 1 リレーショナルデータベースシステム リレーショナルデータベースシステムを説明します. データベースシステムは,データベースを扱う IT のシステムです. データベースシステムは,データベース管理システムと,データベースを,あわせたものになっています. オンラインでデータを共有するとき,データを管理するときに役に立つシステムです. データベースは,我々の生活に必須です.我々の社会,生活などにすでに深く浸透しています. 取引,記入,データ保存,センサー連携,人工知能応用などです. データベースを使い,デジタルのデータをオンラインで共有する,デジタルのデータを管理するということは,我々の生活に必須になっています. リレーショナルデータベースシステムは,データベースシステムの一種です. データの形は,テーブルになっています. テーブルというのは,たくさんの列があり,その中にデータが入っているようなものです. 列のことを属性といいます. なお,テーブルのことを,リレーションと呼ぶこともあります. リレーショナルデータベース管理システムは,ソフトウェアです. リレーショナルデータベースは,データベースのデータです. リレーショナルデータベースシステムと言ったときには,データベースを管理するソフトウェアであるリレーショナルデータベース管理システムと,リレーショナルデータベースを,あわせたものになっています. リレーショナルデータベースシステムは,表計算とは違います. データベースシステムは,データベース管理システムと,データベースを,あわせたものになっています. その特徴的な機能は,オンラインなどでのデータの共有,大量のデータの中からのデータ検索,そして安全にデータを扱えるセキュリティの機能です. 表計算は違います. 例えばエクセルは,表計算のソフトウェアです. 表計算の表では,セルが縦横に並んでいます. そして,セルについて,合計をとったりなどの表計算を行います. リレーショナルデータベースシステムの特徴 データの形はテーブルです.単純です. リレーショナルデータベースシステムには豊富な機能があります.SQLという言語を使って,リレーショナルデータベースシステムを操作します.SQLについては,あとでもう少し詳しく説明しましょう. リレーショナルデータベースシステムは,簡単で,学びやすいものです. そして,データベース設計の基礎が体系化されているということも特徴です. データベース設計については,あとで説明するように,異状,正規化というような考え方があります.異状,正規化などを体系的に学び,データベース設計の知識とスキルを習得することができます. このような特徴があり,リレーショナルデータベースシステムの普及度は,他の種類のデータベースシステムと比べてナンバーワンになっています.. そして,リレーショナルデータベース管理システムにはMySQL、Microsoft Access、Oracle など,様々な種類があります. これらの中には無料で使えるものもあります. テーブル テーブルには,複数の属性があります. ここには,book、who、what、atという4つの属性があります. bookの列には赤や青や緑の値が入っています. whoの列にはXXやYYやZZの値が入っています. whatの列には貸出や返却の値が入っています. そしてatには日時の値が入っています. このようなテーブルを,リレーショナルデータベースシステムで扱いたいとしましょう. リレーショナルデータベースシステムでテーブルを扱うときは,前準備として,まずデータベース全体を設計するデータベース設計を行います. 次に,データベース生成を行います. そして,必要なテーブルのテーブル定義を行います. これで前準備が終わります. その後,定義済みのテーブルにデータを入れて,テーブルが完成します. テーブル定義では,からのテーブルが作成されます. テーブル定義では,テーブル名,属性の属性名,属性のデータ型などを指定します. 例えば,ここでは,テーブル名は tosyo です. 属性名は,book、who、what、atの4つです. bookの列は文字列のデータです. whoの列は文字列のデータです. whatの列は文字列のデータです. atの列は日時のデータです. TEXT は文字列です.DATETIME は日時です. 属性は,book、who、what、at の4つです. それぞれが文字列、文字列、文字列、日時です. テーブル定義は, CREATE TABLE tosyo book TEXT、who TEXT、what TEXT,at DATETIME になります. ではまとめます.テーブルは,複数の属性が並んでいます. 属性には,属性名、book、who、what、at のようなものなどがあります それぞれの属性ごとにデータ型が定まっています.ここでは,それぞれ,文字列、文字列、文字列,日時です. 2 SQL ここでは,問い合わせ(クエリ)のしくみと,SQLを説明します. まず問い合わせの仕組みを説明します.SQLは,後で説明します. リレーショナルデータベースシステムの中には,たくさんのテーブルが格納されています. そして,この中から必要なデータを取り出したい,あるいは,データベースを操作したいなどの時に,SQL という言語を使って,コマンドを書きます. SQL のコマンドは,システムで処理されます. SQL で問い合わせを行ったときは,必要な部分が取り出され,結果として出てきます.結果はテーブル形式です. なお,問い合わせのことを英語で「クエリ」と言います. 問い合わせは,データベースの中から必要な部分を取り出すわけですが. 問い合わせで,欲しいデータの条件を指定して検索をしたり,あるいは集計集約を行ったり,あるいはソート(並べ替え)を行ったりなどできます. まとめます.問い合わせは,データベースの検索,集計集約,ソート(並べ替え)を行うことです.そして,リレーショナルデータベースでの問い合わせの結果は,テーブル形式のデータになります. SQL を説明します.SQL は,リレーショナルデータベースシステムのさまざまな機能を使える言語です.問い合わせ,テーブル定義,その他の操作です. SQL は,リレーショナルデータベースシステムの標準言語です. SQL には豊富な機能があります.SQL の問い合わせの機能としては,射影,選択,結合、重複行除去、比較、範囲検索,パターンマッチ、AND,OR,集計集約,ソート(並べ替え)、副問い合わせなどがあります. これらの機能の詳しい説明は省略しますが. たくさんの機能があり,機能を組み合わせて自由自在な問い合わせができるものです. そして、これは私の意見ですけれども,普通のプログラミング言語と比べて,SQLのコマンドの書き方は簡単で簡潔です. SQL は,コマンドですので,自動実行もでき,後からの確認も簡単です. では、SQL による問い合わせの例を見ていきます. 誰が何回貸出返却したかを得る SQLです.ここでは,射影,選択,比較、集計集約が行われています. SELECT who, COUNT(*) FROM tosyo GROUP BY who; who は選択,COUNT(*) と GROUP BY は集計集約です. まずは,この「tosyo 」に注目してください.これはテーブル名です. テーブル tosyo 名の中からデータを取り出すという意味になります. tosyo というテーブルの中に who という属性がありました. この「who」は,who の属性を得るという選択になっています. COUNT(*) と GROUP BY は集計集約です. GROUP BY のあとに「who」とありますので,貸出返却した人ごとに集計集約を行うという意味です. これを行うことによって,tosyo というテーブルに記録された貸出や返却の記録について,貸出返却した人ごとに集計集約を行います. XXさんは2回、YYさんは1回、ZZさんは1回というような結果を得ることができます. 今度は,貸出の回数は全部で何回かです. 今度は貸出の回数だけを数えます. ですので,今度は,貸出のみを数えたいという意味の what = '貸出' という条件を付けています SELECT COUNT(*) FROM tosyo WHERE what = '貸出'; で,貸出したすべての回数を合計して,3 が得られます. SQLを用いて新しい行を挿入することもできます, 例えば、あるテーブルに今3行のテーブルがあり,新しくもう1行追加したいというときに. INSERT,INTO,VALUES を使います. INSERT INTO products VALUES(4, 'apple', 150) は,products テーブルに,4,Apple,150 という値の行を1つ追加するという意味になります. 書き方ですが,1つの行に値がたくさんあるので,値をカンマで区切ります.値が文字列のときには,半角のコーテーションマークで囲み 'apple' のようにします. SQL の利用イメージです. 我々がいろいろなICTのサービスを使う,スマートフォンやパソコンで様々なオンラインのサービスを使うというときに,影でリレーショナルデータベースシステムが動いているということはよくあります. このときに、SQL が利用されています. SQL のプログラムが,前もって準備されていて,それをアプリから呼び出すということが行われたりします. あるいは,アプリの中にSQL のプログラムが組み込まれているということもあります. 3 SQLの実行 今から、SQL の実行を説明します. SQL を用いて,テーブル定義,行の挿入,問い合わせ(クエリ)を行います. 作成するテーブル. テーブル名は tosyo です.図書は,赤、青、緑の 3冊とします.そして,貸出者、貸出か返却か、日時を扱います. テーブル tosyo の属性は,book、who、what、at の4つの属性とします. テーブル定義のSQL CREATE TABLE tosyo ( book TEXT, who TEXT, what TEXT, at DATETIME) です. TEXTは文字列という意味,DATETIME は日時,日付,時刻という意味になります. では,SQLの実行を説明します. SQL 実行の方法はいろいろあります.ここではオンライン開発環境 paiza.IO を紹介します. paiza.IO は さまざまなプログラミングを行うことができるウェブサービスです. paiza.IO はたくさんの言語を扱うことができ Python,Java なども扱うことができます.ここではリレーショナルデータベース管理システムの MySQL を使っていきます. ウェブブラウザーを起動し,https://paiza.io/ja を指定します. paiza.IO の画面が開いたら,少し下にある「コード作成を試してみる」をクリックします. メニューで,数多くの言語から,使用したい言語を選びことができます.今回は,SQLを使いたいので,MySQLを選びます.MySQLは,リレーショナルデータベース管理システムです. 中央は,SQL のプログラムを編集するためのエディターの画面です.その下には実行ボタンがあります.実行するときに使います.実行結果は,下側に表示されます. それでは,実際に実行してみたいと思います. ウェブブラウザーを起動し,https://paiza.io/ja を指定します. paiza.IO の画面が開いたら,少し下にある「コード作成を試してみる」をクリックします. クリックすると画面が変わります. 次の画面では,上の方にあるメニューで,言語を確認してください.メニューで,数多くの言語から,使用したい言語を選びます.メニューで MySQL を選びます. MySQL を選ぶと,画面が MySQL のものに変わります.中央は,SQL のプログラムを編集するためのエディターの画面です.その下には実行ボタンがあります. エディターの画面で,SQL のプログラムを入れ,実行ボタンをクリックし実行することになります. 最初,中央のエディターの画面には,SQL プログラムの見本が入っています.最初に入っている SQL プログラムの見本は使いませんので,消してしまっても構いません. では,エディターの画面で,最初に入っている SQL プログラムの見本を消します.そして,資料にある SQL のプログラムを入れます. CREATE TABLE のところは,テーブル定義です.INSERT INTO ... VALUES のところは,行の挿入です. SELECT ... は問い合わせです.SQL のプログラムを入れ終わったら,実行ボタンをクリックし実行することになります. 問い合わせの結果で,誰が何回貸出返却したかを確認できますし. 別の問い合わせの結果で,貸出の回数は全部で何回かを確認できます. なお、実行結果からわかるように、NOW() は MySQL の標準機能で,現在日時の取得を行います.なお、この時、日本時間とは9時間遅れた世界標準時が取得されます. このように,ウェブブラウザーで簡単に練習できますので,ぜひ、試してみてください. では、まとめます SQL は、テーブル定義を CREATE TABLE で行います. 問い合わせを SELECT FROM や SELECT FROM WHERE などで行います. 行の挿入は INSERT INTO で行います. 4 リレーショナルデータベースの設計 データベースで一番困ることは、データベースの異状です.異状というのは,データベースのデータがつじつまの合わない状態,あるいは,記録したいデータが記録できない状態なり,しかも修復できない状態に陥ることをいいます.異状は完全に防止できるわけではありませんが、正規化により、ある程度防ぐことができます. 異状の例です.これはデータベースではありませんが、異状の例を説明してみたいと思います. ある表示に、「このバスは無料」ですとあり、別の表示に、「このバスは運賃1000円です」と表示されていたとしたらどうでしょうか? これは,どちらかが間違っているというわけです.このように、データに間違いが含まれており、元に戻せないような状態になっているという時に、異状が起きているというように考えます. なお、異状というのは、故障とは違います.故障しているわけではないが、データがおかしな状態になっているというように考えてください. 異状の別の例です.Aさんがカレーライスを400円、Bさんがうどんを250円、Cさんがカレーライスを400円で食べたとします. この中には、カレーライスが400円、うどんが250円、Aさんがカレーライスを食べた、Bさんはうどんを食べた、Cさんはカレーライスを食べたという情報があります. この時、カレーライスが400円から350円に値下げになったとしましょう.そうすると、ここに記録されている2つの400を350に更新する必要があります. 400が2つあります.両方を更新しなければなりません. もし、ミスをして A さんの方を忘れてしまったらどうでしょうか?そうすると、Aカレーライス400、Cカレーライス350というおかしなデータがテーブルの中に残ってしまうということになります.このような状態が異状です. 値段は1つのはずなのに、違った値段が記録されていて、つじつまが合わないというわけです. 異状の防止として、テーブルの分解を行い、正規化するということを考えることができます. 例えば、もともと1つのテーブル、Aカレーライス400、Bうどん250、Cカレーライス400を分解し、Aカレーライス、Bうどん、Cカレーライスというテーブルと、カレーライス400、うどん250というテーブルの2つに分解したとします. この時,分解しても、情報は失われていないということに気をつけてください.情報が失われていないわけですから、何の問題もないというように考えることができます. そして、このように2つのテーブルに分解しますと、異状が起きにくいということになります. 例えば、カレーライスが400円から350円に値下げになった時、400は1箇所にしかありません.それを350に書き換えるというわけで、異状が起きにくいというわけです. 今、2つのテーブルに分解することによる異状の防止を見てもらいました. このように,異状の防止には,データベース設計が大切ということになります. 異状が起きやすいデータとしては、データベースの中に冗長なデータがあり,カレーライスの値下げなどの時に、片方のデータの更新を忘れるなどで,異状が起きやすいというわけです. 2つのテーブルに分解すると,冗長なデータが無いので,異状が起きにくいとなります. 1つのテーブルを複数のテーブルに分解することで、異状を起きにくくすることができる場合があるということを説明しました.このことはデータベース設計で大切になってきます. リレーショナルデータベースシステムの概要,SQL、SQLの実行、データベースの設計を説明しました. 動画の視聴ありがとうございました.