技術情報ブログ
Power Platform
2025.03.19

SharePoint リストで主キーを実装し、比較してみた

SharePoint リストで主キーを実装し、比較してみた
池内佑哉

こんにちは。アーティサン株式会社の池内です。

本記事では主キーをテーマにSharePoint リストにて様々な値を用いて実装し、それぞれの評価と比較をしましたので、ご紹介します。

 

補足: 主キーとは

主キーとは、レコードが唯一のものであることを示す項目のことです。
この項目を参照することで、他のレコードと被らずに目的のレコードを得られるようになります。 項目を主キーとするには、以下の制約が必要です。

列の値における一意性の適用

 

主キー制約

  1. レコード間で値が重複してはならない(UNIQUE 制約)
  2. NULL 値を取ることはできない(NOT NULL 制約)

 

主キーの設定方法

SharePoint リスト に「主キー」という設定項目はないですが、UNIQUE 制約NOT NULL 制約を満たすことで主キーとして扱うことができます。

この条件を満たすために、主キーとしたい列の編集画面を開き、この列に情報が含まれている必要があります一意の値を適用の 2 項目を「はい」に設定します。

列の編集

 

主キー値の生成方法

主キーとする列を設定後、主キー値を生成するための処理を追加します。
今回は、Power Apps から自動で主キーを設定するときに使用できる以下の方法をご紹介します。

  1. SharePoint の ID 列
  2. First 関数を用いたカスタム値
  3. GUID 関数
  4. Now 関数

 

1.SharePoint の ID 列

SharePoint リストを作成すると自動的に作成されるID 列は、シンプルに使用するには最適の列です。
ID 列は、リストにレコードが追加されるたびに自動的に番号を振るオートナンバー機能が備わっています。

あまり Power Apps や SharePoint に慣れていない方は、まず ID 列を使用することをお勧めします。

メリット

  • 初期設定不要で使用できること
  • ID 列は既定でオートナンバー機能が備わっているため、主キーの条件である 2 つの制約を自動的に満たします。そのため、設定なしですぐに使うことができます。

  • 競合が発生しないこと
  • ID 列のオートナンバー機能はSharePoint にレコードが追加されるタイミングで番号を付与するため、同時に複数のレコードが追加された場合でも順番に番号が振られ、競合が発生することはありません。

デメリット

  • SharePoint リストを移行するとき、ID を引き継げないこと
  • ID 列は手動で値を変更できないため、他のリストに引き継ぐことはできません。また、「SubID」などの新しい数値列を作成して値をコピーした場合でも、オートナンバー機能がなくなってしまうため、やはり ID 列の代わりとして使用することはできません。

  • 番号は 1 から始まり、1 ずつ増加する以外の設定はできないこと
  • オートナンバーの設定を変更することはできません。必ず番号は 1 から始まり、1 ずつ増加する設定になります。また、レコードを削除した場合、そのレコードに付与されていた ID が再利用されず、歯抜けのようになります。

 

2.First 関数を用いたカスタム値

採番ルールが決まっている場合は、First 関数を主とした関数を用いて疑似オートナンバーを生成する方法を使います。

First 関数を使用することで現在の最新のレコードのナンバーを受け取り、[最新ナンバー+1]とすることで次の番号を入力することができます。

例として、“A[今日の日付(年月日)]-[オートナンバー]” というルールで主キーを生成する場合、以下のような関数になります。(PrimaryKey 列を主キーとする)

$"A{
    Text(Today(),"yymmdd")
}-{
    Right($"000{
        Value(Right(
            First(SortByColumns(お知らせ,"PrimaryKey",SortOrder.Descending)
            ).PrimaryKey,3))+1
    }",3)
}"

この関数を使用して主キーを発行すると以下のようになります。

PrimaryKey
First 関数を用いたカスタム値

メリット

  • ユーザーの視認性が高い
  • 関数を駆使して作成した主キーは、ユーザーが理解しやすく、視認性が高いです。

  • 既存の管理番号などを踏襲できる
  • ることができます。これにより、既に組織で番号作成のルールが決められている管理番号などを主キーとする場合でも、ルールをそのまま適用することができます。

デメリット

  • Power Apps の知識が必要である
  • 関数を組み合わせる都合上、ある程度 Power Apps の知識が必要です。

  • 保守や移行が難しくなる
  • 列を参照するケースもあり得るため、リストを移行するときに列名が一致しないなどの問題が発生し、移行後関数を修正する必要がある可能性もあります。

  • 競合が発生する可能性がある
  • 複数ユーザーが同時にレコードを登録した場合、競合が発生します。 これは、主キーを生成してから登録するまでの間に他のユーザーが主キーを生成すると同一のナンバーが生成されることによって、重複エラーが発生し後から登録しようとしたデータが登録できなくなる、というものです。

2人のユーザーが同時にレコードを登録した場合の処理

 

3.GUID 関数

GUID 関数は、Microsoft が採用しているグローバル一意識別子(例:9cef1e6a-594f-4a81-a5c4-1298fb6e0f71)を生成するための関数です。

GUID 関数

メリット

  • 主キーが重複しない
  • 誰が生成しても重複しない値をそれぞれのアプリで発行するため、2.First 関数を用いたカスタム値で生じた主キーが重複する問題を回避することができます。

デメリット

  • 値がランダムである
  • 生成文字列がランダムで意味を持たないことから、ユーザーが手動で扱うのは不可能です。そのため、基本的に非表示にして裏で運用することになります。

 

 

4.Now 関数

Now 関数は、現在の日付時刻を取得する関数です。Power Apps では、以下のように Text 関数と組み合わせることで現在時刻の秒数まで表示することができます。

Text( Now(), "yyyy/mm/dd/ hh:mm:ss" )
Now関数

メリット

  • ユーザーの視認性が高い
  • カスタム値よりは自由度は低いですが、日付時刻はユーザーが理解しやすく、視認性が高いです。

  • 1 秒以上間隔がある操作に対して、主キーが重複しない
  • 値が 1 秒ごとに変わるため、2.First 関数を用いたカスタム値で生じた主キーが重複する問題をある程度回避することができます。

デメリット

  • 1 秒以内に主キーを生成した場合、主キーが重複する
  • 1 秒以内に主キーを生成すると同一のナンバーが生成されることによる重複エラーが発生してしまいます。

 

比較

上記で紹介した 4 つの生成方法について、性能を下記表にまとめました。

主キー値を選定する際は、こちらの表をご活用ください。

※◎ >〇> △ > × の順で高評価

比較項目

ID 列

カスタム列

GUID 関数

Now 関数

設計しやすさ


値の連続性


(ランダム値)


(現在時刻)

主キーの見た目


(数値のみ)


(ランダム値)


(現在時刻)

複数ユーザーの使用


(競合の影響を
考慮する必要あり)


(1 秒以内の同時登録で
競合が発生する)

ルールの拡張性

リストの移行


(関数の修正が
必要な場合あり)

 

まとめ

本記事では、主キー値の生成について、4 つの方法を比較しました。

どの方法がベストとなるかは要件によって変わるものの、重要なのは主キーは一意性を保つためのものであるということ。

今までの採番ルールを踏襲するために複雑な設計が必要なこともありますが、可能であれば主キーはできるだけシンプルな設計にしたいですね。

本記事がアプリ設計における検討の一助になれば幸いです。

最後までお読みいただきありがとうございました!

Azure SQL DatabaseやPower AppsとSharePointなどの開発担当:池内佑哉

池内佑哉

大手部品製造会社に新卒で入社したものの、部内でどんどん人が辞めていく流れに危機感を感じわずか2年でIT未経験のままアーティサンへ。
IT業界の荒波に溺れかけながらもなんとかしがみつき、気が付けば人に指示を出す側に回っていました。
趣味は殺陣にミュージカル、歌に作曲、謎解きにボードゲーム、紅茶とコーヒーとワインなど……とにかく色々なことに手を出しては、ちょこちょこアウトプット(舞台への出演や曲やボードゲームの製作など)を出しています(職業病?)
たまにはゆっくり温泉旅行にでも行きたい……♨

シェアする
記事カテゴリ
最新記事
2025.03.19

SharePoint リストで主キーを実装し、比較してみた

2025.03.12

SharePointのデザインをもっとおしゃれに!(X-SP Style | SharePoint デザイン拡張サービスのご紹介)(4) サンプルの紹介その2

2025.03.05

SharePoint:ごみ箱の中身って誰が見えるの?

2025.02.26

(今更ながら)フルリモートワークってどうなの?

2025.02.19

Power Apps:外部DBと接続する方法まとめ

モデル駆動型アプリPower AppsPower PlatformSharePointExcelPower AutomateC#attributevalidationローコードAngularAccessInfoPathMatTableAngular Materialデータ構造SortByColumns関数TypeScriptHTMLEF CoreマイグレーションFramework CoreAttribute directivesO/Rマッパーazure sql databaseCase式HTTP RequestCSSxUnit.Net Core 3.1VSCode.Net Core Test ExplorerDataverse for Teamsitem関数Google MapsMarker ClustererRANK()関数Dynamics 365 SalesMicrosoft TranslatorマーカークラスタリングライブラリtailwindcssマルチテナントドロップダウンメニューBreakpointObserverメディアクエリスマホPCレスポンシブ入門初心者中級者キャンバスアプリDatePickerDropdownviewビューアクセス制限承認リマインドSetForAllUpdateContextロードマップ技術It情報技術メッセージIDメールfirst()関数nest入れ子動的リストcollectionコレクション複数の添付ファイル承認フローformエクスポートインポートカスタマイズcomponentダイアログコンポーネントdialogTips新機能変数検索Microsoft 365グループセキュリティグループ送信元メールの送信差出人インスタントクラウドフロー自動化したクラウドフロー委任VBAエラーエクセルerror復元restorePower BI個人列ユーザー列SharePoint Onlineリスト非表示アプリ[市民開発者構築自動化したクラウド フローフローの種類インスタント クラウド フロースケジュール済みクラウド フローレスポンシブ レイアウトresponsive layoutデータ行の制限引き継ぎ退職所有者を変更異動LoopMicrosoftdesignJSONデザイン運用選択肢列参照列ChatGPTOpenAIオープンAIチャットGPTgalleryギャラリースクロールコンテナショートカットキーshortcut keyconcat関数文字制限フロー実行開発環境環境本番環境ライセンス環境構築手順pipelineCI/CDパイプラインDevOpsMicrosoft 365簡易在庫管理時間外通知ファイルフィルター クエリドキュメント ライブラリfilter querysortソートmultiple item複数項目シェアポイント便利機能カレンダーCalendarTeamsローコード開発非エンジニア体験談勉強内製化市民開発管理ガバナンスerror notificationエラー通知削除フォルダゴミ箱完全削除モデル駆動型セキュリティロールビジネスルールDataverseJavaScript表示切替登録者システム列登録日更新者更新日変更外部DB連携接続データフローrecycle binごみ箱アクセス許可SharePoint FrameworkSPFxサンプルsampleX-SPStyleStudioAI生成系AICopilotlicense添付ファイルコントロールファイルサイズフルリモートワークアーティサンArtisan転職主キー
PageTop
ページトップに戻る