[解決済み] データベーステーブルのIDカラムの命名
質問
データベース・テーブルのIDカラムの命名に関する人々の意見を知りたかったのです。
もし、Invoices というテーブルがあり、主キーが ID 列であった場合、その列を InvoiceID と呼んで、他のテーブルと競合しないようにし、それが何であるかを明白にします。
私が現在働いているところでは、すべての ID カラムを ID と呼んでいます。
そこで、彼らは次のようにします。
Select
i.ID
, il.ID
From
Invoices i
Left Join InvoiceLines il
on i.ID = il.InvoiceID
さて、ここでいくつか問題があるようです。
1. セレクトのカラムにエイリアスを設定する必要があります。
2. ID=InvoiceIDは私の脳内ではしっくりきません
3. テーブルの別名を付けず、InvoiceIDを参照した場合、どのテーブルのものかは明らかでしょうか?
このトピックについて他の人の考えはどうでしょうか?
どのように解決するのですか?
ID は SQL Antipattern です。 参照 http://www.amazon.com/s/ref=nb_sb_ss_i_1_5?url=search-alias%3Dstripbooks&field-keywords=sql+antipatterns&sprefix=sql+a
ID を ID とする多くのテーブルがある場合、レポート作成をより困難にしています。意味が不明瞭になり、複雑なクエリを読みにくくするだけでなく、レポート自体で区別するためにエイリアスを使用する必要があります。
さらに、自然結合が利用可能なデータベースで自然結合を使用するほど愚かな人がいる場合、間違ったレコードに結合することになります。
いくつかのデータベースで認められているUSING構文を使用したい場合、IDを使用すると使用できません。
IDを使用する場合、結合構文をたまたまコピーしてしまい(誰もこんなことしないとは言わせない!)、結合条件のエイリアスを変更するのを忘れると、簡単に間違った結合をしてしまうことがあります。
これで
select t1.field1, t2.field2, t3.field3
from table1 t1
join table2 t2 on t1.id = t2.table1id
join table3 t3 on t1.id = t3.table2id
という意味なのに
select t1.field1, t2.field2, t3.field3
from table1 t1
join table2 t2 on t1.id = t2.table1id
join table3 t3 on t2.id = t3.table2id
id フィールドとして tablenameID を使用すると、このようなうっかりミスはずっと少なくなり、見つけるのもずっと簡単になります。
関連
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] カラム名の変更 SQL Server 2008
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] ストアドプロシージャ 'dbo.aspnet_CheckSchemaVersion' が見つかりませんでした。
-
[解決済み] MySQLの「スキーマの作成」と「データベースの作成」 - 違いはあるのか?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQLの複数列の順序付け
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み] 外部キーの命名規則