ナビゲータのEVEです。

本日は、VMWare Workstationで構築しているサーバー環境を、XServerの構築手順を用いて、全く同じ環境に再構築しました。っといいながら、時間がなく、sshサーバーの構築までで終わってしまったのですが・・・。明日は、作業を完了したいと思います。
本当は、本日中に完了させる予定の作業でした。ただ、予想外な出来事が・・・。
最初から本番環境に近づけようと、いつもと違う仮想環境の構築方法を導入したところ、Ubuntuがインストールエラーとなりました。XServerでのインストールと違い、クライアント環境はインストールに時間がかかります。それを、2度やってから、普段の構築環境に戻したので、かなりの時間を要してしまいました。本来なら、エラー原因を突き止めるのですが、時間の関係でしていません。時間ができたら、調べたいと思います。
[外部キーの導入]
昨日は、お休みをいただきました。理由は、ユーザー分析システム、ログインシステムを導入するに当たり、データベースの構成を考えているのですが、今回から、外部キーを導入することにしました。当然、業務では、そのようなデーターベースを複数見てきたのですが、実際に自分でやるのは初めてです。その導入作業に時間を取られてしまいました。
Prototype EVEでも導入の検討をしたのですが、データベース構築後で外部キーを導入するのは、難しい状態でした。理由は、データの整合性がとれていないといけないから・・・。以前も話しましたが、Prototype EVEでは、データベースの整合性をシステムで確認していたのですが、システムを一般向けに非公開にした段階で、中止しました。自室にあるサーバーのハードディスクへのアクセス音がやたらうるさく感じたからです。ただ、そのせいで、外部キーを導入しようと思った時は手遅れでした。まっ、データパッチをしてもよかったのですが、そんな気力はありません。非公開のシステムですしね・・・。
[MySQLのキーの歴史]
Prototype EVEにおいて、なんで最初から、外部キーを導入しなかったかというと、最初指定できなかったからです。しかも、その当時、主キーを1カラムしか指定できませんでした。だから、開発当初は仕方がなかったのです。そんな、使い勝手が悪かった、MySQLの歴史について、時系列におってみてみましょう!
1995~2000年 | 1カラムのみ主キーしか指定できなかった |
2001年 |
InnoDBストレージエンジンの導入 外部キー制約(FOREIGN KEY)の導入 |
2000~2002年 | 複数のカラムを主キーとして指定できるようになりました(ver3.22)。 |
ここで思い出すのは、MySQLをはじめて構築した当初「標準MySQL]という本を読みながら、構築を進めたのですが、その「標準MySQL」には、構築資材となるCDがついていて、それを用いてデータベースを構築していました。多分ですが、その付録のソフトが古かったのだと思います。かなり、長い間、そのソフトを使用していた記憶があります。
やはり、常に最新にしなくてはいけないことを思い知ります。
[外部キーをつけてみて]
その外部キーの記述内容が正しいことを、ISO 3166-1の国コードをデータベースに登録することにより確認しています。ISO 3166-1の国コードに関する情報を、ウィキペディアからコピーしそれを、EXCELで編集し、表にしています。ただ、この内容だけでは、正規化ができていないので、地域を、大分類、中分類のテーブルに分けて格納し、そして、ISO 3166-1からの国コードを格納したテーブルを作っています。
作るのには条件があり、上位のテーブルから作ること!そうしないと、MySQLにしかられます。そして、テーブル作成後、元データとなるEXCELで作った表を、CSV形式に再編集し、ファイル化します。ここで気をつけなければならないのは、ISO 3166-1の国名にカンマが含まれていると言うことです。そのため、私は、ISO 3166-1の国コードを格納したファイルをテーブルにローディングをするときは、タブ区切りに再編集し、実施しています。
その結果、なんの矛盾もなく、ローディングすることができました。
[あとがき]
以前の職場で聞いた話なのですが、データベースに制約をつけるのはいいのですが、付けすぎると、開発の妨げになるというのです。その話は、Oracleでの話なのですが、近頃、MySQLでもいろいろなことが出来るようになりました。
今回の外部キーを導入するに当たり、ChatGPTに勧められて制約を入れたのですが、ちょっと、不安です。制約を入れることにより、親と子の矛盾がなくなり、データバグを少なくすることができると思うので、最小限ですが、許容することにしました。
今回の開発で、問題ない、入れた方が良いと言うことになったら、あとで制約を追加するかもしれません・・・。忘れている可能性はあるけれど・・・。
では、また!!!
https://ja.wikipedia.org/wiki/ISO_3166-1
コメント
コメントを投稿