主キー(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を使えば素早く特定の社員の情報を検索できる

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も受け付けないため、データの一貫性と整合性を保つことができます。

次は主キーの設定方法について解説します
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 |
使用例:
dt.PrimaryKey = {dt.Columns("社員ID")} → 「社員ID」列をPrimaryKeyとして設定
dt.Rows.Find(3) → IDが3の行を素早く検索(PrimaryKeyが設定されていることが前提)
Uipathでの実装例:


- データテーブルを構築:上記の社員IDを含むデータテーブルを構築
- 代入:社員IDをプライマリキーに割り当てる(
New DataColumn()
は省略可能) - メッセージボックス:
データテーブル変数.Rows.Find("002")
で社員番号「002」の行を検索し、Item("氏名")
で氏名列の値を取得
複合PrimaryKeyの設定手順
構成:DataTable.PrimaryKey = New DataColumn() {列1, 列2, ...}
以下のデータテーブルでは、部署IDだけでも社員IDだけでもPrimaryKeyの条件を満たせません。
このような場合、複数の列を複合PrimaryKeyとして設定することで解決できます。
社員IDも部署IDも一意ではないが、組み合わせると一意のデータになる
部署ID | 社員ID | 氏名 | 役職 | 入社年月日 |
---|---|---|---|---|
10 | 001 | 白井武 | 係長 | 2015/04/01 |
10 | 002 | 山田太郎 | 課長 | 2010/04/01 |
10 | 003 | 佐藤花子 | 主任 | 2015/04/01 |
20 | 001 | 鈴木一郎 | 係長 | 2018/04/01 |
20 | 002 | 高橋次郎 | 部長 | 2008/04/01 |
30 | 001 | 田中三郎 | 課長 | 2012/04/01 |
30 | 002 | 伊藤四郎 | 係長 | 2019/04/01 |
使用例:
'複合主キーの設定
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での実装例:


- データテーブルを構築:上記の部署ID、社員IDを含むデータテーブルを構築
- 代入:部署IDと社員IDをプライマリキーに割り当てる
- メッセージボックス:
データテーブル変数.Rows.Find({20,"001"})
で部署ID「20」社員番号「001」の行を検索し、Item("氏名")
で氏名列の値を取得
PrimaryKeyプロパティの注意点
- PrimaryKeyに設定する列の値は一意である必要があります。重複値が存在するとConstraintExceptionエラーが発生します。
- PrimaryKeyを設定したテーブルに重複データを追加しようとすると、エラーが発生します。
- テーブルに行データが存在する状態でPrimaryKeyを設定する場合、既存データがPrimaryKey制約に違反していないか自動的にチェックされます。
PrimaryKeyの解除方法
テーブルからPrimaryKeyの設定を解除するには、空の配列を設定します。
dt.PrimaryKey = New DataColumn() {} ' 主キー制約を解除
PrimaryKeyの活用例とSelectとの比較
1. Findメソッドによる高速な行検索
PrimaryKeyを設定することで、Findメソッドを使用した検索が可能になります。
' 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が設定されていると、同じキー値を持つ行の追加を防ぐことができます。
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を設定することでより効率的な自動化を実現できます。
またデータテーブル以外にも、文字列や数値操作メソッドを網羅した完全ガイドも参考にすれば、より効率的に開発できるようになりますよ。




コメント