見出し画像

AppSheet実践編シリーズ㉒~(IT初心者向け)主キーってなぁに?

はじめに

 こんにちは。ソシオネットの髭晩酌です。

 最近、晩酌のおつまみにカマンベールチーズを食べています。きっかけは某メーカーのCMで見た「15分ガマンベール」というフレーズを見て、です。
 冷蔵庫から取り出して15分待つと美味しいよ、ということなのですが、確かに冷蔵庫から取り出してすぐ食べるよりも美味しく感じられました。 
 で。。。バーで出てくるカマンベールは家で食べるよりなぜ美味しいのだろうか、ってずっと不思議に思っていたのですが、これが理由か!と初めて気づきました。(バーではフードをそんなに急いで食べないので、結果的に15分ガマンベールになるということです)
 チーズは健康にもいいらしいので、今後も定番おつまみラインナップに加えていこうと思います!

 さて、今回のテーマは主キー(しゅきー)です。主キーとはなんぞ?についてもわかりやすく語りますよ~。AppSheetに興味がない人であっても、IT初心者であれば必見のブログです。

 そして突然ですが、AppSheetでアプリを作る時、皆さんは最初に何をしますか?
 恐らくほとんどの方がまず最初に、業務に即したデータモデル(=テーブル)をExcelやGoogleスプレッドシートで作り、それをAppSheetにアップロードしてアプリを作成し始めていると思います。
 そしてアップロードするテーブルについて、ヘッダ行だけではなく業務データを含めている場合もあると思いますが、その場合、皆さんは主キーはExcelでどのように作っていますか?
 このブログの後半では、主キー、つまりID列のデータ(ランダム文字列)をExcelで作る方法についてもお話していきます。


AppSheetにおける主キーをわかりやすく!

そもそも主キーとは?

 世の中の様々なシステムで使われているデータベースでは、それぞれのテーブルの各行を一意に識別する項目(あるいは項目の組み合わせ)が必要です。この各行を一意に識別する項目をシステムの世界では「主キー」と呼びます。

 主キーとなった項目は、他の行と値が重複することはできません。なぜならば、システムは主キーを元に、操作対象の行を識別してデータを抽出したり操作したりするからです。主キーが重複してしまうと、利用者が意図しないデータをシステムが更新したりするので、まずいですよね?

主キーが重複すると、システムは行を一意に認識できない

AppSheetにおける主キーとは?

 もちろんAppSheetで作ったアプリで使うテーブルにも主キーが必要です。AppSheetだとData画面から設定できるKEY?欄のチェックボックスをONにした項目が主キーとなります。

 AppSheetのヘルプによると「自然キー」「システム自動生成キー」「行番号キー」という3種のキーがサポートされていますが、重複防止という観点で考えると、システム自動生成キーの1種であるランダムキーを使うケースがほとんどだと思います。

 AppSheetにアップロードするテーブルの項目名に「id」という文字列が含まれていると、Data画面の当該項目のINITIAL VALUEに自動的に「UNIQUEID()」という関数が設定されていませんか?これがランダムキーを生成する関数となります。
※他にもランダムキーを生成する関数として「RANDBETWEEN」がありますがここでは割愛します
※キーについてさらに詳しく知りたい方は、弊社主催のAppSheet勉強会にご参加ください

 なおUNIQUEID()の仕様は、ヘルプによると「ランダムな8桁の文字と数字を組み合わせた文字列を生成する」となっています。
 実際にAppSheetで登録されたデータを直接スプレッドシートで見てみると、UNIQUEID()が設定された項目には「c19b29c0」「8a7cf1b1」などランダムな文字列が設定されているのが分かると思います。

 ということで、主キーの説明でした!

UNIQUEID()と同じデータをExcelで作ろう

 さて、冒頭に書いた通り、ヘッダ行だけではなく業務データを含むテーブルをAppSheetに最初にアップロードする場合は、当然キーのデータも必要となります。

 例えば、前回のブログでも出てきた以下の自動車テーブルを見てみましょう。


 このid列、もちろん「a001」「a002」のように手動で適当な文字列を登録してもOKなのですが、どうせならUNIQUEID()で作った文字列と同じようにランダムな文字列を登録しておきたいというニーズはありませんか?このランダム文字列を人間が頭で考えて入力するのは若干面倒なので、Excelで簡単を作ってしまおう、というのが今回の2つ目のテーマです。

 まずはExcelのA列に1~36の数字を36行目まで入れます。次にB列に、0~9の数字とa~zの英字を順に入力します。数字10種と英字26種があるので、A列と同じく36行目まで値が入ると思います。ここではこのシートを「キージェネレータ」という名前にしました。

「キージェネレータ」シート

 次に、別シートでキーの文字列を生成します(同じシートでもOKですが、なんとなく別シートの方がキレイです)。
 まず、キージェネレータシートのB列からランダムに1文字取得する関数は以下の通りです。

LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)

 この関数の処理の流れとしては以下です。

  1.  RANDBETWEENで1~36の数字の中からランダムに1つ選択

  2.  その値を持つA列を検索

  3.  同じ行のB列の値を取得

 つまり、この関数を8回繰り返せばUNIQUEID()と同じデータをExcelで作成できます。以下の要領ですね。最初にイコール(=)を付けてそのままセルに貼り付けてしまいましょう!

LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)
&LOOKUP(RANDBETWEEN(1,36),キージェネレータ!$A:$A,キージェネレータ!$B:$B)

 実際に上記の関数で8文字のランダム文字列をExcelで作成したイメージは以下の通りです。これをAppSheetにアップロードするテーブルのid列に貼り付ければOKです。貼り付ける際は「値貼りつけ」にするのをお忘れなく!

 冗長ではありますが、シンプルイズベストということで。。内製化に関係することは、何事もわかりやすいのが一番!!

終わりに

 本ブログでは、システムの世界で一般的な主キーの考え方と、UNIQUEID()と同じ仕様の文字列をExcelで作成する方法をご紹介しました。
 AppSheetに最初にデータをアップロードする際に、どうしても「a001」「a002」のような適当な文字列をキーにしたくない!UNIQUEID()と同じような文字列をキーにしたい!というニーズをお持ちの方は、ぜひ今回のブログを参考にしてください~。

 ということで、今回のブログは以上となります。ではまた次回ブログでお会いしましょう!ルネッサーンス!!

AppSheet勉強会を開催しております

 弊社主催のAppSheet勉強会を毎月開催しております。7月開催分のお申込みは以下からお願いいたします。

7/9(火)【毎月第2火曜開催】AppSheetを知ろう!初心者向けかんたんハンズオン勉強会! | Peatix

7/16(火)【毎月第3火曜開催】実践的なスキルが学べる!AppSheetアプリ開発ワークショップ | Peatix

※先月まで弊社都合で勉強会の開催を中止しておりましたが、7月から復活します!

IT内製化支援、Salesforceの運用・導入、DX化推進に関するご相談をお待ちしております

 弊社では、ノーコード開発ツールを用いたIT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。お気軽に弊社お問い合わせサイトよりご相談などをお寄せいただければと思います。

ソシオネットHP:http://www.socionet.co.jp/
対話型定額制アプリ開発サービス「DXデビュー」:https://socionet.co.jp/dxdebut/
IT内製化支援支援サービス「DXオープンラボ」:https://socionet.co.jp/insourcing-support-service/
IT運用とDX化のワンストップサポートサービス「DXサポーターズ」:https://socionet.co.jp/dx-supporters/



この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?