アプリ開発の調査にかかる
時間を削減したい
内製化支援サービス
アプリを自分たちで
作成できるようになりたい
DX人材育成プログラム
プロに開発を依頼したい
アプリ開発導入支援サービス
機能拡張サービス
X-SP Feature
デザイン拡張サービス
X-SP Design
モダン化から運用管理までサポート
構築支援サービス
全6回でお届けしているDataverseテーブル作成の入門シリーズ。
第4回は、データの整合性を保つために欠かせない「キー(Key)」設定についての解説となります。
皆さんはExcelやDataverse、その他のデータベースで「同じ商品コードの商品が2つ登録されてしまった!」みたいな経験はありませんか?
こういった事態を防ぐためにSharePointリストであれば、列ごとの設定で「一意の値を適用」にチェックを入れる形になると思います。
ですがこれまで紹介したように、Dataverseでは列の設定として重複の許可に関する項目はありませんでした。
それでは、Dataverseではどのようにして重複チェックの設定をするのでしょうか?
今回は、第1回・第2回で作成したテーブルを使って、重複登録できないように「キー(代替キー)」の設定をしてみましょう。
【このシリーズの過去回一覧】
Dataverse:Dataverse入門(1)!商品管理アプリを作ってみる-Dataverseテーブルの作り方
Dataverse:Dataverse入門(2)!テーブルに列を追加してみる-列の型の決め方-弊社はPower Platform(Power Apps・Power Automate)に関するアプリ開発や、
皆様が内製化を行う際の支援サービスを提供しておりますので、
Power
Platformに関する内容でお悩みがある場合は、以下からぜひお問い合わせください。
GUIDと業務キーの違い
まず前提としてDataverseの各レコードには、システムが自動的に割り振るGUID(Globally Unique Identifier)という一意のIDがあります。
これは 550e8400-e29b-41d4-a716-446655440000 のような長い文字列で、世界中で重複しないことが保証されています。
しかし普段の業務で商品や顧客を特定する時に、こんなに長くてランダムなIDは人間にとって扱いづらく、負担になってしまいます。
多くの場面では、「商品コード:A-001」や「社員番号:12345」といった、人間が扱いやすいID(業務キー)を割り当てて利用されているでしょう。
そこでDataverseでは、「キー(代替キー)」という機能を使用することで、GUIDの代替として業務キーをDataverseテーブル上で重複しない識別子として扱うことができるようになります。
ハンズオン:代替キーを設定しよう
それでは、「商品」テーブルの「商品コード」をキーとして設定してみましょう。
1. 商品コード列の確認
キーとなる列は、第2回ですでに作成している「商品コード」列を使用します。
第2回では以下のように商品コード列を設定しましたね。
-
表示名: 商品コード
-
データ型: テキスト(1行テキスト)
-
スキーマ名: ProductCode
-
必須: 必須(キーにする列は必須にしておくことを推奨します)
2. キーの作成
列の確認ができたら、テーブルの設定画面より「スキーマ」→「キー」をクリックします。
すると、テーブルのキーの一覧画面が表示されます。
そうしたら、画面左上の「+新しいキー」からキーを作成します!
キーの作成メニューが開かれるので、以下のように設定します!
-
表示名: 商品コードキー
-
名前: ProductCodeKey(列の設定におけるスキーマ名に相当します)
-
列: 商品コード(先ほど確認した列を選択)
これで保存すれば、キーの設定は完了です!
非常に簡単ですね!
注意点として、キーを作成するとバックグラウンドで実際のレコードにキーを適用する処理が走ります。
キー一覧の「状態」を見ると、保留というステータスになっているのが確認できると思います。
データ量にもよりますが、処理には数秒〜数分程度かかり、完了するとキーが有効(アクティブ)になります。
3. 効果を確認しよう
キーが有効になったら、実際にデータを登録して試してみましょう!
テーブルの設定画面より「編集」をクリックして編集画面に移動することで、データを登録することが可能です。
まずは1件目の商品データを登録してみます。
商品名: テスト商品A
商品コード: P-001
価格: 10,000
カテゴリ: 家電
在庫数: 10
必須項目を入力して保存成功すると以下のように保存され、商品列には自動でGUIDが付与されます。
続いて、2件目の商品データを登録してみます。
商品名: テスト商品B
商品コード: P-001(あえて同じコードを入力)
価格: 1,200
カテゴリ: 書籍
在庫数: 100
するとエラーが発生し、「1行は未保存です」というエラーメッセージが表示されます。
詳細なエラーメッセージを確認してみると、
「Entity Key 商品コードキー violated. A record with the same value for 商品コード already exists. A duplicate record cannot be created. Select one or more unique values and try again.」とあります。
日本語に直すと、
「既に同じ商品コードの値を持つレコードが存在しているため、商品コードキーの設定に違反しています。重複するレコードは作成できないので、一意の値に変更してください。」といったエラーにより登録できていない状態となります。
それでは指示の通りに、商品コード列を一意の値、つまり「P-001」以外の値に変更して登録してみましょう!
そうすると無事に保存することができました!
作成した商品コードキーが期待通りに動作してくれています!
ハンズオン:複合キーを作成する
ここまでは商品コードという1つの列が重複しないように「キー」を作成しましたが、例として、次のようなケースも考えられないでしょうか?
顧客テーブルにおいて同じ社名は許容するが、同じ社名かつ住所が同じデータは登録できないようにしたい。
社名や住所、それぞれであれば重複することも考えられるかもしれないけど、同時に重複する場合は登録を防ぎたい、というケースですね。
こういったケースには複数の列を対象にして作成する、「複合キー」という設定が有効になります!
1. 顧客テーブルに住所列を追加する
まずは、顧客テーブルに住所列を追加します!
-
表示名: 住所
-
データの種類: 1行テキスト
書式: テキスト
最大文字数: 100
-
必須: 必須項目
-
スキーマ名: CustomerAddress
2. 複合キーの作成
先ほどと同じようにキーの作成メニューを開き、今回は以下のように設定します。
-
表示名: 顧客キー
-
名前: CustomerKey
-
列: 顧客名、住所
先ほどとの違いは、キーの対象列として「顧客名」と「住所」の2つの列を対象にしている部分です!
3. 効果の確認
さっそく効果を確認してみましょう!
このように、顧客名や住所が個別に重複している場合は問題なく登録できます!
が、顧客名と住所が同時に重複すると…
先ほどと同じくキーの重複エラーが表示されて、登録ができません!
このように複数の列を対象として設定することで、より複雑な重複チェックを行うことが可能になる、ということですね!
おわりに
以上がDataverseにおける「キー設定」による重複レコードのチェック機能でした!
キー設定はこれまで紹介したリレーションや列の設定などと違い、設定しなくてもとりあえずテーブルとしては利用できるので、見逃されがちなポイントです。
ですが、Dataverseテーブル内に置けるデータの品質を保つためには必須の機能です。
Dataverseテーブルを設計するときは、必ず「どの列がキーになるのか?」を考えるようにしておくと、
後々にPower Appsで更新処理を実装するときのロジックなどもイメージしやすくなりますので、ぜひ意識していただければと思います!
次回は第5回、「モデル駆動型アプリの作り方」についてになります!
これまでに作ってきたDataverseテーブルを使って、いよいよ注文管理アプリを作っていきます!
モデル駆動型アプリのメリットや、キャンバスアプリの違いについても解説していきますのでぜひご覧ください!
それでは!
【こちらも合わせて読みたい】
こんにちは。アーティサン株式会社の伊礼(いれい)です。