MENU
目次

データテーブルのPrimaryKey(主キー)設定と活用法完全ガイド【UiPath・VB.Net入門】

PrimaryKeyプロパティ徹底解説
目次

主キー(PrimaryKey)とは?UiPathデータテーブルでの役割と重要性

主キー(PrimaryKey)とは、データテーブル内の各行を一意に識別するための特別な列のことです。

もっと簡単に言えば「この行だけを確実に指し示すことができる目印」です。
この目印を使ってデータ検索を実施できます。

例えば、以下の「社員情報」テーブルでは、「社員ID」がPrimaryKeyとして最適でしょう。
理由は「社員ID」を指定すれば対象行が必ず1つ特定できるためです。

社員ID氏名部署入社年月日
1001山田太郎営業部2020/4/1
1002佐藤花子経理部2021/4/1
1003鈴木一郎開発部2019/10/1

「社員ID」がPrimaryKeyとして最適な理由

  • 各社員には唯一無二の社員IDが割り当てられる
  • 社員IDは通常変更されない
  • 社員IDを使えば素早く特定の社員の情報を検索できる

データテーブル操作メソッドを網羅している記事もあるので、ぜひご覧ください

あわせて読みたい
【保存版】UiPathで使えるデータテーブル操作テクニックを全網羅!Select、Merge、AsEnumerableなど!Ui... データテーブルとは UiPathでのRPA開発において、データテーブルは重要な変数です。ExcelやCSVからデータを取り込んだり、データベースから情報を抽出したりする際に使...

PrimaryKey選定の3つの条件

PrimaryKeyは以下の条件を満たすものが良いでしょう。

1. 一意性

PrimaryKeyの値はテーブル内で重複することができません。。

2. 非NULL性

PrimaryKey列には空の値(NULL)を入れることができません

3. 安定性

PrimaryKeyの値は頻繁に変更されるべきではありません

2種類のPrimaryKeyについて

PrimaryKeyは通常1つの列を指定しますが、どうしても1つの列では上記の条件を満たせない時があります。

その場合は複数の列を組み合わせてPrimaryKeyにすることで、条件を満たすことができるのです。

1. 単一PrimaryKey

1つの列だけで行を識別する場合
 例:「顧客ID」、「商品コード」など

2. 複合PrimaryKey

複数の列の組み合わせで行を識別する場合
 例:「注文ID」と「商品ID」の組み合わせなど

PrimaryKeyが必要な3つの理由

PrimaryKeyを設定することで、特定の行を素早く検索したり、データの整合性を保ったりすることができます。

1. データの一意性保証

PrimaryKeyは重複できないので、同じデータが重複して登録されることを防ぎます。
例えば、同じ顧客IDを持つ顧客情報が複数存在することを防ぎます。

2. 高速な検索と取得

PrimaryKeyを使えば、膨大なデータの中から特定の行を瞬時に見つけることができます。

3. データの整合性維持

PrimaryKeyは一意でNullも受け付けないため、データの一貫性と整合性を保つことができます。

U

次は主キーの設定方法について解説します

PrimaryKeyの設定方法とFindデータ検索

ここからは2種類のPrimaryKeyの設定方法について紹介します。
PrimaryKeyは単一列でも、複数列でも設定可能です。

単一PrimaryKeyの設定手順

構成:DataColumn() = DataTable.PrimaryKey

以下のようなデータテーブルであれば、社員IDを主キーにします。
社員IDの値は一意であり、変更される頻度が低いからです。

社員ID(PrimaryKey)氏名部署入社年月日
1001山田太郎営業部2020/4/1
1002佐藤花子経理部2021/4/1
1003鈴木一郎開発部2019/10/1
このデータテーブルは単一主キーでOK

使用例:

VB
dt.PrimaryKey = {dt.Columns("社員ID")} → 「社員ID」列をPrimaryKeyとして設定
dt.Rows.Find(3) → IDが3の行を素早く検索(PrimaryKeyが設定されていることが前提)

Uipathでの実装例:

Uipathでの実装例:PrimaryKeyを設定しデータを検索
PrimaryKeyを設定し、社員ID「002」の従業員氏名を取得できた
  • データテーブルを構築:上記の社員IDを含むデータテーブルを構築
  • 代入:社員IDをプライマリキーに割り当てる(New DataColumn()は省略可能)
  • メッセージボックス:データテーブル変数.Rows.Find("002")で社員番号「002」の行を検索し、Item("氏名")で氏名列の値を取得

複合PrimaryKeyの設定手順

構成:DataTable.PrimaryKey = New DataColumn() {列1, 列2, ...}

以下のデータテーブルでは、部署IDだけでも社員IDだけでもPrimaryKeyの条件を満たせません。
このような場合、複数の列を複合PrimaryKeyとして設定することで解決できます。

社員IDも部署IDも一意ではないが、組み合わせると一意のデータになる

部署ID社員ID氏名役職入社年月日
10001白井武係長2015/04/01
10002山田太郎課長2010/04/01
10003佐藤花子主任2015/04/01
20001鈴木一郎係長2018/04/01
20002高橋次郎部長2008/04/01
30001田中三郎課長2012/04/01
30002伊藤四郎係長2019/04/01
このデータテーブルは複合主キーが適切

使用例:

VB
'複合主キーの設定
dt.PrimaryKey = {dt.Columns("部署ID"), dt.Columns("社員ID")} → 「部署ID」と「社員ID」の組み合わせを複合主キーとして設定

'複合主キーを使って検索
dt.Rows.Find({20, "001"}) → 部署ID=20、社員ID=001の行を返す(鈴木一郎さんの行)
dt.Rows.Find({30, "002"}) → 部署ID=30、社員ID=002の行を返す(伊藤四郎さんの行)
dt.Rows.Find({40, "001"}) → Nothing(該当する行がない場合)

'その他
dt.PrimaryKey.Length → 2 (主キーが何列で構成されているか)
dt.PrimaryKey(0).ColumnName → "ID" (主キーの最初の列の名前を取得)

Uipathでの実装例:

Uipathでの実装例:複合PrimaryKeyを設定しデータを検索
  • データテーブルを構築:上記の部署ID、社員IDを含むデータテーブルを構築
  • 代入:部署IDと社員IDをプライマリキーに割り当てる
  • メッセージボックス:データテーブル変数.Rows.Find({20,"001"})で部署ID「20」社員番号「001」の行を検索し、Item("氏名")で氏名列の値を取得

PrimaryKeyプロパティの注意点

  • PrimaryKeyに設定する列の値は一意である必要があります。重複値が存在するとConstraintExceptionエラーが発生します。
  • PrimaryKeyを設定したテーブルに重複データを追加しようとすると、エラーが発生します。
  • テーブルに行データが存在する状態でPrimaryKeyを設定する場合、既存データがPrimaryKey制約に違反していないか自動的にチェックされます。

PrimaryKeyの解除方法

テーブルからPrimaryKeyの設定を解除するには、空の配列を設定します。

VB
dt.PrimaryKey = New DataColumn() {} ' 主キー制約を解除

PrimaryKeyの活用例とSelectとの比較

1. Findメソッドによる高速な行検索

PrimaryKeyを設定することで、Findメソッドを使用した検索が可能になります。

VB
' ID列を主キーに設定
dt.PrimaryKey = New DataColumn() {dt.Columns("EmployeeID")}

' 主キーを使用して行を高速検索
Dim row As DataRow = dt.Rows.Find(2) ' IDが2の行を取得

Console.WriteLine(row("名前")) ' → "佐藤"

FindとSelectの違い

FindやSelectはデータテーブルの検索メソッドですが、どんな差があるのでしょうか。
それぞれの特徴を見ていきましょう。

  • Findメソッドは検索の柔軟性が低いですが、高速かつシンプルな構文です。
  • Selectメソッドは様々な条件で検索できる柔軟性が特徴ですが、やや複雑で速度も遅めです。

PrimaryKeyでの検索ではFindメソッド、それ以外はSelectメソッドを使うと良いでしょう。

項目Findメソッド(PrimaryKey)Selectメソッド
速度◎高速△やや遅い
柔軟性△低い(PrimaryKeyでしか検索できない)◎様々な条件で検索できる
複雑さ◎シンプル△条件次第では複雑

2. 重複データの追加防止

PrimaryKeyが設定されていると、同じキー値を持つ行の追加を防ぐことができます。

VB
Try
' ID列が主キーの場合、IDが1の行を追加しようとすると例外が発生
dt.Rows.Add(1, "鈴木", 35) ' ID=1は既に存在する場合
Catch ex As Exception
' 「主キー制約に違反しています」というエラーメッセージが表示される
Console.WriteLine(ex.Message)
End Try

PrimaryKeyを操作する際のベストプラクティス

PrimaryKeyを使用する場合、以下の点を考慮するとより適切に活用できます。

1. 一意性の確保

PrimaryKeyとして使用する列には必ず一意の値を持たせましょう

2. NULL値の回避

PrimaryKey列にはNULL値を含めないようにしましょう

3. データ型の考慮

数値型や文字列型など、単純に比較できるデータ型をPrimaryKeyに使用すると検索効率が向上します。

4. PrimaryKeyの早期設定

データテーブルを定義する際、データを追加する前にPrimaryKeyを設定しておくと、既存データがPrimaryKey制約に違反していないか確認する手間が省けます。

5. 複合PrimaryKeyの注意点

複合PrimaryKeyを使用する場合、検索時には必ずすべてのキー値を正しい順序で指定する必要があります。

まとめ

PrimaryKeyはデータテーブル内の行を一意に識別するための、便利な機能です。
PrimaryKeyを設定することで、データの整合性維持、高速な行検索、そして他のテーブルとの関連付けが可能になります。

UiPathでのデータ処理においても、大量のデータを扱う場合やデータの一貫性が重要な業務プロセスでは、適切にPrimaryKeyを設定することでより効率的な自動化を実現できます。

またデータテーブル以外にも、文字列や数値操作メソッドを網羅した完全ガイドも参考にすれば、より効率的に開発できるようになりますよ。

あわせて読みたい
【保存版】UiPath文字列操作テクニックを全網羅!CompareTo、IndexOf、PadLeftなど!UiPathやVB.Netで使... UiPathでは文字列(String型変数)を操作するための便利なメソッドがたくさん用意されています。初心者の方でも理解しやすいように、UiPathで使えるString型変数のメソ...
あわせて読みたい
【保存版】UiPathで使える数値操作テクニックを全網羅!CInt、IsNumeric、MaxValuetなど!UiPathやVB.Ne... UiPathでRPAを開発する際、数値データの操作は非常に重要な要素です。本記事では、UiPathで使用できるすべての数値型変数のメソッドを詳しく解説します。初心者の方でも...
Ueda
フリーランスエンジニア
RPAエンジニアです。
UipathやVBAを使用した開発を得意としています。優れた可読性と効率的な設計を併せ持つRPA開発を心がけています。
RPA初心者向けの教育経験多数あり。RPAの開発サポートも承ります。

Wordpressを用いたHP制作のお仕事も経験があります。本サイトもWordpressを用いて制作しております。

ペットのチワプーと暮らしてます。
  • URLをコピーしました!

コメント

コメントする

目次