◆データベースの非機能要件項目どこに置く問題
DB設計で、よくある問題
非機能要件の項目はどこに置くのかという問題(問題なのかな?)
◆非機能要件の項目とは?
名前とか誕生日とかアプリケーションに必要な項目を機能要件の項目といい、
アプリケーションに必要ない項目を非機能要件の項目といいます。
具体的には、レコードの作成時間や作成者IDや作成者IPアドレスなど実際には必要ない項目を
持たせることがあります。(主に、障害時に調査等に使う目的でつけていることが多いです)
◆どこに置いてもよいのでは?
よくあるのは最後尾につけます。
※ 型は適当です。
・ユーザテーブル
Filed | 名前 | 型 |
---|---|---|
id | ID | number |
name | 名前 | text |
create | 作成日時 | timestamp |
create_id | 作成者 | text |
create_ip | 作成IPアドレス | text |
update | 最終更新日時 | timestamp |
update_id | 最終更新者 | text |
update_ip | 最終更新IPアドレス | text |
こんな感じになります。
まぁ、何も問題ないですよね。
ユーザテーブルに誕生日を追加してみましょう
・追加後のユーザテーブル
Filed | 名前 | 型 |
---|---|---|
id | ID | number |
name | 名前 | text |
create | 作成日時 | timestamp |
create_id | 作成者 | text |
create_ip | 作成IPアドレス | text |
update | 最終更新日時 | timestamp |
update_id | 最終更新者 | text |
update_ip | 最終更新IPアドレス | text |
birthday | 誕生日 | timestamp |
なんか非機能要件項目を挟んで機能要件項目があると見にくくない?
◆最後尾はやめて先頭においてみる
・ユーザテーブル
Filed | 名前 | 型 |
---|---|---|
create | 作成日時 | timestamp |
create_id | 作成者 | text |
create_ip | 作成IPアドレス | text |
update | 最終更新日時 | timestamp |
update_id | 最終更新者 | text |
update_ip | 最終更新IPアドレス | text |
id | ID | number |
name | 名前 | text |
こんな感じになります。
では、同じようにユーザテーブルに誕生日を追加してみましょう
・追加後のユーザテーブル
Filed | 名前 | 型 |
---|---|---|
create | 作成日時 | timestamp |
create_id | 作成者 | text |
create_ip | 作成IPアドレス | text |
update | 最終更新日時 | timestamp |
update_id | 最終更新者 | text |
update_ip | 最終更新IPアドレス | text |
id | ID | number |
name | 名前 | text |
birthday | 誕生日 | timestamp |
慣れないと違和感ありますが、まぁ慣れれば運用しながら項目追加しても
機能要件項目が離れないので、良いかなと思います。