#10 DB/MySQL MariaDB データを作ってみる

データベースからデータを取得して、pandasで解析後再び別のデータベースに置き換えなおすプログラムを考えます。

ローカルサーバー(localhost)でとりあえずデータベース(MariaDB)をインストールして、サーバーにデータおいてみる。

MAMPを使ってデータベースを作ります。MAMPとは「Macintosh」「Apache」「MySQL」「PHP」の頭文字をとったものですが、Windowsでも使えます。

上記URLからMAMPをインストールします。

画像1

Free Downloadから、Windows用のインストーラーをインストールします。

インストーラーのインストール手順に沿ってインストールします。このときMAMP PRO をインストールしてしまったらアンインストールしておきます。無料期間が過ぎるとデータが消えるらしいです。

MAMPを起動させます。MAMPを起動させると、自動でApacheとmysqlサーバーに接続されます。

ちなみにApacheとは、サーバーをWebサーバーにするためのソフトです。

通常、Webページを見るときにユーザーは、ブラウザを用いて(Chromeとか)、Webページのファイルが置いてあるサーバーに対して該当情報をリクエストをすることで、該当の情報がレスポンスされます。

空白の図 (2)

受け取った情報をブラウザがPCの画面上に表示します。

このとき、該当情報のあるサーバーに注目すると、このサーバーには、Webページを構成するファイルが置いてあります。しかし、このサーバー自体は、requestを送る側のPCと同様のPCです。

空白の図 (3)

違いは、サーバー側のPCにはWebサーバーとしての機能を果たすためのソフトが入っています。このソフトがApacheです。

MAMPに戻ります。接続が完了すると、ApacheとMySQLのよこのチェックボックスが緑に点灯します。

画像4

これで接続は完了です。そのあとOpen WebStart pageをクリックしてダッシュボード画面へ移動します。

画像5

ダッシュボード画面から、ToolsからphpMyAdminに移動します。ここからDBを作成できます。

画像6

”データベース”からデータベースを作成していきます。ここではデータベース名をVRestとします。となりのutf8_general_ciとある部分は、照合順序です。ほぼUTF8で間違いないですが、最近のトレンドは、UTF8MB4らしいので、utf8mb4_general_ciを選択します。作成ボタンを押すとデータベースが作成されます。ここにはまだ何のデータもないことが分かります。

ここに、データを追加していくのですが、まずはここにデータを入れるための箱を作ります。これをテーブルと呼びます。

まずは、"users"というユーザー情報の入るテーブルを作ります。カラム数(データの数)は後から変更できるので何となく10とかにしときます。実行を押すと作成されます。

画像7

これで、"users"という、テーブルが作成されました。

①プライマリーキーを考えます。通常IDなどの重複のないものを選びます。ここでは、IDというプライマリーキーにします。

②データ型をINT(43億ぐらいまで)にします。どれくらいのデータが入るかによって極力小さいものを選ぶ。(莫大なデータが入ったとき、このデータ型の大きさで処理速度に大きな影響を与える)

③Auto Increment(AI)にチェックを入れます。データが作られるたびに、自動で通し番号を振ってくれます。

あとは適当にユーザー情報に必要なカラムを作っていきます。

カラムがある程度できたら、保存します。

画像8

これで、"users"というユーザー情報を入れるテーブル(箱)ができあがりました。同様に”score”という各IDに紐づく点数を入れるテーブルを作ります。

画像9

次に中に入るデータを作ります。データづくりで便利なものに、テストデータ生成ツールというものがあります。

https://tm-webtools.com/Tools/TestData

”users”のデータをこんな感じで作っていきます

画像10

”ダウンロード”からcsvファイルをダウインロードして、phpMyAdminにもどり、インポートからcsvをインポートします。

画像11

次にリレーション(関係性)を定義していきます。

画像12

左側メニューからリレーションを作成を選択、参照されるキーと外部キーを選択すると、自動でリレーションが作成されます。

外部キーについて・・・

外部キーとは関連したテーブル間を結ぶために設定するカラムのことで、データの整合性をデータベースに保証させるためにあります。

ここでいうと、ユーザーテーブルに存在しないスコアコードは、スコアテーブルに存在させない。

スコアテーブルに登録のある値は、ユーザーテーブルから削除させない。または、変更を追従させる。

といった制約が設定できます。

ここでは、親キーに変更が加わった場合は、(たとえばscorecodeの番号が、親テーブル上で変わったとき)子テーブルの参照キーも変更かけ、親キーが削除された場合、NULLを挿入して、データとしては保存するようにします。

このとき、scorecodeがプライマリーキーとして設定してありましたが、プライマリーキーは重複存在できない、NULLは認められないので、scorecodeをインデックスへ変更して、NULLを許可し、プライマリーキーを別にs_idとして追加します。また、s_idは、AI許可しておきます。

画像13

次に、子テーブルとなる側のテーブル構造から、リレーションビューを選択します。以下、リレーションの制約説明です。

ON DELETE・・・親キーが削除されたとき

ON UPDATE・・・親キーがアップデートされたとき

それぞれ、

CASCADE・・・親キーの変更にならって、子キーも変更

SET NULL・・・親キーが変更されたら、子キーにはNULLを挿入

RESTRICT・・・親キーが変更されたら、エラーを返す

NO ACTION・・・RESTRICTと同じ

なので、ON DELETEをSETNULL ON UPDATEをCASCADEへ変更します。これで、親キーに変更がかかると、子キーが変更され、親キーが変更されると子キーが変更されます。

リレーション

これでとりあえず簡単なデータベースができました。


この記事が気に入ったらサポートをしてみませんか?