0

CompanyデータテーブルとEmployeeデータテーブルを持つSQL2005データベースを構築しようとしています。各会社には、従業員1、従業員2などが必要です。各従業員レコードには、従業員IDと会社IDの両方のPKが含まれることに気付きましたが、これを行うための最善の方法を私は一生決めていませんでしたか?

何か案は?

これを少し明確にしましょう

各会社には、独自の従業員#1、#2などを含めることができます。会社IDと要求された従業員IDを渡すことによって特定の従業員を返すストアドプロシージャがあるとします。

exec dbo.GetEmployee @CompanyID = 1, @EmployeeID = 45 

会社1には従業員1がいて、会社2には別の従業員1がいる可能性があることに注意してください。これを行うにはどうすればよいですか?会社ごとに固有の従業員用の増分主キーを取得するにはどうすればよいですか?

4

6 に答える 6

2

質問がデータモデリングの質問である場合:

従業員が1つの会社でしか働けない場合は、CompanyIDをEmployeeテーブルの外部キー参照にし、EmployeeIDを特定の個人に固有のものにすることができます(たとえば、SSIDなど)。

従業員が複数の会社で働くことができる場合、多対多の関係があり、CompanyIDとEmployeeIDで構成されるCompanyEmployeeのような名前の3番目のテーブルが必要になります。

それは助けになりますか?

または、あなたの質問は単純です:

「SQLServerで複合主キーを実行するにはどうすればよいですか?」

于 2009-04-01T23:20:58.080 に答える
2

Jamo へのコメントによると、2 つの従業員 ID が必要です。1 つは雇用主によって一意であり、もう 1 つはデータベース全体で一意です。次に、これらのテーブルがあります。

Employees
E_ID NUMBER(9) NOT NULL
E_NAME
E_SSID
etc.

Companies
C_ID NUMBER(9) NOT NULL
C_NAME
etc.

Employment
CE_ID NUMBER(9) NOT NULL
C_ID NUMBER(9) NOT NULL FOREIGN KEY (Companies.C_ID)
E_ID NUMBER(9) NOT NULL FOREIGN KEY (Employees.E_ID)
LOCAL_E_ID NUMBER(9) NOT NULL

C_ID は、会社の一意の識別子です。E_ID は、データベース内の従業員の一意の識別子です。CE_ID は、更新を容易にするための雇用テーブルの一意の識別子です。LOCAL_E_ID は会社ごとに一意です。この数値を作成するには、何らかのトリガーを作成する必要があります。

于 2009-04-01T23:45:50.233 に答える
1

簡単な答えは、できません。

会社 ID と従業員 ID に対して、employee テーブルに主キーを作成します。これにより、一意の制約が処理されます。

ただし、従業員 ID を自動的にインクリメントすることはできません。代わりに、挿入時にトランザクションでラップして次のようにする必要があります。

insert @companyID, max(employeeID)+1 from employees where companyID=@companyID into employee
于 2009-04-01T23:48:10.337 に答える
1

手短に言えば、間違ったツリーを鳴らしている可能性が高いということです。

employeeID が自動インクリメント (したがって任意の) 番号として割り当てられている場合、会社ごとに employeeID を再設定する必要はありません。私が間違っていると思われる場合は、例を挙げてください。答えを調整します。

この設計は、不必要に複雑な設計を作成するだけです。たとえば、ストアド プロシージャは実際には 1 つの EmployeeID を取得する必要があり、その従業員レコードを使用して会社を特定します。

于 2009-04-01T23:52:03.323 に答える
0

どこかに外部キーがあるように聞こえます。これは、従業員が一度に1つの会社でしか働けないと仮定すると、従業員と会社の間の1:多くの関係です。従業員と会社の両方にPKがあり、従業員には会社のPKを参照するFKがあります。

会社と従業員の両方に代理キーを使用することをお勧めします。ビジネスロジックをキーから遠ざけることは良い考えです。

于 2009-04-01T23:16:17.433 に答える
0

主キー列 CompanyID を持つ Company というテーブルがあり、次に、EmployeeID の主キー列と CompanyID の外部キー列を持つ Employee というテーブルがあります。もちろん、各テーブルには EmployeeName と CompanyName およびその他の適切な列があります。

于 2009-04-01T23:39:06.070 に答える