1

機能を表すFN、ADM、USR、機能の管理者、機能に参加するユーザーの3つのテーブルがあります。管理者はユーザーになり、ADMはUSRから継承する必要があります。
FN_I、USR_Iは、FNおよびUSRのプリムキーである必要があります(これは他の多くのテーブルで参照されています)
ADMNは、追加された新しい可能です

ここに画像の説明を入力してください

次の制約を実装する必要があります。
  1. 1つの機能は1人の管理者しか持てません。(1-1)
  2。1人の管理者は1つの機能しか管理できませ

ん。
誰かが両方の要件を達成できる制約/関係について私を助けてくれますか?

4

2 に答える 2

1

リンクテーブルを作成することをお勧めします。

FN_ADMIN_REL

FN_I, -- PK
ADMIN_I --PK 

ここで、両方のフィールドはUNIQUE制約のある主キーです。

ALTER TABLE FN_ADMIN_REL
ADD CONSTRAINT uc_Func_Admin UNIQUE (FN_I, ADMIN_I)
于 2011-05-23T11:35:50.643 に答える
1

ここで用語を混同したと思います。1-1(1対1)の関係は、あなたが思っている通りではないと思います。

とにかく、私があなたの質問を正しく理解した場合(これは非常に簡単には当てはまらないかもしれません)、ここであなたがしていることです。

  • すでにFNテーブルとUSRテーブルがあり、それぞれに主キーがあります。
  • 論理的には、機能に参加するユーザーは多対多の関係です。ユーザーは多くの機能に参加でき、各機能には多くのユーザーが参加できます。従来、SQLサーバーの「リンク」テーブルによってモデル化された多対多の関係。FN_IフィールドとUSR_Iフィールドを持つFN_USRテーブルを作成し、それらの外部キーをそれぞれFNとUSRにします。これは、機能を出席ユーザーと接続する方法です。(図では、これら2つのテーブルの間に関係がないことに注意してください。したがって、多対多が必要であると推測しています。これは明示的に指定していません。)
  • 次に、ADMテーブルを見てみましょう。これはUSRから「継承」します。SQL Serverには、テーブル継承の概念はありません。これは通常、1対0または1の関係を介してモデル化されます。ADMテーブルを作成し、プライマリADM_Iをこのテーブルの主キーにします。また、USRテーブルのUSR_I列への外部キーにします。これは、管理者とユーザーの関係をモデル化する方法です。すべての管理者はユーザーです(すべてのADMレコードに関連するUSRレコードがあります)が、すべてのユーザーが管理者であるわけではありません(すべてのUSRレコードに関連するADMレコードがあるわけではありません)
  • 最後の部分は、管理者と機能の関係です。管理者は複数の機能を管理できないため、これも1対0または1です。ただし、この場合、ADM_I列をFUNテーブルに追加し、それをADMテーブルのADM_I列への外部キーにします。これにより、1対多になります。これで、FUNテーブルのADM_I列にUNIQUE制約を作成して、この関係を1対0にすることができます。

これは意味がありますか?

于 2011-05-23T11:36:12.503 に答える