MENU
目次

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

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

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

迷える子羊

主キー(PrimaryKey)って何ですか?

現役エンジニア

簡単に言えば「この行だけを確実に指し示すことができる目印」です。
この目印を使えば、データ検索やテーブルマージが実現できますよ

主キー(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ってどの列を選べばいいの?

現役エンジニア

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

1. 一意性

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

2. 非NULL性

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

3. 安定性

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

笑顔の子羊

なるほど!だから社員IDのような「重複しない」「空白にならない」「内容が変わらない」列が良いんですね!

2種類のPrimaryKeyについて

迷える子羊

でもそんな列が無い時もあるよね?

現役エンジニア

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

現役エンジニア

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

1. 単一PrimaryKey

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

2. 複合PrimaryKey

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

笑顔の子羊

1つの列にこだわる必要は無いんですね!

PrimaryKeyが必要な3つの理由

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

1. データの一意性保証

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

2. 高速な検索と取得

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

3. データの整合性維持

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

U

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

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

迷える子羊

PrimaryKeyの設定方法は?

現役エンジニア

ここからは2種類の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("氏名")で氏名列の値を取得
笑顔の子羊

代入アクティビティだけで簡単に設定できるんですね

現役エンジニア

検索もFindメソッドを使えば簡単です!

複合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を設定するときは、以下の点に注意しましょう

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

PrimaryKeyの解除方法

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

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

PrimaryKeyの活用例とSelectとの比較

迷える子羊

他にもPrimaryKeyの便利な使い方はあるの?

現役エンジニア

データテーブルをマージする時にも便利ですよ

1. データテーブルをマージする際のPrimaryKeyの働き

以下の2つのデータテーブルを「PrimaryKeyを設定せずに」マージすると、どうなるでしょう?

社員ID氏名
001山田太郎
002佐藤花子
003鈴木一郎
データテーブル1
社員ID氏名
001山田次郎
004佐藤四郎
005鈴木五郎
データテーブル2

答えは以下の通りです。

社員ID氏名
001山田太郎
002佐藤花子
003鈴木一郎
001山田次郎
004佐藤四郎
005鈴木五郎
マージしたデータテーブル
迷える子羊

単純に2つのデータテーブルがマージされて、社員ID「001」が被ってるね?

現役エンジニア

データテーブル1,2にPrimaryKeyを設定してみましょう

社員IDをPrimaryKeyを設定し、マージすると以下の結果になります。

社員ID氏名
001山田太郎
002佐藤花子
003鈴木一郎
004佐藤四郎
005鈴木五郎
PrimaryKeyを設定してマージしたデータテーブル
笑顔の子羊

社員番号の重複が消えてますね

現役エンジニア

PrimaryKeyは一意になるので、重複しないようになります!

現役エンジニア

一部重複しているデータテーブルをマージする際などに便利ですね

2. 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でしか検索できない)◎様々な条件で検索できる
複雑さ◎シンプル△条件次第では複雑
笑顔の子羊

PrimaryKeyで検索したいなら「Find」が便利
それ以外は「Select」ですね!

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

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

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

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をコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次