公開日:2022-06-21
kintoneは、一種のデータベースではありますが世の中で広く使われているRDBMS(Relational DataBase Management System)ではありません。
ただ、RDBMSの考えがすべて無効かというとそういうことはありません。 このコラムでは、データベースでもっとも重要といってもいい「キー」について解説します。
このコラムは、弊社のYouTubeチャンネルで公開している次の動画の解説記事となります。
データにキーが存在する意味
データにはキーが必要です。ではキーとは何か?というと「あるデータを一意に特定できる値」です。
人間同士の会話であれば「あの件だけど」で通じるかもしれませんが、コンピューター相手に「あのデータ」では通じません。
データを更新するような場合には必ず「あのデータ」を確実に指し示す情報が必要となります。
それがキーです。
そのために、そのデータ群のなかで重複せず一意に決定するキーが必要なのです。
それをキントーンで実現するには「値の重複を禁止する」を設定したフィールドを少なくとも1つ設定してください。
kintoneにおいてキーがないと困ること
キントーンにおいてキーがないとどうなるでしょうか? 代表的な例を3つあげています。
関連レコードがひもつけられない
関連レコードを使う場合は、1:nの関係になるようにして、n側には1になる側のキー項目を持たせることをオススメします。
たとえば、顧客と顧客対応履歴の2つのアプリがるとき、顧客対応履歴の各レコードには顧客のキー項目があるとひもつけが簡単になります。
あえてn:nの関係にするケースも考えられますので、必ずキーでひもつけなくてはならないということではないのですが、多くのケースで1:nになると思いますのでキーでひもつけるほうが好ましいということになります。
そのためにも、必ずキー項目は持たせておく必要があるのです。
ルックアップ先が特定できない
「え、別に一意にならなくても選択ダイアログ出てくるよね?」と思ったあなた、正解です。キントーンの知識バッチリです。
しかし、ルックアップにはキー項目を使うことを強くオススメします。
なぜなら、ルックアップのキー項目を使っていない場合、画面で操作している分には、キントーンが選択肢を表示してくれて、どれとひもつけるかを選択させてくれます。
しかし、プラグインや外部連携サービス、独自開発したJavaScriptでルックアップ項目を更新する場合はどうでしょうか?
この場合は画面の操作ではありませんので、キー項目になっていないと、指定した値に対してデータが特定できないためにエラーになります。
そして、この挙動はCSVファイルからデータを読み込むときにも当てはまります。
CSVでデータをインポートしようとしたけれど、ルックアップのフィールドが一意に決定できないため、インポートに失敗するというのはキントーンあるあるの中でもトップクラスに君臨するよくある失敗です。
プラグインや連携サービスでデータ処理ができない
最初に触れたようにコンピューターにどのデータを処理するか伝えるにはそのデータを特定できないといけません。
データの取得時は複数レコードをまとめて取ることがあるので、必ずしもキーは必要ないのですが、キーがないと、どのデータを更新するべきかを示すことができません。
いいキーって?
では、キーは一意であればなんでもいいのでしょうか?そんなことはありません、いいキーには一定の特徴があります。
この5つの特徴をすべてクリアしているキーが望ましいです。
そして、キー項目を作ろうとするときにやりがちな悪手がいくつかあります。
一番やりがちなのが「連番を件数として使う」です。そして、これを件数として使うために欠番を埋めたくなる人がいます。しかし、欠番を埋めると本来異なるデータに同一の番号を振る危険があるためオススメできません。
では、いいキーはどうやって作っていけばいいのでしょうか? ここからはキントーンでキーとして使えそうなものの候補をみていきましょう。
キー候補
キントーンにはレコード番号という連番を振る機能が最初からついています。キントーン内に存在するレコードにはすべてこのレコード番号が振られています。
さらに、アプリコードという機能を使うとレコード番号の前に文字列をつけてキーとして扱うことができます。
しかし、レコード番号をキーとして使うことはオススメしません。
一番の理由は再利用できないからです。一度採番された番号は二度と同じ番号が採番されません、その影響でバックアップデータからレコードを戻したいというようなケースでレコード番号を戻すことができないため、レコード番号でルックアップしていたりすると破綻します。
次の候補は独自コードです。何かしらの採番規則に基づいて採番されたコードになります。桁に意味を持たせることもできるので人にとって理解しやすいコードとできる反面、データの意味が変化するとコード体系ごと破綻する恐れがあります。
たとえば、画像の例の中に「製品種別」というアルファベット1文字の項目がありますが「製品種別」が26個を超えると1文字では表現できなくなりコード体系が破綻します。
ですので、コードに意味を持たせる場合は将来の拡張をふまえて慎重に検討する必要があります。
複合キーはキントーンに存在する複数のフィールドを組み合わせて作り出すキーです。メリットとしてはキントーンの計算式で作り出すことができる点なのですが、キントーンは計算フィールドに「値の重複を禁止する」を設定できないのでユニークであることは自身で保証する必要があります。
しかし、組み合わせが必ずユニークであることを保証するのは意外と難しいものです。
たとえば「氏名」と「生年月日」があればユニークになるだろうと思っていたら同姓同名、同生年月日の人がミラクルで存在したということがあったりします。(実際に経験した話です)
gusuku Customineを使うと通常の文字列一行フィールドに複数の項目を組み合わせた結果を入れることができるので「値の重複を禁止する」を設定できます。
ユニークなIDというのはなにもキントーンだけの話ではなく、世界中あらゆるシステムで求められています。その問題を解決するために考え出されたのがUUIDです。UUIDにもいくつかのバージョンがあるのですが、ユニークであることが保証されているのでキーとして安心して使えます。
ただ、長いのであまり使う気にはなれません。
独自に採番した連番は比較的いい解決方法だと思われます。独自の採番を行うにはプラグインやgusuku Customineのような連携サービスもしくはJavaScriptでの開発が必要ですが、そのデメリットを補うだけのメリットがあります。
結局オススメはなにかというと、独自採番の連番です。デメリットもあるので慎重に選択する必要がありますが、強い理由がない場合は独自採番の連番を選択しておくのが安心だと思います。
ここまでキー項目についてみてきましたが、いかがでしたでしょうか?あなたのキントーンアプリにはキーはありますか?