なぜ作成したのか
- PPCが提供しているデータマッピング資料を見ているけれど、そのままだとちょっと扱いにくい気がしているので、ER図とかクラスで整理してみる
ER図
🗂 ER図の概要(Entity-Relationship Diagram)
個人情報保護委員会の資料(例:「個人情報取扱事業者が講ずべき措置の例」)に基づく代表的な管理項目は以下のとおりです:
- 保有する個人情報の種類(例:氏名、住所、メールアドレス、電話番号など)
- 利用目的
- 取得方法
- 保管場所
- 提供先(第三者提供の有無と相手先)
- 管理責任者
- 保管期間
- 安全管理措置
- 処分方法
🧩 エンティティ一覧と主な属性
-
personal_info_id(PK)
-
category(氏名、住所、電話番号など)
-
description(項目の説明)
-
data_format(文字列、数値、画像など)
-
sensitivity_level(機微情報の有無)
② Owner(情報の本人)
-
owner_id(PK)
name
email
phone
address
③ Purpose(利用目的)
-
purpose_id(PK)
description
④ Acquisition(取得方法)
-
acquisition_id(PK)
-
method(Webフォーム、書面、口頭など)
date_acquired
⑤ Storage(保管情報)
-
storage_id(PK)
-
location(ファイルサーバ、クラウド、紙媒体など)
system_name
retention_period
deletion_method
⑥ ThirdPartyProvision(第三者提供)
-
provision_id(PK)
recipient_name
reason
provision_date
⑦ Administrator(管理責任者)
-
admin_id(PK)
name
department
contact_info
⑧ SecurityMeasure(安全管理措置)
-
measure_id(PK)
-
technical_control(アクセス制御、暗号化など)
-
organizational_control(教育、マニュアル整備など)
-
physical_control(施錠、入退室管理など)
🔗 リレーション(主な関係)
-
Ownerは複数のPersonalInformationを保有(1:N)
-
PersonalInformationは1つのPurpose、Acquisition、Storageに紐づく(N:1)
-
PersonalInformationは複数のThirdPartyProvisionを持つ(1:N)
-
PersonalInformationは1つのAdministratorとSecurityMeasureに紐づく(N:1)
💡 ER図(テキストベース)
[Owner] ──< [PersonalInformation] >── [Purpose]
│ │
│ └──< [Acquisition]
│
└──< [ThirdPartyProvision]
│
└──> [Storage]
└──> [Administrator]
└──> [SecurityMeasure]
✅ 必要な観点:運用・証跡管理で押さえるべき要素
「台帳としての静的な情報管理」から一歩進んで、実際の運用・ライフサイクル管理(契約~提供~終了~廃棄)をどう記録し、関係者の確認を記録に残すかという点は、個人情報管理の中でも「運用上の信頼性・証跡確保」の重要な部分です。
| 観点 |
記録すべき内容 |
関連エンティティの例 |
| 契約 |
契約開始日、契約書番号、委託元企業、契約形態 |
Contract |
| 提供開始 |
実提供開始日、同意記録、システム連携のログ |
ServiceProvision |
| 終了・廃棄 |
終了日、廃棄日、廃棄証明書、廃棄方法 |
DisposalRecord |
| 委託元確認 |
委託元責任者の確認日、確認手段(電子署名/書面) |
VerificationRecord |
🧩 追加すべきエンティティ構成案(拡張ERモデル)
① Contract(契約情報)
-
contract_id(PK)
-
client_name(委託元)
start_date
end_date
-
contract_type(業務委託、共同利用 等)
contract_document_url
-
responsible_person_id(→ Person)
② ServiceProvision(提供管理)
-
provision_id(PK)
-
personal_info_id(→ PersonalInformation)
-
contract_id(→ Contract)
start_date
end_date
-
status(提供中、終了済み)
-
provision_method(API, 紙媒体など)
③ DisposalRecord(廃棄記録)
-
disposal_id(PK)
-
personal_info_id(→ PersonalInformation)
disposal_date
-
disposal_method(シュレッダー、暗号消去など)
confirmation_doc_url
④ VerificationRecord(確認記録)
-
verification_id(PK)
-
verifier_id(→ Person または ClientContact)
-
verified_on(確認日時)
-
verification_type(電子署名、メール確認、書面受領)
-
note(確認内容メモ)
-
related_entity_type(Contract, DisposalRecordなど)
-
related_entity_id(関連レコードID)
必要に応じて社内外の人物情報を以下のように区別して管理:
-
person_id(PK)/client_contact_id
name
department
email
-
role(管理者、確認者、窓口)
🧾 記録の連携イメージ
[Contract] ──< [ServiceProvision] >── [PersonalInformation] >── [DisposalRecord]
│ │ │
└──< [VerificationRecord] [VerificationRecord] [VerificationRecord]
📄 テーブル定義書(概要)
Owner(個人情報の本人)
| カラム名 |
データ型 |
制約 |
備考 |
| owner_id |
UUID |
PK |
一意な本人ID |
| name |
VARCHAR(100) |
NOT NULL |
氏名 |
| email |
VARCHAR(255) |
|
メールアドレス |
| phone |
VARCHAR(20) |
|
電話番号 |
| address |
TEXT |
|
住所 |
| カラム名 |
データ型 |
制約 |
備考 |
| personal_info_id |
UUID |
PK |
一意な情報ID |
| category |
VARCHAR(50) |
NOT NULL |
情報の種類(例:氏名) |
| description |
TEXT |
|
説明 |
| data_format |
VARCHAR(50) |
|
文字列、数値など |
| sensitivity_level |
VARCHAR(50) |
|
機微情報かどうか |
| owner_id |
UUID |
FK → Owner(owner_id) |
本人 |
| purpose_id |
UUID |
FK → Purpose(purpose_id) |
利用目的 |
| acquisition_id |
UUID |
FK → Acquisition(acquisition_id) |
取得情報 |
| storage_id |
UUID |
FK → Storage(storage_id) |
保管情報 |
| admin_id |
UUID |
FK → Administrator(admin_id) |
管理責任者 |
| security_measure_id |
UUID |
FK → SecurityMeasure(security_measure_id) |
安全管理措置 |
Purpose(利用目的)
| カラム名 |
データ型 |
制約 |
備考 |
| purpose_id |
UUID |
PK |
一意な目的ID |
| description |
TEXT |
|
利用目的の説明 |
Acquisition(取得方法)
| カラム名 |
データ型 |
制約 |
備考 |
| acquisition_id |
UUID |
PK |
一意なID |
| method |
VARCHAR(100) |
|
Web、書面、口頭等 |
| date_acquired |
DATE |
|
取得日 |
Storage(保管情報)
| カラム名 |
データ型 |
制約 |
備考 |
| storage_id |
UUID |
PK |
一意なID |
| location |
VARCHAR(100) |
|
保管場所(クラウド等) |
| system_name |
VARCHAR(100) |
|
保管システム名 |
| retention_period |
VARCHAR(50) |
|
保持期間(例:5年) |
| deletion_method |
VARCHAR(100) |
|
消去方法(例:暗号化削除) |
Administrator(管理責任者)
| カラム名 |
データ型 |
制約 |
備考 |
| admin_id |
UUID |
PK |
一意なID |
| name |
VARCHAR(100) |
|
氏名 |
| department |
VARCHAR(100) |
|
所属部署 |
| contact_info |
VARCHAR(255) |
|
連絡先 |
SecurityMeasure(安全管理措置)
| カラム名 |
データ型 |
制約 |
備考 |
| security_measure_id |
UUID |
PK |
一意なID |
| technical_control |
TEXT |
|
アクセス制御等 |
| organizational_control |
TEXT |
|
教育・規定整備等 |
| physical_control |
TEXT |
|
入退室管理等 |
ThirdPartyProvision(第三者提供記録)
| カラム名 |
データ型 |
制約 |
備考 |
| provision_id |
UUID |
PK |
一意なID |
| personal_info_id |
UUID |
FK → PersonalInformation |
対象情報 |
| recipient_name |
VARCHAR(100) |
|
提供先 |
| reason |
TEXT |
|
提供理由 |
| provision_date |
DATE |
|
提供日 |
Contract(契約情報)
| カラム名 |
データ型 |
制約 |
備考 |
| contract_id |
UUID |
PK |
一意なID |
| client_name |
VARCHAR(100) |
|
委託元名 |
| start_date |
DATE |
|
契約開始 |
| end_date |
DATE |
|
契約終了 |
| contract_type |
VARCHAR(50) |
|
業務委託 等 |
| contract_document_url |
TEXT |
|
契約書リンク等 |
| responsible_person_id |
UUID |
FK → Person(person_id) |
責任者 |
ServiceProvision(提供管理)
| カラム名 |
データ型 |
制約 |
備考 |
| provision_id |
UUID |
PK |
一意なID |
| personal_info_id |
UUID |
FK → PersonalInformation |
|
| contract_id |
UUID |
FK → Contract |
|
| start_date |
DATE |
|
提供開始 |
| end_date |
DATE |
|
提供終了 |
| status |
VARCHAR(50) |
|
提供中/終了等 |
| provision_method |
VARCHAR(100) |
|
提供手段(API等) |
DisposalRecord(廃棄記録)
| カラム名 |
データ型 |
制約 |
備考 |
| disposal_id |
UUID |
PK |
一意なID |
| personal_info_id |
UUID |
FK → PersonalInformation |
|
| disposal_date |
DATE |
|
廃棄日 |
| disposal_method |
VARCHAR(100) |
|
廃棄方法 |
| confirmation_doc_url |
TEXT |
|
廃棄証明書リンク等 |
VerificationRecord(確認記録)
| カラム名 |
データ型 |
制約 |
備考 |
| verification_id |
UUID |
PK |
一意なID |
| verifier_id |
UUID |
FK → Person / ClientContact |
|
| verified_on |
DATE |
|
確認日時 |
| verification_type |
VARCHAR(50) |
|
電子署名など |
| note |
TEXT |
|
確認メモ |
| related_entity_type |
VARCHAR(50) |
|
"Contract"等 |
| related_entity_id |
UUID |
|
紐づくID |
Person(社内担当者)
| カラム名 |
データ型 |
制約 |
備考 |
| person_id |
UUID |
PK |
担当者ID |
| name |
VARCHAR(100) |
|
氏名 |
| department |
VARCHAR(100) |
|
部署 |
| email |
VARCHAR(255) |
|
連絡先 |
| role |
VARCHAR(50) |
|
担当者/確認者など |
| カラム名 |
データ型 |
制約 |
備考 |
| client_contact_id |
UUID |
PK |
委託元ID |
| name |
VARCHAR(100) |
|
氏名 |
| organization |
VARCHAR(100) |
|
所属企業 |
| email |
VARCHAR(255) |
|
連絡先 |
| role |
VARCHAR(50) |
|
窓口、責任者など |
クラス図
🎯 ユースケース
| 役割 |
概要 |
| 担当者(現場) |
プロジェクト開始時に契約情報+個人情報を登録 |
| 現場管理者 |
登録内容を確認・承認 |
| 台帳管理者 |
台帳全体を監督・運用状況の監査 |
🧩 シーケンス図
所感
- 実際の登録データを入れ込んでみないと適切かどうかはまだ判断つかない感じ。
- Appsheetで実装してみよう
Discussion