1. ホーム
  2. sql

[解決済み] データベーステーブルのIDカラムの命名

2022-10-01 05:50:10

質問

データベース・テーブルの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 を使用すると、このようなうっかりミスはずっと少なくなり、見つけるのもずっと簡単になります。