はじめに
前回はMysqlのDBのテーブル構造を修正しました。ですがsql
ファイルの修正だけではサーバー側?に反映されないようです。なので反映させる為にどうすればいいのか、まとめていきたいと思います。
👇前回までの内容については下記記事をご覧ください
DB\Schema.pm
ファイルを編集
このファイルはDBの テーブル構造(ここでは member テーブル)を Perlのオブジェクト として扱うために、どのテーブルにアクセスするのか、どのカラムが存在するのかを指定するためにあります。
もっと短く言うとデータベースのテーブルとコードを結びつけるための設定を行うファイルです。
(ORM(Object-Relational Mapping)を使ってデータベースのテーブル構造を定義するファイル。とも言えます。難しい😥)
(SQLファイルはDBのテーブル定義や初期データを作成するためのものであり、ウェブアプリとDBをつなぐ仕組み(ORMやDBアクセス処理)が別途必要。で、DB\Schema.pm
が、「つなぐ仕組み」)
-
age
を誕生日(birthdate)から計算するので、age
カラムは不要 - その代わりに、
birthdate
を保存するカラムを保持 -
occupation
とdrink
のIDも外部キーとして保持
table {
name 'member';
pk 'id';
columns qw(id name age occupation drink remarks);
};
1;
table {
name 'member';
pk 'id';
columns qw(id name birthdate occupation_id drink_id remarks created_at updated_at);
# 外部キー制約を設定
belongs_to 'occupation' => 'questionary1::DB::Occupation', 'occupation_id';
belongs_to 'drink' => 'questionary1::DB::Drink', 'drink_id';
};
試しにデータを挿入してみる
※username
やdatabasename
はご自身が設定したものがはいります。
$ mysql -u <username> -p
mysql> USE <databasename>;
mysql> INSERT INTO member (name, birthdate, occupation_id, drink_id, remarks) VALUES ('山田太郎', '1990-05-15', 1, 1, '特になし');
mysql> SELECT * FROM member;
+----+--------------+------------+---------------+----------+--------------+---------------------+---------------------+
| id | name | birthdate | occupation_id | drink_id | remarks | created_at | updated_at |
+----+--------------+------------+---------------+----------+--------------+---------------------+---------------------+
| 1 | 山田太郎 | 1990-05-15 | 1 | 1 | 特になし | 2025-03-06 17:48:53 | 2025-03-06 17:48:53 |
+----+--------------+------------+---------------+----------+--------------+---------------------+---------------------+
1 row in set (0.00 sec)
ここで改めてウェブフォーム、DB、PerlのSchema.pmとの関係について
こういう事なのかな・・・。
-
ユーザーがフォームにデータを入力し、送信する
ユーザーが年齢や名前を入力し、「送信」ボタンを押す。 -
ウェブサーバーがリクエストを受け取る
ウェブサーバー(Perlのアプリケーション)は、ユーザーが送信したデータを受け取る -
Perlコードがデータを処理し、データベースに保存
ここで、Schema.pm
が関与?フォームから受け取ったデータをSchema.pm
の定義に従ってデータベースに挿入し、Schema.pm
により、member
テーブルのカラムが定義され、どのカラムにデータを保存するか、どのような操作をするかを簡単に扱えるようにしている。 -
データベースに保存されたデータ
保存されたデータは、後で再利用したり、ユーザーに表示することが可能。
さいごに
Ruby on Railsを学んできていたので、言い換えると下記のような感じなのかな・・・と思いました。今回の内容が何か参考になれば幸いです
👇Ruby on Rails での対応関係
Perl | Ruby on Rails |
---|---|
Schema.pm |
schema.rb (マイグレーションの結果) |
SQLの CREATE TABLE
|
db/migrate/xxxx_create_users.rb (マイグレーションファイル) |