【DB】命名ルールで「日本語」を使わない理由【考え方】

データベースもプログラムも最近は日本語で変数名やカラム名などを定義できます。それでもアルファベットで定義することを行う個人的な理由を記載します。

※あくまで個人的な考え方です。一般的な考え方に合わせているのではないでご了承ください。

なんで日本語を使えるのに使わないのか

読みづらくなるから

プログラムコードに日本語が含まれると「コメント」なのか「プログラムコード」なのかわかりづらくなります。

全角スペースが紛れてシンタックスエラーになるから

全角入力を行っているとスペース入力時に全角スペースを誤って入力することがあります。半角スペースはプログラム命令の区切りとしてとらえられますが全角スペースは文字として扱われます。エディタの設定でスペースを表示していないと判別が難しくなります。

入力モードを切り替えるのが煩わしい

インターネットでサンプルコードを検索して、参考にしながら自分のコードに入力する場合に他の画面を見ながら入力を行うことがあります。画面を見ないで日本語を入力することは変換ミスなどがあるため非常に難しいというか無理なためです。

コーディングルールで日本語禁止になっているから

仕事で業務プログラムを書くことが多いためコーディングルールに合わせることが基準となってしまう癖がついてしまっているからです。

※開発プロジェクトによるため、一概には言えません。

まとめ

以上のような理由でアルファベット推奨する考え方になっております。実際には今の環境になれてしまっていて日本語でコーディングしてみようと考えることがないのが原因でしょうか。

本来、メリット・デメリットを比較してどちらが良いかというようなことを記載するのが正しいのでしょうが「にわか」で試してみてもよい部分を見つけることができませんでした。

【DB】データ型についての簡単な理解

DBで定義するデータ型について簡単な説明をします。

データ型の種類

一般的に扱われるデータ型は以下のような分類に分かれます。

※データ型の説明に記載する型指定子は、僕自身が最低限だと考えているもののみ記載しております。記載以外の型指定子も存在しますがDBの仕様などいろいろ一概に言えないものもありますのでご了承ください。

数値を扱うデータ型

  • NUMERIC:データサイズを指定するデータ型
  • INT:データサイズが決まっている数値型

ログイン回数、金額など計算を伴う数値を扱う場合に定義します。

文字、文字列を扱うデータ型

  • VARCHAR:最大サイズを指定する文字列型(可変長)
  • CHAR:固定サイズを指定する文字列型(固定長)

名前、住所、メールアドレス、プロフィールなど文字で表現する情報を登録する場合に定義します。また、電話番号など数字だけど計算を行わないような場合も文字列として扱うことがあります。

文字列の固定長、可変長について

日付、時刻を扱うデータ型

  • DATE:主に日付を扱うデータ型
  • DATETIME:主に日付と時刻を扱うデータ型

データを作成した日時や誕生日など日付、時刻で扱いたい情報を登録する場合に定義します。

論理値を扱うデータ型

  • BOOLEAN:「TRUE」、「FALSE」のみを扱うデータ型
  • BIT:「0」、「1」のみを扱うデータ型

情報の中で有効・無効などの論理値で表現できる情報を登録する場合に定義します。

バイナリデータを扱うデータ型

  • BLOB:バイナリデータを格納できるデータ型

画像ファイル、PDFファイルをデータベースに登録する場合に定義します。

【全般】文字列の固定長、可変長について

プログラムで文字列を表現する中で「固定長」、「可変長」と区別して考えることがあります。

固定長とは

固定長は文字数が明示的に定義されている場合を意味します。

例えば文字数が「固定長で10文字」と定義されていている場合は必ず10文字である必要があります。

No. 文字列 固定長で表現した場合
1 1 「1         」
2 1234567890 「1234567890」
3 123 「123       」
4 123456 「123456    」

このように何らかの形で文字数を揃える場合を「固定長」といいます。

上表の例では「後方スペースパディング」で表現した場合になります。

パディングの考え方

可変長とは

可変長とは文字数の上限を明示的に定義した文字列になります。

例えば文字数が「可変長で10文字」と定義されている場合は10文字以内であればよいということになります。

No. 文字列 可変長で表現した場合
1 1 「1」
2 1234567890 「1234567890」
3 123 「123」
4 123456 「123456」

このように文字列をそのまま扱う形になります。

【DB】物理削除と論理削除【考え方】

データベースのデータ削除には物理削除と論理削除という考え方があります。

今回の説明に利用するテーブル構造は以下の通りです。

テーブル名:USER

No. カラム名 データ型 主キー
1 ID NUMERIC
2 NAME VARCHAR
3 TEAM VARCHAR
4 ENABLED BOOLEAN

登録されているデータは以下の通りです。

※データについては、趣味全開です。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
2 西住みほ あんこう TRUE
3 武部沙織 あんこう TRUE

物理削除とは

以下のようにSQL文の「DELETE」構文を実行することを意味します。テーブルから物理的にデータが削除されます。

DELETE FROM USER
WHERE ID = 1

上記SQL文を発行した場合、以下のようになります。

ID NAME TEAM ENABLED
2 西住みほ あんこう TRUE
3 武部沙織 あんこう TRUE

このようにテーブルからデータが消えてしまう状態を「物理削除」と言っております。

論理削除とは

物理削除とは違い、主に以下のようなSQL文の「UPDATE」構文を実行して論理削除の状態を実現します。

UPDATE USER
SET ENABLED = FALSE
WHERE ID = 1

上記SQL文を発行した場合、以下のようになります。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
2 西住みほ あんこう FALSE
3 武部沙織 あんこう TRUE

このようにデータは実際には削除されずに残っている状態になります。この状態では削除されているとは言えません。

論理削除には、「削除」という状態の考え方が少し違います。データを削除するのではなくデータベースを利用しているプログラムから見て対象外とする意味があります。

論理削除という状態を実現するためには、プログラムからデータ取得する条件に必ず「ENABLED」が「TRUE」であるルールが必要になります。これはシステム全体で決められたルールとして定義されていることにより実現できると言えます。

削除されていないデータをすべて参照する場合のSQL文は以下の通りとなります。

SELECT
  ID,
  NAME,
  TEAM,
  ENABLED
FROM
  USER
WHERE ENABLED = TRUE

上記SQLを実行すると以下のデータが取得できます。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
3 武部沙織 あんこう TRUE

このように、データ取得SQL文に条件を付けるということで削除という状態を表現します。

まとめ

物理削除とは、データベースからデータ自体を削除してしまうことをいいます。

論理削除とは、データベースからデータ削除自体は行わず、データベースを扱うシステムのルールにより削除されていないと判断されるデータのみ対象とすることで削除を実現する考え方です。こういうのをシステム開発の現場では方式などと言います。

【用語】ゼロパディング、ゼロサプレスとは【考え方】

業務プログラムを開発していると「ゼロパディング」「ゼロサプレス」なんて言葉をたまに使います。

ゼロパディングとは

ゼロパディングの「パディング」とは、文字数調整になります。

例えば、7桁の前方ゼロパディングといった場合「150」を表現すると「0000150」の文字列となります。

桁そろえの意味は「パディング」という言葉で表現され、「ゼロ」は桁を揃える文字に該当します。

ゼロパディングといった場合「ゼロ(数字の0)」で文字数を揃えると言うことになります。亜種としては空白パディングなどもあります。これは「空白」で文字数を揃えると言うことになります。

パディングの必要性は過去のシステム構成から来ていると個人的に思います。過去のシステムではデータを固定長で扱うことがあったため各データの文字数を設計により定義して、情報としては各データを連続した塊として表現していたからだと思いいます。

ゼロサプレスとは

ゼロサプレスの「サプレス」は切り詰めに該当すると思います。上記ゼロパディングした「0000150」をゼロサプレスするという場合「150」になります。

データ管理上は固定長で扱うが、システムを扱うユーザーにはわかりやすい数値で見せたいと思う場合に利用します。

サプレスにも「ゼロ」だけではなく空白サプレスをする場合もあります。この場合は今のプログラミング言語(C#やJavaやPHPなど)では「trim」で実現できるかと思います。