-
Notifications
You must be signed in to change notification settings - Fork 12
SQLスタイルガイド
本スタイルガイドはSQL開発者向けのスタイルガイドです。
・名前には英字、数字、アンダースコアのみを使用する。
理由:SQL標準に準拠。
・名前は半角英字で始めなければならない。数字で始めてはいけない。
理由:SQL標準に準拠。
・名前はアンダースコアでは終わらない。
理由:見づらいため。
例:COLUMN1_ ←←←アンダースコア付けています。
・複数の連続したアンダースコアの使用を避ける。
理由:読取るのが難しくなるため。
例:COLUMN__01 ←←←アンダースコア2つ付けています。
・名前にスペースを含めるのが自然な場合は、アンダースコアを使用する。(スネークケースとも呼ばれます)
例:first nameはfirst_name
・テーブルはテーブル種類+連番_名称
例:M001_HINMOKU
テーブル種類:M(マスタ)、T(トランザクション)、W(ワーク)、S(システム)、V(ビュー)
・インデックスはidx_テーブル名_連番
例:idx_TABLE01_01
:ux_TABLE01_01 ・・・ ユニークインデックス
・タブを使わず、スペースを使う。
・インデントは2スペース(4スペースでも良い)
・予約語も含めて原則小文字で書く。
理由:大文字か小文字かで迷ったりレビューで指摘するのがムダに思えるためです。
・項目名を並べるときは、カンマを先頭にする。
理由:カンマを項目の後にすると、仮に項目を1行追加するとき、1行変更して1行追加となってしまうため。
・文末のセミコロンは改行して書く。
理由:カンマと同じ理由。
・コメントは--(ハイフンハイフン)で書く。/* (スラッシュアスタリスク)は使わない。
理由:grep検索したときにコメント行かどうかがすぐわかるため。
・フラグ項目はflgをつけて、boolean型とし、"False","True"のみとする。
例:有効フラグ(enabled_flg)
"False" ・・・ 有効でない
"True" ・・・ 有効
・区分項目は複数の意味を持たせるときに使う。固定長文字列のみ
例:品目区分="01(製品)","02(部品)","03(材料)"
・演算子にはカッコ( )をつける。
理由:演算順序の勘違いを防ぐため。
X:A OR B AND C
〇:A OR ( B AND C )
・SELECTは全体がごく短い場合は1行で書いても良い。
例:select A from B where A='1'
・全列ワイルドカード * (アスタリスク)の使用はせず、カラム名を明記する。
・別名を定義するときはASをつける。
例:COLUMN1 AS 列名
・FROMには複数のテーブル名を並べない。JOINを使う。
悪い例:from TABLE01,TABLE02
良い例:from TABLE01
inner join TABLE02
・INNER JOINを先に記述し、その後にLEFT JOINを記述する。RIGHT JOINは使わない。
理由:機能的な意味は無く、制限が強いものから順番に書いた方がわかり易いと思うため。
・EXISTS句は1を使う。
例:exists (select 1 from TABLE04 ・・・
・ORDER BY句、GROUP BY句は数字ではなくカラム名を使う
悪い例:order by 1 , 2
良い例:order by COLUMN1,COLUMN2
【サンプル】
select
COLUMN1
,COLUMN2
,COLUMN3
,sum(COLUMN4) as SUM_D
from
TABLE01 as TB1
inner join TABLE02 as TB2
on TB1.COLUMN1 = TB2.COLUMN1
and TB1.COLUMN2 = TB2.COLUMN2
and '1' = TB2.COLUMN3
left join TABLE03 as TB3
on TB1.COLUMN1 = TB3.COLUMN1
and TB1.COLUMN2 = TB3.COLUMN2
where
TB1.COLUMN4 = 'A'
and TB1.COLUMN5 = 'B'
and exists (select 1
from
TABLE04 as TB4
where
TB1.COLUMN1 = TB4.COLUMN1
and '1' = TB4.COLUMN2
)
group by
COLUMN1
,COLUMN2
,COLUMN3
order by
COLUMN1
,COLUMN2
,COLUMN3
;
【サンプル】
insert into
TABLE01 (
COLUMN1
,COLUMN2
,COLUMN3
)
values (
VALUE1
,VALUE2
,VALUE3
)
;
【サンプル】
update
TABLE01 AS TB1
set
TB1.COLUMN3 = 100
,TB1.COLUMN4 = 100
where
TB1.COLUMN1 = 10
and TB1.COLUMN2 = 20
;
【サンプル】
delete
from
TABLE01 AS TB1
where
TB1.COLUMN1 = 1
and TB1.COLUMN2 = 2
;
・できるだけベンダー固有のデータ型は使用しないようにする。
理由:これからシステムの保守をする人が、必ずしもそのDBに詳しいとは限らないため。
・数値型はNUMERICとDECIMAL型が望ましい。
理由:浮動小数点は誤差に気をつける必要があるため。