Categories: DB概論

【テーブル設計】 実務で役立つ設計方法

この記事ではテーブルの設計でよくあるパターンを解説します。
正規化を崩した方が使いやすかったりする事があります。
アンチパターンは経験によるところが多いです。この記事を読めば理由がわかるようにしましたので、実践できっと役に立ちます。

意識の高いKatahira

筆者はOracle ERPのテーブルに精通しています。ERPは会社の業務システムのほとんどのフローが入っているシステムです。設計上のパターンの多くを知っているのでそれを解説するよ。

詳細説明

データの削除はしない

データの削除は基本はしません。
削除したい場合は、
・削除フラグの項目を追加する
・有効日と失効日の項目を用意する
のどちらかか両方をして、項目のデータで削除状態を区別します。

有効日と失効日はこのようなテーブルです。
今日は2020-06-01だった場合、田中さんは有効データで、中村さんは削除扱いのデータとなります。

例外で削除するケース

確定前のトランザクションデータは削除を許可していることが多いです。
注文データでしたら、注文データが社内で承認される前。
受注データでしたら、受注確定の処理がされる前までの状態のデータです。

ERPでは特にそうですが、一度データが確定するといろいろな業務システムにデータを送信します。どのシステムにもデータを送信していない状態というのが、削除の絶対条件です。

繰り返し項目の持ち方はケースバイケース

上が電話番号の項目を横にした持ち方。
下は柔軟性を持たせた持ち方です。

中小規模のシステム
項目を横にした持ち方の方が多いです。
・処理を作るうえでシンプル
・必要な電話番号のパターンがある程度絞り込める
という理由です。

大規模システム
電話番号テーブルを分けるケースが多いです。理由は電話のカテゴリを柔軟に増やせるからです。

作成日と更新日の項目は必ず追加する

テーブルを作った時は、何も考えずにこの4つの項目は追加してください。
・作成日
・作成者
・更新日
・更新者

データの問題やシステム上の問題でトラブルがあった時に、調査でよく使います。

「作成日」、「更新日」についてはTriggerで自動保存する仕組みを検討した方がいいです。他システムにデータ連携する時「更新日」をよく使います。

プログラム上で更新日を変更する設計にすると、漏れが出てくることがあります。

意識の高いKatahira

データ連携に関しては、稼働当初は全データを連携をすることが多いです。5年とか10年たちデータ量が多くなるとパフォーマンスの問題が発生して、更新したデータだけに切り替えていくのがよくあるパターンです。

更新日がたまに変更されていなくて、行き詰る事があります。

パラメータは共通のテーブルを用意する

社員情報テーブルを考えてみます。
この情報だけ見ても、2つのパラメータファイルが必要となります。
このようにパラメータテーブルを作っていくと何百ともテーブルが必要になります

そのような場合は共通のパラメータテーブルを用意します。
「社員タイプテーブル」と「勤務地テーブル」の内容を共有して、「パラメータテーブル」を持ちます。2つの内容はパラメータ区分の項目で区別します。

意識の高いKatahira

パラメータテーブルの共有はおすすめです。
・パラメータテーブルを作る手間が省ける
・パラメータテーブルの名前を覚える手間が省ける
・メンテ画面を共有できる

主キーは連番を使いわかりやすい名前をつける

注文情報の例でみてみます。

主キーは連番を使う
「注文書ヘッダ」テーブルの注文番号はキーですが、別に数値型の主キー項目「PO_ID」を追加します。

理由は3つあります
・数値型の1項目の方がテーブルの結合が早く、パフォーマンスがいい。
・主キーが、主キーではなかった時に大きなプログラム修正が必要となる。
・テーブルを結合する時に理解しやすい。注文書ヘッダの項目を見て、どれが主キーだったかなと考える必要がない

初見ですと意味のない連番より「注文番号」などの意味ある項目を使った方がわかりやすく見えます。ですが、意味ありの項目を使うと主キーの思い違いなどでトラブルの危険性が高くなります。

主キーにはわかりやすい名前を使う
たまにあるのは、テーブルの主キーの名前をIDで固定しているケースです。これはテーブルを結合するときに、わかりにくくバグの確率があがるので、きちんと意味がわかる名前にしましょう。

まとめ

今回は5つ、テーブル設計時に注意すべき点をあげました。
テーブル設計一つで、開発効率をよくしたり、バグの発生頻度を少なくできます。

今まで多くのシステムのテーブル設計を見て、その知見を元にあげましたので、参考にしてください。

・データの削除はしない
・繰り返し項目の持ち方はケースバイケース
・作成日と更新日の項目は必ず追加する
・パラメータは共通のテーブルを用意する
・主キーは連番を使いわかりやすい名前をつける

Katahira

Recent Posts

トランザクションテーブルの特徴を知ろう

この記事で解決できる疑問 トラ…

2年 ago

マスタテーブルの設計で注意すべき3点を紹介

この記事で解決できる疑問 マス…

2年 ago

Power BI道場 コンテンツ紹介

ここでは筆者が提供しているPo…

2年 ago

Power BI道場 ヒストグラムの作成。知っていれば簡単!!

この記事で解決できる疑問 ヒス…

2年 ago
Close Bitnami banner
Bitnami