数学的な観点から、テーブルには多くても1つの主キーがあると認められるため、単純なテーブルプロパティではなく、任意の名前で主キーを参照するという近視眼的な設計決定のようです。
主キーを非クラスター化からクラスター化、またはその逆に変更する結果として、まずその名前を検索し、削除してから最後に読み取ります。
表示されない任意の名前を使用することには利点がありますか、またはプライマリキーに任意の名前を使用しないDBMSがありますか?
2011年 2月22 日の編集(2011年 2月22日、日付を並べ替えたくない人向け):
テーブル名から主キーの名前を導出できる関数を示しましょう(初期のsql-sever別名sybaseシステムテーブルを使用):
create function dbo.get_pk (@tablename sysname)
returns sysname
as
begin
return (select k.name
from sysobjects o
join sysobjects k on k.parent_obj = o.id
where o.name = @tablename
and o.type = 'U'
and k.type = 'k')
end
go
gbnは、明示的な名前を指定しない場合、生成された名前を本当に好きな人はいないと述べています。
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
ちょうど得た
PK__example___3213E83F527E2E1D
しかし、なぜsysobjectsの名前は一意でなければなりません。テーブルとその主キーにまったく同じ名前を使用してもまったく問題ありません。
そのようにすることで、命名規則を設定する必要がなくなりました。これは誤って違反される可能性があります。
今マリアンに答えます:
- pkをドロップできるようにするために、pkの実際の名前を知る必要がある例として、クラスター化された主キーをクラスター化されていない主キーに変更するタスクのみを使用しました。
- 物には固有の名前を付ける必要はありません。簡単に一意に指定できれば十分です。それが抽象化の基礎です。オブジェクト指向プログラミングはこのようになります。異なるクラスの同様のプロパティに異なる名前を使用する必要はありません。
- テーブルのプロパティであるため、任意です。テーブルの名前は、それを使用するかどうかを知る必要があるすべてです。