SQLの標準規格は、ANSI(米国規格協会)やISO(国際標準化機構)といった標準化団体により、数年に一度改訂されます。
改訂ごとに決められた規格は、制定された年ごとに「SQL:1999」「SQL:2003:「SQL:2003」「SQL:2008」「SQL:2011」「SQL:2016」などと呼ばれます。こうした標準規格に準拠したSQLが標準SQLです。
ただし、SQLの標準規格に「すべてのRDBMSは標準SQLを使わなければならない」という強制力はありません。標準SQLをサポートしたRDBMSは増えましたが、それでも標準SQLで書いたSQL文を実行できないことがあります。
標準SQLと独自拡張のSQL
データを検索するSELECT文やテーブルを作成するCREATE TABLE文など、多くのSQL文は標準SQLの中で定義されています。しかし、各RDBMSによる標準SQLの対応の程度は、各ベンダーや開発コミュニティによって差があります。その背景には、技術標準の策定に時間がかかり、市場のニーズに追随できないため、各ベンダーは、ビジネス状況やユーザーの要望によって機能拡張してきたことや、独自のSQL構文の互換性を維持するためにであったりします。そのため、マイクロソフトのSQL ServerにはSQL Server独自の拡張が、オープン系のPostgreSQLにはPostgreSQL独自の拡張があります。最もシェアの高いOracleDBであっても、Oracle独自のSQL拡張が数多くあります。
標準SQLに準拠を行いつつも、速度や信頼性を犠牲にすることなく、ユーザーにとって、大幅に使いやすくなるのであれば、独自のSQLに対する拡張機能やSQL以外の機能サポートを積極的に追加しているということです。
命名ルール
データベースやテーブル、列といった名前に使える文字は、以下に限られます。
- 半角のアルファベット
- 半角の数字
- アンダーバー(_)
例えば、staff_idをstaff-idと書いてはいけません。標準SQLにおいて、ハイフンを列名などに使うことは、認められていないからです。$、#、?のような記号も名前に使ってはいけません。
また、名前の最初には必ず半角のアルファベットを使わなければなりません。例えば、2019_salaryのように、数字ではじまる列名としてはいけません。
このように、標準SQLの命名ルールはかなり厳しいといえます。
ただ、日本語を使えた方が直感的でわかりやすいデータベースにすることができるでしょう。RDBMSの中には、日本語(全角文字)や記号を列の名前などに使うことのできるものもあります。
上記命名ルールはあくまで標準SQLにおけるルールであり、RDBMSがその全てのルールに従わないといけないというわけではないためです。
しかし、それはあくまでそのRDBMSが独自に認めているルールであり、同じデータベースが他のRDBMSでも同様に使えるという保証がなくなります。
実際の開発現場では、以下例のように日本語をそのままローマ字表記した名前とすることが多いです。
日本語名 | DB上で定義する列名(例) |
---|---|
社員ID | shain_id |
社員名 | shain_name |
入社日 | nyusya_date |
職種ID | syokusyu_id |
部門ID | bumon_id |
その一方、最近では、日本での外国人労働者の増加やオフショア開発(ソフトウェア開発などを海外の会社にアウトソースすることで、開発コストを削減する手法)が進む流れもあってか、以下のように英単語を使用するケースも多いです。
日本語名 | DB上で定義する列名(例) |
---|---|
社員ID | employee_id |
社員名 | employee_name |
入社日 | hire_date |
職種ID | job_id |
部門ID | department_id |