Dataverseの プライマリ列(プライマリフィールド)の落とし穴
はじめに
※Dataverseと関連する用語は、2021年3月に用語の変更が行われました。
この記事では、用語が最初に登場する箇所では、新名称(旧名称)の形で併記して記載しています。
こんにちは。今回はDataverse(CDS)のプライマリ列(プライマリフィールド)についての小ネタです。
私の経験談を交えて、プライマリ列をカスタマイズする際の落とし穴(注意点)を2つご紹介いたします。
プライマリ列とは
まず、はじめにプライマリ列についてざっくりと説明しておきます。
プライマリ列はDataverseのテーブル(エンティティ)を作成された際に必ず作成されるフィールドです。
プライマリ列の特徴を、一言でいうと「レコードの特徴を表わすフィールド」です。アプリの画面では、フォーム画面の左上に表示されます。
よく間違えられますが、データベースでレコードを一意に特定するための「キー」とは異なります。キーとなる列は、「一意識別子」という別の列に格納されています。プライマリ列は、キーではないので、1つの環境で、プライマリ列の値が全く同じデータが存在する場合があります。
では、プライマリ列のカスタマイズで、どんな落とし穴があるのでしょうか。
落とし穴1 名前を変える時はテーブルの作り直しになる
プライマリ列は、テーブルの作成時に、表示名と名前(論理名)を決める必要があります。とりあえずと、適当に名前をつけると、後から問題がおこるかも。
なぜなら、プライマリ列は削除ができません、名前を後から変更できません。変更する場合は、テーブルごと作り直しになります。
私が過去に体験した例ですが、製品情報を格納するテーブルのプライマリフィールドを規定の名前(new_name)で作成しました。列を数十個ほど追加した段階で、設計担当から「プライマリ列は、製品名でなくて、製品コードが入るからnew_codeが適切な名前。作り直して」と言われました。テーブルの作成からやり直しになりました。
テーブル定義の段階でどんなデータが入るか明確にしておきましょう。もし、決まらない場合は、どんなデータが入っても違和感がない、名前(new_primary)をつけておくという対処方法もあります。
落とし穴2 最大長(文字数)に注意
プライマリ列の最大長は、規定で100文字になっています。これ、適切な長さでしょうか。
とりあえずと、100文字のままにしておくと、後から問題が起こるかも。
どれくらいの長さの値が入るか検討しましたか?
確かに、値が氏名や会社名だったら、100文字は超える可能性は低そうです。では、メールアドレスはどうでしょう。標準化規格によると理論上は、245文字だそうです。製品名はどうでしょうか。超える事ありそうですよね。
私が最近体験した例ですが、外部システムで登録した情報を、WebAPIを使用してDataverseに登録する処理で、エラーが発生していました。調査したところ、プライマリ列の上限100文字を超えるデータを登録する時にエラーが発生していました。仕様変更により100文字を超える場合が発生していたのです。対応として、上限を増やして解決しました。
ちなみに、プライマリ列に設定できる、最大文字数は850でした。Dataverse 内でインデックスとして使用している事が理由のようです。1行テキスト型の最大値4000より短いので注意です。
まとめ
プライマリ列は、テーブル作成時に、「とりあえず」で作ってしまうことがあるかもしれませんが、
どのような種類の、どれくらいの長さのデータが入るか、良く考えてから作成しましょう。
以上です。