Forguncyの内部データベースでは、複合ユニーク制約を実現できません。 そのため、複合ユニーク制約が必要な場合には、外部データベースの利用を推奨しております。 外部データベースの詳細については、以下のオンラインを参照してください。
しかしながら、外部データベースの利用が困難な場合、後述する設定を行うことで、内部データベースにて複合ユニーク制約に近い動作を実現できます。
なお、単一のフィールドに対するユニーク制約であれば、Forguncyの内部データベースを利用する場合でも、フィールドに設定できるオプション「一意」を設定することで実現できます。
1.内部データベースで複合ユニーク制約を設定したい場合
複合ユニーク制約を行いたいテーブルに、複合ユニークチェックのためのフィールドを追加します。
追加したフィールド(以下、複合ユニークチェックフィールド)には、複合チェック対象としたいフィールド(例えば、フィールドA・フィールドBの2つのフィールド)の値を連結したデータを登録します。
複合ユニークチェックフィールドに「一意」を設定することで、データ追加・更新時に複合ユニークチェックフィールドの値が重複していないか確認し、重複していた場合にはデータ追加・更新がエラーとなります。
なお注意事項として、ユニーク制約のチェックを行うために、「フィールドを1つ追加すること」が必要となります。
設定手順
-
フィールドAとフィールドBの複合ユニーク制約を実装する目的で、複合ユニークチェックフィールドとして「ユニーク確認フィールド」という名前のフィールドを作成します。
-
複合ユニークチェックフィールドに、オプション「一意」を設定します。
-
フィールドAとフィールドBのデータ追加・更新処理時に、複合ユニークチェックフィールドの値も同時に追加・更新するよう設定します。
ここでは例として、ユニーク確認フィールドに氏名+生年月日を登録します。生年月日は日付型(シリアル値)のため、年月日の数値を関数で取り出し、テキスト型の文字列として結合しています。(H7セル:氏名、H9セル:生年月日 の値)サンプルでは、以下のような数式を入力しています。=H7&YEAR(H9)&"/"&MONTH(H9)&"/"&DAY(H9)
サンプルプロジェクトを用意しましたので、上記説明と共に実装方法の一例として活用ください。
本ページ末尾のリンクよりダウンロードできます。
添付のサンプルプロジェクトは、v8.0.6.0以降のForguncy Builderで読み込み可能です。
※ サンプルプロジェクトの補足事項
サンプルプロジェクトでは、2つの実装方法が確認できます。
- 通常コマンドによる実装 「会員登録・更新」 「会員情報一覧」ページにて、上述の設定手順を実装しています。
- サーバーサイドコマンドによる実装 ページ欄にある「エラーチェック結果表示の実装例」フォルダ内の「新規会員登録_エラーチェック結果表示の実装例」 「会員情報一覧_エラーチェック結果表示の実装例」ページにて実装しています。「通常コマンドによる実装」との違いとして、データ追加・更新処理の結果(成功・失敗)によって後続処理を分けて行いたい場合や、エラー時に表示されるメッセージを任意の文言にしたい場合には、こちらを参考にしてください。
2.ユニーク制約の必要性
Webアプリケーションでは、複数のユーザーが同時に同一のデータを追加・更新等を行う可能性があるため、登録データの重複を防ぐにはデータベース側でユニーク制約を設けることが必要です。
ユニーク制約を設定すると、該当のフィールドにおいて、重複データを登録しようとするとエラーとなります。
複合ユニーク制約は、テーブルの特定の複数フィールドの組み合わせにおいて、重複データを登録できないようになります。
(例)AフィールドとBフィールドの複合ユニーク制約を設定している場合、AフィールドとBフィールドそれぞれ単体では重複データを登録可能ですが、AフィールドとBフィールドの組み合わせは一意である必要があります。