1

私は にあまり詳しくありSQLません。次の 2 つの違いと、最適な使用方法を教えてください。あるものを別のものよりも使用する利点はありますか。

CREATE TABLE Employee
(
    Emp_Id int NOT NULL,
    Dep_Id int NOT NULL,
    ...
    FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)
);

CREATE TABLE Employee
(
    Emp_Id int NOT NULL,
    Dep_Id int NOT NULL,
    ...

    CONSTRAINT fk_EmpDept FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)
);
4

4 に答える 4

1

私は常にキーと制約に名前を付けます。一般に、キー名を見れば誰でもキーの機能を理解できる十分な情報が含まれてます。

  • 私が名前を付ける外部キーFK_FieldName@TableName
  • 主キーにPKC_TableNameor PKN_TableName("c" は "クラスター化" を表し、"n" は "非クラスター化" を表しますが、これは重要ではありません) と名付けました。
  • インデックスについては、一意性、クラスター化、およびインデックスの「I」に基づいて名前を付けますUNI_FieldName@TableName

命名の理由は、オブジェクトをドロップする必要がある場合と、さらに重要なことに、コード内の何かが関係/制約に違反しようとした場合の利便性のためです。キーのキー違反があったというメッセージが返された場合、問題がどこにあるかはすぐにわかりますFK_FieldName@TableNameが、名前が意味をなさない場合はそれほど明確ではありません。

于 2013-03-12T19:38:01.920 に答える
0

唯一の違いは命名です。制約の名前を明示的に設定しない場合、名前は自動生成されます。例:FK_Employee_Dep_Id__164452B1。また、この名前は、さまざまな例外などで、テーブルキーの説明に表示されます。

于 2013-03-12T19:29:13.193 に答える
0

外部キーに名前を付けない場合、データベースは暗黙的にフィールドに外部キー名を割り当てます。

また、外部キーに名前を付けると、データベースはそれを外部キー定数名として使用します。

制約を削除するために使用できますdrop FOREIGN KEY foreign_key_name(MySql用)。

制約を削除するために使用できますdrop constraint foreign_key_name(Oracle、MS Sqlなど)。

使用できます

ALTER TABLE TableName
ADD CONSTRAINT foreign_key_name
FOREIGN KEY (field)
REFERENCES foreign_key_table(Foreign_key_field)
于 2013-03-12T19:30:21.037 に答える
0

最初の例FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)は MySQL で使用されており、この制約に固有の名前を付けることはできません。

2 番目の例では、基本的に任意の名前にCONSTRAINT fk_EmpDept FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)変更できます。fk_EmpDeptMySQL、SQL Server、Oracle、MS Access で使用できます。

2 番目のバージョンを使用すると、複数の列に外部キー制約を作成することもできます。

于 2013-03-12T19:30:53.607 に答える