#10 DB/MySQL MariaDB データを作ってみる
データベースからデータを取得して、pandasで解析後再び別のデータベースに置き換えなおすプログラムを考えます。
ローカルサーバー(localhost)でとりあえずデータベース(MariaDB)をインストールして、サーバーにデータおいてみる。
MAMPを使ってデータベースを作ります。MAMPとは「Macintosh」「Apache」「MySQL」「PHP」の頭文字をとったものですが、Windowsでも使えます。
上記URLからMAMPをインストールします。
Free Downloadから、Windows用のインストーラーをインストールします。
インストーラーのインストール手順に沿ってインストールします。このときMAMP PRO をインストールしてしまったらアンインストールしておきます。無料期間が過ぎるとデータが消えるらしいです。
MAMPを起動させます。MAMPを起動させると、自動でApacheとmysqlサーバーに接続されます。
ちなみにApacheとは、サーバーをWebサーバーにするためのソフトです。
通常、Webページを見るときにユーザーは、ブラウザを用いて(Chromeとか)、Webページのファイルが置いてあるサーバーに対して該当情報をリクエストをすることで、該当の情報がレスポンスされます。
受け取った情報をブラウザがPCの画面上に表示します。
このとき、該当情報のあるサーバーに注目すると、このサーバーには、Webページを構成するファイルが置いてあります。しかし、このサーバー自体は、requestを送る側のPCと同様のPCです。
違いは、サーバー側のPCにはWebサーバーとしての機能を果たすためのソフトが入っています。このソフトがApacheです。
MAMPに戻ります。接続が完了すると、ApacheとMySQLのよこのチェックボックスが緑に点灯します。
これで接続は完了です。そのあとOpen WebStart pageをクリックしてダッシュボード画面へ移動します。
ダッシュボード画面から、ToolsからphpMyAdminに移動します。ここからDBを作成できます。
”データベース”からデータベースを作成していきます。ここではデータベース名をVRestとします。となりのutf8_general_ciとある部分は、照合順序です。ほぼUTF8で間違いないですが、最近のトレンドは、UTF8MB4らしいので、utf8mb4_general_ciを選択します。作成ボタンを押すとデータベースが作成されます。ここにはまだ何のデータもないことが分かります。
ここに、データを追加していくのですが、まずはここにデータを入れるための箱を作ります。これをテーブルと呼びます。
まずは、"users"というユーザー情報の入るテーブルを作ります。カラム数(データの数)は後から変更できるので何となく10とかにしときます。実行を押すと作成されます。
これで、"users"という、テーブルが作成されました。
①プライマリーキーを考えます。通常IDなどの重複のないものを選びます。ここでは、IDというプライマリーキーにします。
②データ型をINT(43億ぐらいまで)にします。どれくらいのデータが入るかによって極力小さいものを選ぶ。(莫大なデータが入ったとき、このデータ型の大きさで処理速度に大きな影響を与える)
③Auto Increment(AI)にチェックを入れます。データが作られるたびに、自動で通し番号を振ってくれます。
あとは適当にユーザー情報に必要なカラムを作っていきます。
カラムがある程度できたら、保存します。
これで、"users"というユーザー情報を入れるテーブル(箱)ができあがりました。同様に”score”という各IDに紐づく点数を入れるテーブルを作ります。
次に中に入るデータを作ります。データづくりで便利なものに、テストデータ生成ツールというものがあります。
https://tm-webtools.com/Tools/TestData
”users”のデータをこんな感じで作っていきます
”ダウンロード”からcsvファイルをダウインロードして、phpMyAdminにもどり、インポートからcsvをインポートします。
次にリレーション(関係性)を定義していきます。
左側メニューからリレーションを作成を選択、参照されるキーと外部キーを選択すると、自動でリレーションが作成されます。
外部キーについて・・・
外部キーとは関連したテーブル間を結ぶために設定するカラムのことで、データの整合性をデータベースに保証させるためにあります。
ここでいうと、ユーザーテーブルに存在しないスコアコードは、スコアテーブルに存在させない。
スコアテーブルに登録のある値は、ユーザーテーブルから削除させない。または、変更を追従させる。
といった制約が設定できます。
ここでは、親キーに変更が加わった場合は、(たとえばscorecodeの番号が、親テーブル上で変わったとき)子テーブルの参照キーも変更かけ、親キーが削除された場合、NULLを挿入して、データとしては保存するようにします。
このとき、scorecodeがプライマリーキーとして設定してありましたが、プライマリーキーは重複存在できない、NULLは認められないので、scorecodeをインデックスへ変更して、NULLを許可し、プライマリーキーを別にs_idとして追加します。また、s_idは、AI許可しておきます。
次に、子テーブルとなる側のテーブル構造から、リレーションビューを選択します。以下、リレーションの制約説明です。
ON DELETE・・・親キーが削除されたとき
ON UPDATE・・・親キーがアップデートされたとき
それぞれ、
CASCADE・・・親キーの変更にならって、子キーも変更
SET NULL・・・親キーが変更されたら、子キーにはNULLを挿入
RESTRICT・・・親キーが変更されたら、エラーを返す
NO ACTION・・・RESTRICTと同じ
なので、ON DELETEをSETNULL ON UPDATEをCASCADEへ変更します。これで、親キーに変更がかかると、子キーが変更され、親キーが変更されると子キーが変更されます。
これでとりあえず簡単なデータベースができました。