【高校情報1授業】データベース入門(SQL、RDBMS、Oracle Cloud、NoSQL等)教科書版・参考書・共通テスト対策
データベース入門(SQL、RDBMS、NoSQL等)
情報Ⅰ共通テスト対策 書籍出版します!
【資料ダウンロード】
PDFの他、パワーポイント、学習指導案 等の原本も無料提供しています。
情報教育の底上げが目的なので、資料を修正して、学校・塾(営利目的含む)の授業等で利用して頂いて問題ありません。私への連絡不要ですが、利用する際には、YouTubeチャンネル・情報Ⅰ動画教科書・IT用語動画辞典を紹介してもらえると嬉しいです。
■PowerPoint・問題集
https://toppakou.com/info1/download/21_データベース/21_データベース.pptx
■簡易学習指導案
https://toppakou.com/info1/download/21_データベース/【学習指導案】21_データベース.docx
【文字おこし】
今回はデータベースの種類、SQLの基礎、オープンデータの活用方法などについて解説していきます。
まずは、データベースについて説明していきます。
データベースとは、集めたデータを、検索や追加などが簡単にできるように整理したものになります。
データベースの種類に
階層型データベース
ネットワーク型データベース
リレーショナルデータベース
などがあります。
階層型データベースは、初期のデータベースによく採用された方式で、個々のデータ同士のつながりが階層構造を成すデータベースになります。
例えば、株式会社Aの中には人事部と営業部があって、人事部は採用課と研修課からなっている。営業部は営業1課と営業2課から成り立つような階層のイメージになります。
ネットワーク型データベースは階層型データベースを発展させたもので、網目のようにつながっている構造をもつものになります。
例えば、パンメーカーA社とB社があったとして
A社ではあんぱんと食パンを製造している。 B社はあんぱんと食パンに加えてカレーパンも作っている。 それぞれのパンの材料と紐づけるとパンの種類について重複するところ、つまり線が重なる部分が出てきます。
このように網目のようにつながっているものがネットワーク型データベースになります。
リレーショナルデータベースは、世の中で多く使われている形式になります。
リレーショナルデータベースの特徴はデータを表形式で管理することです。
このような感じで、エクセルの表と見た目は同じ感じになります。
リレーショナルデータベースは、この列や行を指定したり、表と表をつなぎ合わせたりしながらデータの検索ができます。
そして、SQLと呼ばれる、言語を使って、データの登録・検索・更新・削除をすることができます。
そして、データを格納する表を作るときにもこのSQLが使われる。
SQLはStructured Query Languageの略で、1970年代に開発されたデータベース言語になります。
見た目は英数文字でプログラム言語の様に思えるかもしれませんが、プログラム言語ではありません。
しかし、一般的なプログラム開発では、色んなデータはデータベースに格納することが多いので、システム開発をする上ではデータベースに関する知識は切っても切れない関係にあります。
この、リレーショナルデータベースの世界では、表のことを、テーブルといいます。
そして、行のことをレコードや組、列のことをカラムやフィールドや属性といいます。
本によっては、レコードの中にあるひとつの要素にあたる「入力項目」をフィールドと説明している場合もあります。
高校の情報の教科書では列のことをフィールドと表現していますが、どちらも間違いではありません。
私自身色んな大手企業のシステム開発に携わる中では、列はカラム、行はレコードと表現する人の割合が多かったので、今回の動画でもカラムとレコードという名前で説明していきます。
今回は、「書籍」というテーブルと「作者」というテーブルを使って説明していきます。
あれ?なんでわざわざ2つに分けているのですか?
一つのテーブルでもいいと思うんですが・・?
いい質問ですね。
作者名を書籍テーブルに持ってきて考えてみましょう。
一見問題なさそうに見えますが、仮に作者名が夏目漱石から秋目漱石に変わったとします。
1つの表の場合、いくつも夏目漱石がいたら、修正漏れがおこって、データが不整合になる可能性があります。
ただ、このようにIDをキーとしてテーブルを分割している場合は、作者テーブルの1か所だけ直せばいいので、不整合が起こりません。
このようなテーブル設計の工夫を,テーブルの正規化といいます。
このテーブルを操作する方法として「選択」・「射影」・「結合」という関係演算を用いて処理することが多いです。
選択はテーブルから条件を満たすレコードを抽出する操作で,
たとえば、書籍テーブルから作者ID が1001を取り出しなさいというSQLの命令文を書けばそのレコードが抽出されます。
射影はテーブルから一部のカラムを取り出す操作で、例えば
書籍テーブルから「書籍名」のカラムを抜き出しなさいというSQLの命令文を書けば、そのカラムが抽出されます。
結合は、複数のテーブルを1つのテーブルにする操作で、
例えば、書籍テーブルと作者テーブルを作者IDをキーに結合すると、このような感じに見た目は1つのテーブルになります。
この、選択、射影、結合はお互いを組み合わせて使う場合が多いです。
このリレーショナルデータベースを管理するためのソフトウェアを
リレーショナルデータベース管理システムと言って、略してRDBMSといいます。
これは、データベースの人気ランキングを表しています。
OracleとMySQLが人気だということが分かります。
MySQLもOracle社の製品なので、国内のデータベースシェアはOracle社の製品が多くの割合を占めていることが分かります。
MySQLは無料で手に入って、ORACLEは高機能で高額なイメージが強いですが、
最近ORACLE社が発表したオラクルクラウドのオールウェイズフリーのサービスを使えば、クラウド上にあるORACLEのデータベースを無料で使うことができます。
へぇ~オラクルのデータベースが無料で使えるって、オラクル社 太っ腹ですね。
1つのデータベースをみんなで共有することも可能だから、
例えば教える先生が1アカウント取得すれば複数人の生徒で演習することも可能になります。
以前の動画で、ORACLEクラウド上に10分足らずでデータベース構築する方法を纏めているので、今回はその方法で、すでに環境を作ってあるところから説明します。
先ほどの、書籍と作者のテーブルを作るためのSQLは概要欄にある、noteブログに記載しています。
テーブル名やカラム名は、基本的には日本語ではなく英数文字を使いますが
今回は分かりやすさを重視するために日本語をつかいます。
さきほど説明した、選択、射影、結合を実際のSQLで実行していきます。
書籍のテーブルから作者IDが1001であるレコードを抽出する、選択のSQLについて
はじめのSELECTは「どの列(カラム)のデータを検索するか」を指定します。
アスタリスクの場合はすべての列を抽出しなさいという意味になります。。
FROMは「どの表から検索するか」を指定します。 今回は書籍テーブルから抽出します。
WHEREは「どのような条件でレコードを検索するか」を指定します。 今回は 作者IDが1001のものということになります。
最後にSQL文の終わりを意味するセミコロンを付けます。
実行してみます。ちゃんと作者IDが1001のものが抽出されました。
今度は、書籍名のカラムのみを抽出していきます。特定カラムの抜き出しは射影でしたね。。
さきほどはSELECT アスタリスクでしたが、今度は SELECTの後に、抽出したいカラム名を記述します。。
実行してみます。
ちゃんと書籍名のカラムだけが抽出されました。
次に 書籍テーブルと作者テーブルを作者IDが等しいレコードを結合します。
SQLは内部結合というものを使います。
FROM の後のテーブル名までは一緒ですが、 その後にINNER JOIN と記述しその後に結合したいテーブル名を記述し ON の後に お互いのテーブルを紐づけるための条件をいれます。
SELECT (取得するカラム) FROM テーブル名1
INNER JOIN テーブル名2 ON (結合条件);
今回は 書籍テーブルの作者IDと作者テーブルの作者IDを結合条件にするので
ONの後に 書籍.作者ID = 作者.作者IDと記述します。
実行してみましょう。
ちゃんと2つのテーブルが結合されました。
次は書籍テーブルに書籍IDが7の新しいレコードを追加してみましょう。
INSERT INTO の後にテーブル名 かっこの中にカラムをカンマ区切りで記述します。
そして実際に挿入する値はVALUESの後にカンマ区切りで記述します。文字列はシングルコーテーションで囲むことを忘れないようにしましょう。
実行してみます。
一応挿入はされているように見えますが、これは未だ仮確定状態で他の人からは未だ存在しないレコードになっています。
確定するためにはCOMMIT;と記述して実行します。
最後に書籍テーブルから書籍IDが7のレコードを削除します。
DELETE FROMの後にテーブル名を記述し、WHEREの後に削除するレコードの条件を記述します
今回は書籍IDが7のレコードを指定します。
実行してみましょう。
再度検索すると、レコードが消えたことが分かります。
これも確定するためにはCOMMIT;を忘れないようにしてください。
―――
各種情報システムでは、情報通信ネットワークにより様々なデータが送受信されています。
情報システムにより蓄積された膨大な量のデータであるビッグデータを課題解決に活用することが近年重要視されています。
個人情報を含むデータや企業活動の根幹にかかわるデータは,漏洩することがないよう情報セキュリティを確保する必要があります。
一方,公益性が高いデータについてはオープンデータとして公開される動きも広がっています。
総務省が出している、オープンデータ基本指針では、オープンデータというのは次の3つの定義があります。
①営利目的,非営利目的を問わず二次利用可能なルールが適用されたもの
②機械判読に適したもの
③無償で利用できるもの
「機械判読に適したもの」として,「コンピュータプログラムが自動的にデータを加工,編集できること」ができるようなものも含め,オープンデータを普及させる取組が官民をあげて推進されています、
オープンデータが公開されることにより次のような効果が期待されています。
①国民参加・官民共同の推進を通じた諸課題の解決,経済活性化
多様なサービスの提供・公共サービスの提供・改善,諸問題の解決への貢献
②行政の高度化・効率化
情報を根拠とした政策・施策の企画・立案,効果的な行政の推進
③透明性・信頼の向上
政策等に関する十分な分析・判断が可能,行政の透明性・信頼性の向上
このオープンデータのファイル形式の代表的なものについて説明していきます。
表形式のマイクロソフトのExcel形式
カンマで区切られたCSV形式 などがあります。 CSV形式は色んなアプリケーションで対応している形式だから加工がやりやすいというメリットがあります。
そして文書形式としてはPDF形式やマイクロソフトのWord形式などがある。 PDF形式は再度加工するのが難しいので、その時点のデータから変更しない場合に使われることが多いです。
図形情報や属性情報を持つ複数のファイルから構成される 地理空間情報形式のshp(シェープ)形式などがあるあります
でわ、実際にオープンデータを使って、データ分析をしていきます。
埼玉県川越市にAED が十分に設置されているかどうかを調べていきます。
まずは、事前準備として埼玉県川越市のどこにAEDが設置されているかが、一覧になっているCSV形式データをダウンロードしていきます。。
URLは概要欄にも貼っておきます。
【川越市】AED設置場所(公共施設) - データセット - Open Data Saitama
https://opendata.pref.saitama.lg.jp/data/dataset/aed
今回は令和3年3月31日のデータを利用します。
タイミングによっては最新データが違うと思うので読みかえてください。
UTF-8,Shift_JIS,shape形式がありますが、今回はShift_JISの形式のをダウンロードします。
ダウンロードしたら、一度右クリックして、プログラムから開く でメモ帳を選びます。
CSV形式なので、カンマ区切りでデータが保存されているのが分かります。
今回は地図アプリに読み込んでもらえるようにするために、このファイルの列を入れ替える必要があります。
メモ帳だと編集は難しいので、エクセルを使って編集していきます。
一度メモ帳を閉じて、今度はCSVファイルをダブルクリックします。
エクセルと紐づいているので、エクセルで開きます。
経度と緯度が一番後ろの列に来る必要があるので。
まず、軽度の列を切り取って、一番後ろに貼り付けます。。
更に、緯度の列を切り取って、経度の右隣りに貼り付けます。
表を分かりやすくするために、名称の列を切り取って、一番前のA列に挿入します。
これで準備ができたので、ファイルを保存して閉じます。
今度は、この作ったデータを地図上に表示させていきます。
政府統計の総合窓口のe-StatというWebアプリケーションを使うので、このURLにアクセスしてください。概要欄にも貼っておきます。
政府統計の総合窓口 (e-stat.go.jp)
https://www.e-stat.go.jp/
ユーザ登録なしで使える機能もたくさんありますが、CSVファイルを読み込ませるためには登録が必要なので、まずはユーザ登録していきます。。
右上の新規登録をクリックして、ユーザID欄のところにメールアドレスを入れます。確認の為、同じアドレスをその下にも入力して、仮登録ボタンをクリックします。
そうすると、e-Statからメールが届いているはずなので、メール内にあるURLをクリックします。
ユーザ本登録画面に遷移するので、パスワードを自分自身で決めて、入力して
本登録ボタンをクリックします。
完了画面が出たら、登録は出来たので、右上のログインボタンをクリックして
ユーザID欄にメールアドレス
パスワード欄に今決めたパスワードを入力してログインボタンをクリックします。
統計データを活用する 欄の 地図のアイコンをクリックします。
そして、遷移した画面で 地図で見る統計 jSTAT MAPのリンクをクリックすると地図アプリが立ち上がります。
さきほど作った川越市のAEDの設置状況のCSVを読み込ませてみます。。
右下にある、統計地図作成というボタンをクリックして、プロット作成を選択します。
その中でCSVファイルから読み込む機能である、緯度経度付きファイルをクリックします。
そして、CSVファイル欄の右側に参照ボタンがあるので、さきほど作ったCSVファイルを選択します。
さきほど、軽度、緯度の順番で末尾に持ってきましたが、ここに注意書きがあるように、このアプリケーションが末尾にあるデータを読み込むようにできているので、その形式に合わせた感じになります。
準備が出来たら、アップロードするボタンをクリックします。
つぎに、読み込んだ緯度経度に該当する点をどのように表示するかを選ぶことができます。
アイコン選択で好きなアイコンを選びます。今回は赤色の四角形にしてみます。
そして登録するボタンをクリックします。
川越市の地図上の表示が変わったはずですが、地図が川越市ではない場合は
左上に川越市と入力してエンターキーを押します。
そうすると、川越市に移動して、赤色の四角でAEDの設置場所が表示されているのが分かります。
今度はAEDの設置場所と人口密度の関係性を確認していきます。
左上の統計地図作成をクリックして表示されるサブメニューの統計グラフ作成を選択します。
統計グラフ作成画面に来るので
調査名を[国勢調査],年を[2015 年](最新のもの),
集計単位を[小地域(町丁・字等別)],
統計表を[人口性比,密度],指標を[密度(人口総数)]と順に選択します。
表示する指標である[密度(人口総数)]を選択したら,[指標選択]ボタンをクリックします。
,小計単位を[小地域],集計範囲を[行政界選択]とすると,都道府県,市区町村の順に選択できます。ここでは,埼玉県川越市を選択します。
そして、目的の行政界を選択したら,[集計開始]ボタンをクリックします。
人口密度が高い地域がピンク色ですが、AEDの設置場所も比較的多いことが分ります。
今回は、オープンデータを使って AEDの設置場所を地図と組み合わせて可視化しましたが、色んなデータを使ってそれを他のものと組み合わせて可視化すると相手に伝わる資料になります。
===
今度は、キーバリュー形式というデータの表現方法について説明していきます。
SNS での人のつながりや鉄道の路線などのような関係性について図を使って表現してみよう。
aからfまでの人がいたとします。
この図の見方は、例えば
aの人はbさん、cさん、dさんとつながっています。
bさんはaさんとdさんとつながっています
cさんはaさんとdさんとつながっています
dさんはaさんbさんcさんeさんとつながっています
eさんはdさんとfさんとつながっています
fさんはeさんとだけつながっています。
a からf までの人を表す丸を頂点(バーテックスまたはノード),
人とのつながりを表す線分を辺(エッジ)といい,頂点と辺で構成された図を「離散グラフ」といいます。この図は特に方向性を考えない無向グラフになっています。
人のつながりでの片想いの関係や一方通行の道路のような,方向性を考慮した有向グラフを考えることもできます。
離散グラフをコンピュータ上で表現するには,コンピュータで扱うことができるデータ形式で表現する必要があります。一つの例として,2 次元配列を用いて表現することができます。
頂点どうしがつながっていれば1,つながっていなければ0 として表現します。
例えばfを基準につながっているのは、eなので、eとfのつながりを表す部分は双方向で考えると2箇所あって両方1になっているのが分かります。
このように表現する方法を隣接行列といいます。隣接行列を使って表現する場合,辺の本数が少ない場合には,隣接行列の要素の多くが0 である疎行列になってしまいます。
そこで,接続している頂点のリストを頂点ごとにデータとして,隣接リストとして表現する方法があります。
例えばこれは、頂点a には頂点b とcとd が接続していることをしめしています。
{a : [ b,c,d ] , b : [ a , d ] , c : [ a , d ] , d : [ a , b , c , e ] , e : [ d , f ] , f : [ e ] }
隣接リストでは,注目している頂点という項目と,接続している頂点のリストという値との組として表現されています。
このように,項目(キー)と値(バリュー)との組により表現されるデータの形式を
「キー・バリュー形式」といいます
隣接リストの形式では,疎行列のような不要なデータについては解消されますが,頂点同士が接続しているかどうかを調べるには隣接リストをたどって調べる必要が生じます。
Amazon Dynamo(ダイナモ)DBやオープンソースのHibariやこの前説明したオラクルクラウドもキーバリュー形式に対応したデータベースを提供しています。
他のデータ形式に対応したデータベースもあり,これらのデータベースを総称してNoSQL と呼ばれています。NoSQL はビッグデータの活用と関連して注目されています。
今回のキー・バリュー形式のデータの処理はプログラム開発でよく使われる手法なので、今回の基礎を抑えておいてください。
初期セットアップSQL※ORACLE用
◆ORACLEのSQLです◆
■書籍テーブルの作成■
CREATE TABLE "書籍"
("書籍ID" varchar2(10),
"書籍名" varchar2(255),
"作者ID" varchar2(10));
■作者テーブルの作成■
CREATE TABLE "作者"
("作者ID" varchar2(10),
"作者名" varchar2(255));
■書籍テーブル初期セットアップ■
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(1,'羅生門',1001);
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(2,'こころ',1002);
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(3,'坊ちゃん',1002);
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(4,'鼻',1001);
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(5,'舞姫',1003);
INSERT INTO "書籍" ("書籍ID", "書籍名", "作者ID")
VALUES(6,'吾輩は猫である',1002);
■作者テーブル初期セットアップ■
INSERT INTO "作者" ("作者ID", "作者名") VALUES ('1001', '芥川龍之介');
INSERT INTO "作者" ("作者ID", "作者名") VALUES ('1002', '夏目漱石');
INSERT INTO "作者" ("作者ID", "作者名") VALUES ('1003', '森鴎外');
【解説重要用語】
データベース、階層型データベース、ネットワーク型データベース、リレーショナルデータベース、カラム(列)、テーブル(表)、レコード(行)、フィールド、選択、射影、結合、RDBMS、仮想表(ビュー表)、リレーションシップ、オープンデータ、離散グラフ、頂点(バーテックス、ノード)、辺(エッジ)、無向グラフ、有向グラフ、隣接行列、NoSQL(Not only SQL)
【Oracleクラウド環境構築】
https://www.youtube.com/watch?v=bAWr0LsJHqA
【川越市】AED設置場所(公共施設) - データセット - Open Data Saitama
https://opendata.pref.saitama.lg.jp/data/dataset/aed
政府統計の総合窓口 (e-stat.go.jp)
https://www.e-stat.go.jp/
★私の目標
「とある男が授業をしてみた」 の葉一さん
https://www.youtube.com/user/toaruotokohaichi
※Google社に招待頂いた、「YouTube教育クリエイターサミット2020」で
葉一さんと文部科学省・Google役員の対談セッションに感銘を受けて、高校情報講座スタートしています。
【参考サイト・参考文献】
tkmium note(共通テスト対策・プログラミング・情報教育全般)
★情報関係基礎の過去問解説が充実しております!
https://tkmium.tech/
文部科学省 「情報Ⅰ」教員研修用教材
https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm
詳細(情I703 高校情報I Python)|情報|高等学校 教科書・副教材|実教出版 (jikkyo.co.jp) 検定通過版
https://www.jikkyo.co.jp/book/detail/22023322
令和4年度新版教科書「情報Ⅰ」|高等学校 情報|日本文教出版 (nichibun-g.co.jp)検定通過版
https://www.nichibun-g.co.jp/textbooks/joho/2022_joho01_1/textbook/
その他、情報処理技術者試験(全レベル1~4)/IT企業15年勤務(システム技術部 部長)経験から培った知識を交えながら解説しています。
かわいいフリー素材集 いらすとや (irasutoya.com)
https://www.irasutoya.com/
この記事が気に入ったらサポートをしてみませんか?