Webとデータベース: MAMPを使用してCS型(クライアント・サーバ型)のデータベースについて概説する
キーワード: DBMS RDBMS MySQL Webサーバ サービス PHP テーブル レコード 主キー 候補キー 複合キー
MAMPはWebサービス開発環境を手軽にセットアップするためのツール
・Webサーバ、DBMSサーバを手軽に制御できる
・WebサーバにはサーバサイドスクリプトとしてPHPが設定済み
・DBMSとしてMySQLを採用
・DBMS管理コンソールとしてphpMyAdminが設定済み
情報実習室PCにインストールされているMAMPを利用して以下の演習を行う
MySQLを使用するシステムの代表 WordPress をPCにインストールして動作確認をする
WordPress: ニュースサイトやまとめサイト、BlogなどのCMS(コンテンツマネージメントシステム)を管理運用できるWebアプリ
本学のWebサイトもWordPressで運用されている
Wordpress初期設定(2018年版 前半はXAMPP。後半はWordPress)
前回の復習
【忘れずに】パソコンを消す前にサーバーをStopする
【理由】システムが破損して面倒なことになる(高確率)
MAMPのコントロールパネルでWebサーバ と MySql サーバが起動(Running)するまで待つ
※2026 MySQL Server が緑にならない現象が多発した。WebStart pageを開いてphpMyAdminは動いた※
タスクバーを右クリック → タスクマネージャを起動 バックグラウンドプロセスにある Apache と MySQL の動作業況を表示
アプリケーションプログラム(アプリ)、Webサーバ、DBMSサーバ、OS、サービス、タスク、プロセス
以下ではDBMSの利用例として Blog システムを扱う。
人気のBlogシステム Wordpress を MAMP環境にインストールしてローカルサーバで運用テストする。
実用的には外部のレンタルサーバやブログサービス(SaaS)を利用してWordpressを運用するとになるだろう。
参考記事: https://bazubu.com/xampp-wordpress-23795.html 今回のWordPressセットアップはこのページを参考にした。
MAMPのスタートページを開いてMySQLの管理者(Admin)のIDとパスワードを確認する
この講義では管理者のIDとパスワードは初期値から変更せずにそのまま使うことにする
【参考資料】
MySQLのadminパスワードはphpMyAdminのユーザアカウント タブから変更可能
※この講義では変更しない
【参考資料】
phpMyAdminにMySQLのadminパスワードを設定するには
VS Codeなどのテキストエディタで設定ファイルを編集する
※この講義では変更しない
Fileメニューからファイルを開く(Open File)
ファイルのパス(場所) T:\mamp\bin\phpMyAdmin5\
ファイル名 config.inc.php
60行目と61行目を以下の画像のように修正する
保存(Save)してVS Codeを閉じる
設定ファイルの修正を反映するために
MySQLを再起動する(StopしてStart)
MAMPのWebStartページの phpMyAdmin リンクから管理ツール phpMyAdmin を開く
phpMyAdmin の画面から
ホーム アイコンをクリックして
データベース タブをクリックする
以下の様に入力・設定し、作成ボタンを押す。
・データベース名 wp学籍番号 ※漢字入力OFF
・照合順序 utf8mb4_general_ci ※変更
メモ:文字コード
UTF8 マルチバイト文字列
mb4 絵文字対応
ci ケースインセンシティブ(アルファベット大文字小文字区別無し)
作成 ボタンを押す
ステップ(1/2)
WordPressを配置
BlogシステムWordPressをMySQLデータベースに接続しセットアップする
手順:
・レポートフォルダ → 小橋一秀 → データベース
wordpress-6.5.2-ja.zip
をデスクトップなどにコピーする
・コピーしたファイル wordpress-6.5.2-ja.zip を展開する
右クリック → すべて展開
参照 ボタンから 展開先フォルダをhtdocsに設定しなおす。
※以下の資料で xampp の部分は MAMP に置き換えて作業
※ 注意 すべて展開... から展開先を指定せずに展開するとフォルダ階層が1つ深くなる。ファイルをコピーしなおして階層を1つ削除すること。
htdocs フォルダはApatche wep serverのドキュメントルート(Webコンテンツのファイルを置く一番上の階層)です。
Webサービスに必要なファイルは基本的にこのフォルダに配置します。
場所:
T:ドライブ → mamp → フォルダ htdocs (えいちてぃーどっくす)
ZIPファイルの内容:
WordPressのシステムファイル
ブログ運用PHPプログラム
HTML
CSS
データベース等初期設定プログラム
アイコン画像
などがパッケージされている。
wordpress-6.5.2-ja.zip は削除してもよい。インストールに失敗したりリセットが必要なら展開しなおして上書きする
ステップ(2/2)
htdocsに展開されたwordpressのフォルダ名を変更
例) wordpress自分の学籍番号
・ブラウザから アドレス
localhost/wordpress3124888/
にアクセスする。学籍番号のところは自分のものに修正。
・ブラウザのWordPress設定画面の さぁはじめましょう をクリック
・以下の様に入力
データベース名 wp3119222 各自がphpMyAdminで設定したデータベースの名前を入力する
※URLのwordpress3120333 はMAMPのhtdocsフォルダに作成したWordPressのフォルダ名
ユーザ名とパスワード欄に root と入力する
送信 ボタンを押してWordPressのインストールを始める
・ サイトのタイトル は各自で任意のタイトルを入力
例) 合格データベース
・ ユーザ名 各自で任意のタイトル
・ パスワード 各自で任意のタイトル
覚えてください。(脆弱なパスワードの確認をチェックして 許可 すれば単純なパスワードを利用可能)
このパスワードはBlogの管理者用のパスワード。MySQLのパスワードではない。
・ メールアドレス 学籍番号のメールアドレス。ダミーのメアドでOK。
例) 3124888@nagoya-bunri.ac.jp
・WordPressをインストール をクリック
※ ブログ用のパスワードを忘れてしまった場合は http://www.seotemplate.biz/blog/wordpress-tips/11026/
インストールボタンを連打するとインストールに失敗する場合がある
※ ログイン のリンクをクリックしても以下のような表示になる場合は、ブラウザのリロードボタンで読み込みなおして再度試す。
(メモ PHPのパフォーマンス不足か? PHPのキャッシュは有効にしていないので)
WordPressにログイン
http://localhost/wordpress3124888/wp-login.php
ダミー記事を削除
ダッシュボードから記事を投稿
投稿した記事をブログで表示
記事にコメントを書く
業務用の本格的データベースの設計を眺めてみる
WordPress のインストールが完了したら phpMyAdmin で WordPressデータベースに作成されたテーブルとそのレコードを確認する。
レコード とは:データベース上の記録のこと。テーブルの1行のデータ。
Blogシステムでは投稿記事はデータベースのテーブル wp_postsにレコードとして記録される。
Wordpressのデータベースを表示するためにphpMyAdminのWebを更新する
調べるテーブルの例)
wp_users
wp_posts
wp_comments
例)
wp_posts テーブルの内容:
記事に関するデータを記録するテーブル
テーブルにはいくつかのフィールド(アトリビュート、属性)が設定されている。
IDフィールドは 主キー と呼ばれるレコード管理用の番号が記録されるフィールド
RDBMSのテーブル設計では他のレコードと重複しない固有の管理用の値を記録するフィールドが必須
補足1:主キーは番号とは限らない。他のレコードと重複しないことが保証されていれば主キーにできる(候補キー)
補足2:複数のフィールドの組み合わせを重複しないように設定して、その組み合わせを主キーにできる(複合キー)
IDフィールドの値はWordPressシステムが自動的に割り当てる番号が記録される。
Blogの投稿者・管理者ではなくシステムが利用する。Blogに表示されることもない(たぶん。URLの一部に利用されるかも)
post_authorフィールド 記事の投稿者のIDを記録する。投稿者名やその権限などは別のテーブルwp_usersで管理する。
post_titleフィールド 記事の本文とは別にTitleを記録する(見出し用)
post_content 投稿記事の本文 HTMLのタグが利用されている
注目:コメントは投稿記事とは別のテーブル wp_comments に記録されている。
以下の手順でBlogのトップページを開く
ブラウザでタブを新しく開く
ブラウザで次のURL↓にアクセス する
http://localhost/wordpress3123888/
↑このURLはhtdocsにWordPressをインストールしたフォルダ名と対応している
チェックポイント1で確認したテーブルのレコードがBlogの記事として表示さている。
例)
WordPressの機能を試す。
新規記事の投稿、コメントの投稿、不要記事の削除、カテゴリの追加と設定、プロフィールの変更などを試す。
ダッシュボードのメニューから新規ユーザ追加やテーマの画像の変更なども可能。時間があればどうぞ。
※記事の投稿は ダッシュボード のブログに記事を投稿する のリンクなどから
※記事の削除は、記事の編集リンクから、ゴミ箱へ移動をクリックする
レスポンシブUIに注意 ウインドウサイズに応じてメニューの縮小や非表示が起きる
WordPressに記事を投稿し、その記事にコメントを投稿する。
その後、phpMyAdminからテーブルを表示してwp_posts と wp_commentsのレコードを見比べる。
確認ポイント:
ある投稿(post)について書かれたコメント(comment)は、記事テーブル(wp_posts)とは別のコメントテーブル(wp_comments)に記録される。
コメントテーブルの記事ID(comments_post_id)フィールドに、コメントを付けた記事のIDが記録されている。
Blogの記事にコメントを投稿するには
ダッシュボードからブログ画面に切り替える(ブログ名をクリック)
記事のタイトルをクリックして記事を表示する
コメント入力フォームに書き込んで送信ボタンを押す
■不具合が発生する操作について
WordPressのダッシュボードの機能を使わずにデータベースのレコードを直接編集すると記事を改竄できるがお勧めしない。
テーブルのレコードをデータベースを操作して直接削除するとブログが壊れるかもしれません。
ゴミ箱へ移動などのWordPressの挙動を無視して強制削除するので。
・ブログ記事のソースコードを表示 →ブラウザで記事を 右クリック → ページのソースを表示する
質問: このソースコードのプログラム言語なんでしょうか?
・WordPressのソースコードを確認する VS Code を利用する。
File → Open Folder から wordpressフォルダを開く
例)
T:\mamp\htdocs\wordpress3124888
拡張子がPHP のファイルをクリックして内容を確認する。
例) index.php はインデックスファイル(目次)で、ブログのトップページのURLにアクセスした時に実行されるPHPプログラムです。
Blogをブラウザで開いた時のURLについて:
http://localhost/wp3122333/
は
http://localhost/wp3122333/index.php
と同じページが表示される。
サーバのソースコードを表示してコード中にSQLコマンドが存在することを確認する。
例) wp3122333\wp-includes\SimplePie\Cache\MySQL.php
の ???行目 や ???行目 や ???行目など(2021.4 バージョン変更により行は未確認)
検索機能で 「INSERT INTO」や「SELECT」などのSQLコマンドを見つける。
ドキュメントルート
T:\mamp\php\htdocs\ のフォルダのこと。Web用のコンテンツの配置場所
親言語方式 と 独立言語方式
WordPressのPHPのコードのようにSQLのコマンドをプログラムに埋め込む方式を親言語方式という
親言語となるプログラム言語はPHPに限らない。多くの実用言語が対応している。
独立言語方式ではSQLなどのコマンドで直接データベースを操作する。
データは、着席したPCのTドライブに保存されています。
今後も同じ席を利用してください。
ブログをスクショする
WebClass の 第2回課題の問1にスクショファイルをアップロード
簡易な例) WordPressのブログ画面で設定項目や入力内容が分かる様にスクショ
例1)以下の画面では 記事が wp_posts テーブルに記録されていて、コメントは wp_comments テーブルに記録されていることが分かる。
例2)phpMyAdminのタブをコピーして開いてテーブルを2つ同時に撮影する
範囲選択スクショ
Winキー + Shit + S を順番に同時に押してマウスでキャプチャ範囲を指定
全画面スクショ
Winキー + f9 + prt sc を順番に同時に押す
スクショファイルは ユーザホーム → ピクチャ → スクリーンショット に保存される
編集が必要な場合は右クリックして編集プログラムを選ぶ
※ダブルクリックすると フォト アプリが開く。書き込みができなくて不便。
スクショファイルを開かなくてもワードやペイントブラシに張り付けて利用できる
不要なスクショファイルが溜まっていくので適当に削除するとよい
サーバを停止する
MAMPウィンドウの xボタン で終了してはいけない
スクショする画面についてのQ&A
Q: Blogの投稿記事がMySQLのテーブルに見当たらない
A: テーブルの1画面のレコード表示件数が、25件に設定されている。記事を複数投稿している場合、最新投稿を次のページに移動して表示する。もしくは、テーブルの post_date のフィールド名をクリックして新しい記事を先に表示するように表示順を変更してからスクショを撮る
Q: コメントのテーブルを表示できない
A: PHPMyAdminには、複数のテーブルを一度に開く機能はない。そこで、テーブル名を右クリック(ブラウザのメニュー)し、新規ウィンドウでコメントテーブルを表示する
時間が余ったら宿題の課題や次回の予習に進んでください
ネタ: データベースの設計と操作は集合論を基礎としているので復習しておくとよい。
集合 あなたは本当のベン図をまだ知らない http://www.procrasist.com/archive/2017/04/02
Webclassの第2回課題の 問2 と 問3 に回答する。採点は次回授業日以降の予定。
参考資料: サブテキスト SQL研修資料 SQL Training2021 スライド1~26。特にスライド21 25 26
回答書式:
テーブル名に続けてフィールド名をカンマか「、」で区切って()で括る
主キーのフィールド名の先頭に ○ (WIndows:まる と入力して変換)を付ける
外部キーには先頭に※(WIndows:こめ と入力して変換)を付ける
主キーかつ外部キーのフィールド名には ○※フィールド名 と両方の記号を付ける
例)
天候記録テーブル(〇ID、日時、※地区ID、※天候ID、気温)
天候テーブル(〇天候ID、名称、記号)
地区テーブル(〇地区ID、地区名)
以下の問2と問3の回答には外部キー(頭に※付き)は無くてもいいです。テーブルが1つだけなので外部キーは無いものとします。
間違えやすいポイント
主キーにできる項目の判別
例)
学生の名簿では学籍番号を主キーにできる。同じ学生は2回名簿には載らないので問題が発生しない。
出欠リストでは学籍番号は主キーにできない。同じ学生が別の授業や別の回に出席したときに記録できない。学籍番号は重複するので。
テーブルにレコードとして出席を記録するには 1行 に一括して情報(学籍番号、日付、科目など)を記録する
記録した内容は主キーで検索できるようになっていなければならない(重複してはいけない)
問2
リレーショナルデータベースのテーブルの例を1つ示す。
条件1: 主キー のフィールドを決める。フィールド名の先頭に「〇」を付けて示す。
条件2: フィールド数は2個以上
条件3: レコードの例を3件以上示す。
回答フォーマット:
テーブル
テーブル名(フィールド名1,フィールド名2,フィールド名3)
レコード
(フィールド1の値,フィールド2の値,フィールド3の値)
・
・
・
注意点:
レコードの説明を意図してフィールド名を付ける
主キーのフィールド名には先頭に「〇」印をつける
レコードの内容は架空のものでOK
回答例) フィールド数3、レコード4件
テーブル
教員所在(〇職員番号,所属学科,研究室)
レコード
(101,情報メディア,A401)
(202,フードビジネス,L303)
(301,健康栄養,栄養学研究室)
(302,健康栄養,栄養学研究室)
問3
リレーショナルデータベースのテーブルの例を1つ示す。
条件1: 主キーが 複合キー になっている
条件2: フィールドを3個以上持つ
条件3: レコードの例を3件以上示す
回答フォーマット: 問2と同じ
注意点: 問2と同じ
回答例) フィールド数4、レコード4件
テーブル
2025年度情報実習室利用状況(〇曜日,〇時限,〇実習室,科目)
レコード
(月,1,C107,データベース)
(月,2,N101,プログラミング入門)
(火,2,N101,プログラミング入門)
(水,1,F201,情報リテラシー)
(水,3,F201,情報メディア論)
(木,2,C107,データベース)
(木,2,C108,メディアアート)
(金,2,N101,プログラミング入門)
科目に〇が付かない理由
科目が複合キーの一部なら 月,1,C107,システム開発論 を記録可能。これはマズイ。
科目を含めたこの組み合わせは上記のテーブルに存在していないので重複がなく登録可能になる。
しかし、同一の教室と時間において別々の授業を重複して開講することは不可能と考えると科目を複合キーに含めたテーブル設計では、
同一の時間と同一の教室で異なる科目を複数同時に開催が可能
になってしまう。
補足:
例示するレコードの値は、主キーが複合キーであることを示すように工夫すること。
上の例では、以下の場合に科目が決まらない
単独の主キー
曜日 幾つかの曜日で複数の科目がある
時限 2時間目に複数の科目がある
実習室 幾つかの情報実習室で複数の科目がある
2項目の複合キー
曜日と時間 木曜2時限に複数の科目がある
曜日と実習室 水曜F201に複数の科目がある
時間と実習室 2時限N101に複数の科目がある
つまり、曜日 時限 実習室 の3つを決めると科目が決まるので
主キーは〇曜日 〇時限 〇実習室 を組み合わせた複合キー
補足2:
実習室を主キーから外すとテーブルの設計ミス
テーブル
2025年度情報実習室利用状況(〇曜日,〇時限,実習室,科目)
レコード
(月,1,C107,データベース)
(月,2,C107,プログラミング入門)
(火,2,N101,情報リテラシー)
(水,3,N101,情報メディア論)
(木,2,C108,メディアアート)
レコードの値を見ると曜日と時限で科目が決定可能な状態になっているが、
同じ曜日と時間で複数の実習室で並行して異なる授業を行うことが許されるので、
実習室も主キーを構成する要素に加えなければならない。
問3の回答例をアレンジした補足
2022年度情報実習室授業利用(〇曜日,〇時限,〇実習室,履修人数)
曜日と時間と実習室が決まれば、履修人数も決まる
2022年度情報実習室授業利用(〇曜日,〇時限,〇実習室)
利用の有無だけを記録する例、利用が有る場合に記録する。記録がない場合は利用無し。科目名の記録は不要となる。
異なる集合間の組み合わせを記録する場合は複合キーになる。
2022年度フレッシュマンセミナーイベント参加(〇クラス,〇イベント,日時,人数)
レコード1(A,図書館利用案内,某月某日,10人)
レコード2(A,メディアラボ利用案内,某月某日,11人)
レコード3(B,図書館利用案内,某月某日,9人)
レコード4(B,荻須記念美術館特別展示,某月某日,10人)
レコード5(C,メディアラボ利用案内,某月某日,11人)
レコード6(C,紫陽花祭り,某月某日,10人)
レコード7(A,紫陽花祭り,某月某日,11人)
余談: すべてを解決する魔法の主キー 履修登録コード をテーブルのフィールドに追加する(実際はそうなっている)。
ただしこの方式では時間割のコマや教室配置について問題がないようにレコードを管理する必要がある。