オブジェクトの命名について
(1)マルチバイトの使用は禁止。
※理由はググッてください。
(2)開発前に命名基準書を作成する。
(3)全て英語またはローマ字で表記する。
※できる限り英語。
(4)ローマ字で表記する場合、ヘボン式で表記する。
ブログ「sanryuブログ」のカテゴリ「データベースの設計について(私見)」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。
前のカテゴリはVB.NETです。
次のカテゴリは東北地方太平洋沖地震です。
(1)マルチバイトの使用は禁止。
※理由はググッてください。
(2)開発前に命名基準書を作成する。
(3)全て英語またはローマ字で表記する。
※できる限り英語。
(4)ローマ字で表記する場合、ヘボン式で表記する。
(1)同一の内容を示すカラム名は同一とする。
・当たり前と思うかもしれませんが、規模が大きいシステムだと複数人でテーブル設計をしていると、同じ物を指しているのに、違うカラム名だったりします。はっきり言って頭痛いです。
これを回避するには、システム開発用の辞書を作ったり、データベースモデリングツールを使ったりして対応します。
(2)○○フラグというカラム名の値は、0(false)または1(true)とする。NULLもNG。
・フラグと名前でいろんな値が入っていると訳が分からない。
(3)上記とかぶるが、○○フラグ、○○区分、○○分類、○○状態などのカラム名をよく見るが、適切な名前をつけること。
(1)サロゲートキーの使用。
・自然キーには、ユニーク制約をつける。
(2)正規化くずし。
(3)トランザクションへの値の埋め込み。
・マスタデータが変更される場合、計算結果を格納する場合など考慮。
(4)削除の方針。
・論理削除か物理削除するか。
(5)マテリアライズドビュー(Oracle)の使用。
(6)固有の値の作成にシーケンスの使用。
(1)どのテーブルにも必要なカラム
「作成日」、「作成者」、「更新日」、「更新者」
(2)論理削除の場合に必要なカラム
「削除フラグ」、「削除日」、「削除者」
(3)世代(履歴)管理に必要なカラム
「使用(有効)開始日」「使用(有効)終了日」
トリガは使いたいが、こんな事があった。
・仕様変更をしたとき、トリガだけ修正漏れ。
(仕様書のどこにもトリガを使用していること書いてない。)
・トリガに限って仕様書ない。
(別にトリガの問題ではない。)
・運用を実施する人がトリガを知らない。
・当該テーブルのデータをメンテナンスする時に、トリガが動くのを忘れてしまう。
なので、下記程度にとどめたい。
・監査ログや、テーブルの履歴の作成みたいなの。
結論は、システム開発から運用まで考えて、
保守できる程度に使用すればいいかと思う。
自分の周りの話です。世間ではどうなのでしょうか?
データ件数を考慮していないで設計・開発する為、
まともに動かないものが多いです。
(1)実行計画を取得しない。
SQLが自分の思ったとおりに実行されているか確認しない。
(2)実際のデータ件数を想定しない。
データ件数を考慮しない、データ件数がどのくらいか知らないでSQLを作る。
※SEがテーブル設計時にデータ件数を考慮しない。
(3)セオリー(チューニング含む)をやらない。
WEBでも、書籍でも、雑誌でもやらないでねと書いてあることを平気でやる。
かつ、やろうねと書いてあることをしない。
(4)システム標準ルールを無視する。
・・・・。
(5)実行時間の計測をしない。
・・・・。当然性能要件を守れない。
テーブルに制約を指定していない為に、想定(意図)していない値が設定されて、
アプリケーションが正しく動作しないことがあります。
個人的には、(1)~(3)は、必ず指定して欲しいです。
(4)(5)は、設計はして欲しい。
(1)主キー制約(PRIMARY KEY制約)
主キーのないテーブルは、原則だめ。※一時テーブルのみ可。
(2)一意キー制約(UNIQUE制約)
代替キーを使用し、かつ、一意となる自然キーがある場合は指定する。
(3)NOT NULL制約
NULLがだめな項目には必ず指定すること。
(4)CHECK制約
意図している値があるなら指定すること。個人的にはあまり使用しない。
アプリケーション側でチェックしている。
(5)参照整合性制約(REFERENCES制約)
いろいろご意見あると思いますが、個人的には、設計時(ER図など)には指定しているが、
実際のテーブル(物理構造)には適用していない。
※レスポンス、メンテナンス、仕様変更などを考えると・・・・。