独自開発した「ニューロ型データベースモデリング Ver.1」で個人情報保護法の簡単実装を考えてみた

###
はじめに
---

【 ニューロ型データベースモデリング  Ver.1 】とは

**「脳を構成する神経細胞（neuron）が繋がり合って情報を司る」**
という仕組み（ネイチャーテクノロジー）に着目し
私が**独自で研究・開発** してきた**「データベースモデリング」**です。
使用する**静的テーブル**は**「２個(２種類)だけ」**なのでシンプルな構造となり結果的に**基本メンテナンスフリー** の **汎用データベースモデリング** が出来上がりました。

詳しくは【 [開発の歴史](https://kuhen.org/ndb/?page_id=77)：2016-03-04～05　総務省「異能vation」協力・協賛企業マッチングイベントに「ニューロ型データベースモデリング」が選定される 】をご覧下さい。

###
個人情報保護に対応するには【閲覧専用のデータベース】を簡単に構築出来れば良い
---
稼働中のデータベースに登録されている個人情報を誰もが簡単に検索させる環境だと個人情報保護法違反になる昨今それなら稼働中の個人情報を【閲覧専用のデータベース】へエクスポート（構築）すれば「凌げる」のではないだろうか。
今から簡単に閲覧専用のデータベース構築のヒントを書いて行きたいと思います。
###
開発のきっかけ
---
2000年04月に36歳で（独身に戻って）事務SEとして現在所属している大阪の某法律事務所に転職し稼働中の「ネットワーク管理」を敏腕IT弁護士（2カ月後には海外留学で渡米）から引き継ぐことになった。
私はAccess2000で２個のテーブルを主キーでリレーションをする位しか経験は無かったがUNIXでCshやsedを使ってバッチ処理をしたりN88BASICで短大の教務システムや図書システムを開発していたので何とかなると簡単に考えていた。
説明を受けたのはSQLサーバを使いリアルタイムで事務処理をする「総合システム」を１から自前で開発することだった。完璧な「要件定義書」を受け取った時は「不安半分」「武者震い半分」であった。
###
そもそも「理想のデータベース」とは？
---
渡された「要件定義書」の中身を簡単に言うなら「海外も視野に入れて何にでも対応できるデータベースを構築せよ」というものだった。
今では【AI】という言葉が社会にあふれているが当時データベース開発を始めた2000年はパソコンの処理スピードも遅くスマートフォンなどまだ無い時代だった。
今から開発したい「何でも処理できる理想のデータベースとは？」を色々考えてみたところそれは【人間の脳】ではないか？【人工知能】なんて開発出来ないここで無理だとあきらめた。
そして数日後【人工知能】が無理でも【脳が処理する方法を真似出来ないか？】と気が付きこの日からデータベースで使用する静的テーブル構造の研究・開発が始まった。
###
今までのデータベース「テーブル構造」
---
Excelシートでは上から下に向けて個人の氏名があり各氏名の真右に向かい関連データが繋がっていくのは一覧表の基本だがこの方法だと新しい「列」を追加したり削除したりする度に管理権限者に依頼しなければならないし操作対象テーブル内の全データをロックしないといけないかもしれない。
■　一般的なデータ構造
![00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/8ae26ac0-e2dd-2fdc-4908-939b73876efe.jpeg)

###
それでは「ニューロ型データベースモデリング」の「テーブル構造」をご紹介する
---

◆◆説明の便宜上使用テーブルは**１個バージョン**でおこないます◆◆

■　まず最初に作成する　テーブルの「種類」を【識別名】　「人」　として登録
![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/d85d9ad9-4981-4dcb-fe03-bd09bb9d28fc.jpeg)

■　【入力項】と【入力データ】を　**縦長に下方向へ繋いでいく**
![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/6f0868dc-1592-e228-f1f1-9b8d10390e7d.jpeg)


■　【ソート】を追加　この列でデータの**表示順を自由に変更**できる
![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/2671435f-da0e-86c0-cd2e-f589d106e037.jpeg)


■　【ユニット】を追加　この列で**「入力項目」**の**グループ化**を実現

　　**「氏」「氏ヨミ」**を**同じ【１】**にすることによりどちらかのデータ修正時に
　　　**同じ「ユニット番号」**も**修正対象**にする
　　過去データを【コンボボックス】として抽出する時も便利
![04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/bfb61266-702c-41b9-8f05-235ac9325a70.jpeg)

■　縦長データを**ユニークな１個の番号**で**【グループ化】**（最初の主キーを使用）

　　縦長に繋がったデータを**１種類の動的テーブル**として**処理**
![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/b4cce35d-c849-a763-f48e-4e4f01964b4a.jpeg)

■　「現在」「過去」「未来」を管理する「T_ID」列を追加
![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/b4aab192-7ff2-894c-616d-4e6862d93fb3.jpeg)

■　データ修正時（青色枠）旧データ（赤色枠）の【履歴化】を実装

　「T_ID」を「 3（過去）」に変更し過去データの検索対象とする
![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/b569bb29-d9a2-cc79-b74d-402433e4220b.jpeg)

　「 1（未来）」として予約登録を実装する（例：取得予定E-mailアドレス）
![08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/690ea226-c72d-e760-3cbb-12c0ec42c266.jpeg)

■　【グループIDリンク先】列を追加

![09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/a3760dc3-5bf3-5698-dea5-02eca0ab157b.jpeg)

　　１．「グループID」を【12】として　**【識別名】　住所**　を新規作成　を
　　２．【グループIDリンク先】列に【12】を登録する

　　【 動的テーブル 】間の**【 リレーション 】**を**【番号】だけで実現**
![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/1930ddcc-8b85-e9a4-21ad-6c687e580e99.jpeg)

■　既存「自宅」【識別名】住所　を　複製後　「実家」として登録する

　　既存【識別名】住所　を継承（複製）し　同じ「項目名」を持つテーブルだが
　　【入力データ】で「自宅」「実家」など複数の【属性】を実現している

![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/e258fa99-62b3-9da7-a426-79713416fd09.jpeg)

■　【識別名】住所　の基本【入力項目（共通雛形）】以外の「入力項目」を

　　「ソート」と「ユニット」の数値が【10000】以上なら　
　　　◆管理外◆の「入力項目」として処理する　

　　　例：「入力項目」の「E-mail」を「メールアドレス」と変更する時は全データ対象
　　　　　「入力項目」の「引継ぎメモ」が他のデータにあっても他データは変更しない

![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/458bb5e3-776d-a5d4-faa6-94017e9f4c81.jpeg)

■　個人情報保護用に　「アクセス権」列　を追加する

　データ１個（１行）毎にアクセス権が設定可能で

　例：skojima@kuhen.org , 総務 

　　という権限者を列記してもよい

【方法１】　
　　１．各【識別名】レコードの右端に【ALL】を入力
　　２．全員（ALL）がこのテーブルを検索対象とする
　　３．ただし「skojima@kuhen.org」がある行（データ）は検索対象外とする
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/77a31022-e4d4-aa71-9f69-2051c3a74e00.jpeg)

【方法２】　
　　１．【識別名】レコードの右端に【ALL】または「skojima@kuhen.org」を入力
　　２．「skojima@kuhen.org」のテーブルは全テーブルデータは最初から検索対象外
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/3d066a46-2d11-aab2-9711-8a1ae97e257f.jpeg)

■　【応用】　分散していた情報を１つの【グループ】にまとてみる

　今までの【アクセス権】は　【読取り権】と【書込み権】に分けた
![15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567414/0dcbdca8-9723-94bf-6fb2-7cb6908d8b19.jpeg)


以上が「ニューロ型データベースモデリング Ver.1」の構造（特徴）です。

【主キー】と【グループID】はINTにしてそれ以外は**全部文字列**をおすすめします。

１個（１種類）の「テーブル」だけを使うのでシンプル構造になり「入力項目」を簡単に「追加」「変更」「削除（履歴化）」したり「テーブル」同士での「項目」移動、「テーブル」同士の「結合」や「分離」が簡単。
検索プログラムも１回作ってしまえば基本「メンテナンスフリー」になります。

###
最後に
---
２０年かけてこの「ニューロ型データベースモデリング」の研究と開発をしてきました。
この「シンプルな構造」に特化した「日本発祥のデータベース」を開発・提供するのが最終目標ですがもう５６歳になり一人では限界を感じています。
非公開のVer.2を手弁当（ボランティア）でAPIや検索プログラムのストアドなど（SQL用には既に２個作成済）ご協力してくれる方がおられましたら【 skojima@kuhen.org 】へご連絡ください。
kuhen.orgの有料GitHubは契約しましたが使い方が良くわかりません。

関連投稿記事
---
次回　[第02回　独自開発した「ニューロ型データベースモデリング Ver.1」　【学習】方法を考える](https://qiita.com/kuhen-org/items/c66dcd6c116aac88a38b)