3

テーブルの挿入を行う場合、外部キーはその親テーブルに対して自動的にチェックされ、値が存在することが確認されます。存在しない場合、挿入は失敗します。

私の質問は、挿入時のこのデータ チェックのためだけに値を外部キーとして設定するのは間違っているのでしょうか?

私がやろうとしていることのいくつかのオタクの文脈:

大学以来忘れていたものすべてをブラッシュアップするために、レスリングのデータベースを構築しています。レスリングのファンである私は、それをトピックとして使用することで私の興味を維持できると考えていました (そしてそれは続いています)。

Create Table Superstar
(
    Superstar_ID Int Not Null Primary Key Identity (100,1),
    Employee_ID Int Not Null Foreign Key References Employee(Employee_ID),
    Alignment_ID Int Not Null Foreign Key References Alignment(Alignment_ID),
    SuperStar_Name Varchar(50) Not Null,
    SuperStar_Weight Varchar(50) Not Null,
    SuperStar_Height Varchar(50) Not Null,
    Billed_From Varchar(50) Not Null,
    Active Bit Not Null
)

Create Table Title
(
    Title_ID Int Not Null Primary Key Identity(1,1),
    Title_Name Varchar(50) Not Null,
    Title_Description Varchar(50) Not Null,
    **Current_Holder Int Foreign Key References Superstar(Superstar_ID),
    Former_Holder Int Foreign Key References Superstar(Superstar_ID),**
    Active Bit Not Null
)

Create Table Superstar_Title
(
    Superstar_Title_ID Int Not Null Primary Key Identity (1,1),
    Title_ID Int Not Null Foreign Key References Title(Title_ID),
    Superstar_ID Int Not Null Foreign Key References Superstar(Superstar_ID)
)

「Title」テーブルについては、Current_Holder フィールドと Former_Holder フィールドを外部キーとして設定し、Superstar_ID が挿入時に実際に存在することを Superstar テーブルに確認しました。

これはひどく間違っていますか?組み込みのチェック制約のためだけに外部キーを使用していますか?

4

1 に答える 1

3

それが制約を持つことの要点です-データが一貫していることを確認するためです。だから、いいえ、それはまったく問題ありません。実際には、データの整合性を維持することをお勧めします。これにより、存在しない人によって「保持」されているものを取得できなくなります。

編集: 「奨励」という言葉で言いたいのは、これを行うべきである一方で、テクノロジによってそうしないことが可能になるということです。手動で確認したい場合は、データベースに外部キー関係を強制しなくてもかまいません。ただし、どこでチェックを実行する必要があります。そうしないと、役に立たないデータになってしまいます。また、SQL のスキルを磨いているので、使用している RDMBS のすべての機能を利用するのが最善だと思います。

于 2013-02-09T14:20:37.910 に答える