3

調査のリストを含むテーブルがあります(PKはIDです)

CREATE TABLE [dbo].[SurveyMaster](
    [ID] [nvarchar](4) NOT NULL,
    [Title] [nvarchar](200) NULL,
    [IsActive] [bit] NOT NULL,

そして、変数マッピングのリストを含むテーブル。

CREATE TABLE [dbo].[VariableMappings](
    [ParentSurvey_ID] [nvarchar](4) NOT NULL,
    [ReportingMonth] [nvarchar](6) NOT NULL,
    [VariableName] [nvarchar](400) NOT NULL,
    [Value] [int] NOT NULL

私の望みは、ParentSurvey_ID、ReportingMonth、Variable NameにVariableMappingsの主キーを作成して、一意のレコードを確保することでした。

同時に、VariableMappings.ParentSurvey_IDとSurveyMaster.IDの間に外部キーの関係を設定して、VariableMappingsに関連するSurveyIDのみが含まれるようにします。

SQL Serverでいくつかのアプローチを試しましたが、複合キーが3つの列で構成されているため、FKを作成できないと思います。

どうすればこれを達成できますか?

4

3 に答える 3

9

はい、できます:

CREATE TABLE [dbo].[VariableMappings](
    [ParentSurvey_ID] [nvarchar](4) NOT NULL,
    [ReportingMonth] [nvarchar](6) NOT NULL,
    [VariableName] [nvarchar](400) NOT NULL,
    [Value] [int] NOT NULL,
  PRIMARY KEY (ParentSurvey_ID, ReportingMonth, VariableName),
  FOREIGN KEY (ParentSurvey_ID)
    REFERENCES dbo.SurveyMaster (ID)
) ;

ほとんどあなたの問題とは無関係ですが、PRIMARY KEYそれがとても広い(410 nvarchars)ことは最善の考えではありません。

于 2012-06-26T20:41:53.073 に答える
3

主キー定義と外部キー定義は直交しています。複合主キーと単一列の外部キーを問題なく宣言できます。VariableMappingsただし、複合キーよりも、上の代理主キーの方が適切な選択であることをお勧めします。特に、を指す外部キーの場合VariableMappingsです。

于 2012-06-26T20:38:43.287 に答える
3

重要な主キーが1つあり、それはのキーですSurveyMaster。そこに主キーがある限りID、それらのテーブルの主キーに関係なく、他の任意の数のテーブルからそれを参照できます。

外部キーでは、参照される列の組み合わせが一意である必要があり、一意性は、たとえば主キー制約によって保証される必要があります。

于 2012-06-26T20:41:53.143 に答える