0

システムに と の 2 つのテーブルがEMPLOYEEありEMPLOYEE_FORECASTます。どちらも同じ列を持ち、全体の構造は同じです。テーブルと呼ばれる同じ構造を持つ別のアーカイブテーブルがありEMPLOYEE_ARCHIVEます。

両方のテーブルからこのアーカイブ テーブルにデータを配置する必要があります。EMPLOYEEとのレコードEMPLOYEE_FORECASTは同じ主キーを持っている可能性があるため、たとえば、 のレコードEMPLOYEEの pk は 100 で、別のレコードのEMPLOYEE_FORECASTpk も 100 である可能性があり、これは間違いなく発生するため、それらがアーカイブ テーブルに挿入されると、重複する主キーが作成されます。 .

employee_products問題は、employee_forecast_productsやのようなリレーション テーブルもあるということemployee_archive_productsです。これらのテーブルには と がemp_idありproduct_idます。そのemp_idため、正確な従業員を把握することはできません。

EMPLOYEEしたがって、テーブルとテーブルの両方に一意の主キーを設定する方法はありますかEMPLOYEE_FORECAST

4

4 に答える 4

0

共通のスーパーテーブルを作成します。主キーのみを使用して別のテーブルEMPLOYEE_IDを作成します。EMPLOYEE、EMPLOYEE_FORECAST、およびEMPLOYEE_ARCHIVEの両方がそれを参照するようにします。

于 2012-04-26T10:17:37.913 に答える
0

あなたのデータモデルは少し混乱しているようです。EMPLOYEE と EMPLOYEE_FORECAST の構造が同一である場合、なぜ 2 つのテーブルがあるのでしょうか? ここでのビジネスルールは何ですか?

また、それらが 2 つの別個のテーブルであると想定されている場合、なぜそれらを共通のアーカイブ テーブルに格納するのでしょうか? テーブルごとに個別のアーカイブを用意しないのはなぜですか?

@Ollieに同意します。ビジネスの運営方法を明確に表現できるように、データ モデルを再考する必要があります。ここにビジネス ルールを投稿していただければ、問題を解決するお手伝いができると確信しています。しかし、ここでおそらく重要な問題があります。次のキーは 1 人の従業員 (つまり、現実世界の 1 人) または 2 人の従業員を識別しますか?

employee.emp_id = 100
employee_forecast.emp_id = 100
于 2012-04-26T10:39:40.157 に答える
0

したがって、EMPLOYEE テーブルの PK 列をアーカイブ テーブルの PK 列として使用することはできません。

アーカイブ テーブルに新しい PK 列を追加できます。

何らかの理由で、EMPLOYEE テーブルの PK 列をアーカイブ テーブルの PK にしたい場合は、レコードがどのテーブルからのものかを示すフラグ列をアーカイブ テーブルに追加できます。また、元の PK とフラグ列を含むアーカイブ テーブルに複合 PK を含めることができます。(一般に、私は複合 PK を思いとどまらせます。そのため、このフラグ列が必要な場合でも、アーカイブに通常の PK 列を追加することもできます。)

于 2012-04-26T10:12:34.333 に答える
0

私のコメントを拡張するには、アーカイブテーブルを次のように設定します。

EMPLOYEE
EMPID   NUMBER PK
EMPNAME VARCHAR2(30)
...

EMPLOYEE_FORECAST
EMPID   NUMBER PK
EMPNAME VARCHAR2(30)
...

EMPLOYEE_ARCHIVE
ORIG_TABLE VARCHAR2(30) PK
EMPID      NUMBER       PK
EMPNAME    VARCHAR2(30)
...

のデータEMPLOYEE_ARCHIVE:

ORIG_TABLE        EMPID      EMPNAME
------------------------------------
EMPLOYEE          100        JO BLOGGS
EMPLOYEE_FORECAST 100        JO BLOGGS

アーカイブ テーブル PK は元のテーブルと empid 列の両方にあるため、すべてのデータに対して一意のままです。

明らかにこれは単なる例であり、アーカイブ テーブルで一意性を確保するために任意の派生列を使用できます。

それが役に立てば幸い...

于 2012-04-26T10:12:41.667 に答える