大手制作会社で作ってもらいました

というようなWebシステムの保守運用等ご依頼を受けることが多々あります。(小さい会社さんとか、個人さんのもありますけれども)


その中にはデータベースアプリケーションの作り方を理解して作っているのか
疑わしいような作りのものが時たまあります。


E-mailアドレスをキーにしてユーザをデータベースに格納するとします。

この場合

「E-mailアドレスが重複してはいけない」ので、
1.DDL(Data Definition Language:データベースのデータを格納するテーブルの定義をする言語)において、E-MailアドレスをUniqueになるように定義しておく。

2.アラートを出すには、実データinputの際にも重複エラーを返すように作っておかねばならない。もしくは、DML(Data Manipulation Language:データベースのデータが格納されているレコードを操作する言語)を実行した際にエラー番号を取得するなど。


というのが、データベースを使う上での当然な作り方です。


しかしながら、こういったものに結構な頻度で出くわします。


B1.入力画面から確認画面への遷移する際にチェック
E-mailアドレスが既に登録されていればエラーを出して入力へ戻す

B2.確認画面から実登録部分
E-mailアドレスが既に登録されているかのチェックを行っていない。

最初に書きました通り、1のようにDDLで制限をかけておけばB2であっても実際に登録が行われることがありませんので、問題は起こりませんが、大体の場合、DDLで制限をかけておりません。

B1>B2 これで大丈夫だと思うのかもしれませんが
同一メールアドレスを入力しておいて、B1を2枚、3枚、4枚・・・と、確認画面状態にしておいたらどうなるでしょうか?

B2で実登録がなされておりませんから、B1の確認画面の状態には何画面でも用意することができます。

そうして「重複したデータ」が生まれてしまうのです。


CMS的なWebシステムがかなり増えてきましたが、データベースを扱う上で「今までならば当たり前とされていたこと」がなされていないものが増えてきていることに危惧を感じてしまいます。



まとめ:

データとして起こってはいけないことはできる限りデータベースのDDLで制限しておくこと。


マルチユーザマルチ画面である、セキュリティ的なこともきっちり念頭に入れて、実登録の際にも制限チェックやデータチェックを通すこと。



蛇足ですが・・・
Webでも通常のアプリケーションでも、「重複データ」が多々出てきて困るというような場合は、システムの実装に問題があることがほとんどです。


そういったことでお困りのことがございましたら、つくりて.com もしくは、キーステージ21 までご連絡くださいね。