none
派生関係のテーブルを作りたいのですが,既存の主キーまたはUNIQUE制約と一致しませんでできません RRS feed

  • 質問

  • お世話になります.WinXP SP3, SQL Server 2005です.

    CREATE TABLE [dbo].[T_PU_Descriptive_Ulcer_Dermatology](
     [PU_Detail_Description_Number] [int] NOT NULL,
     [Pt_ID] [int] NOT NULL,
     [PU_Location_Cord] [bigint] NOT NULL,
     [PU_StartDate] [datetime] NOT NULL,
     [PU_AssessmentDate] [datetime] NOT NULL,
     [residulal_tissue] [nvarchar](50) NOT NULL,
     [granulation_tissue_colors] [nvarchar](50) NOT NULL,
     [granulation_tissue_forms] [nvarchar](50) NOT NULL,
     [granulation_tissue_properties] [nvarchar](50) NOT NULL,
     [wound_edge] [nvarchar](50) NOT NULL,
     [surrounding_skin] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_T_PU_Descriptive_Ulcer_Dermatology_1] PRIMARY KEY CLUSTERED
    (
     [Pt_ID] ASC,
     [PU_Location_Cord] ASC,
     [PU_StartDate] ASC,
     [PU_AssessmentDate] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[T_PU_Header](
     [Pt_ID] [int] NOT NULL,
     [PU_Location_Code] [bigint] NOT NULL,
     [PU_StartDate] [datetime] NOT NULL,
     [PU_Origin_Code] [int] NULL,
     [PU_EndDate] [datetime] NULL,
     [PU_End_Reason_Code] [int] NULL,
     CONSTRAINT [PK_T_PU_Header] PRIMARY KEY CLUSTERED
    (
     [Pt_ID] ASC,
     [PU_StartDate] ASC,
     [PU_Location_Code] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[T_PU_Detail](
     [Pt_ID] [int] NOT NULL,
     [PU_Location_Code] [bigint] NOT NULL,
     [PU_StartDate] [datetime] NOT NULL,
     [PU_AssessmentDate] [datetime] NOT NULL,
     [PU_NextAssessmentDate] [datetime] NOT NULL,
     [guideline_version] [decimal](6, 3) NOT NULL,
     [Depth_Status] [nvarchar](2) NOT NULL,
     [Exudate_Status] [nvarchar](3) NOT NULL,
     [Size_MajorAxis] [decimal](5, 2) NOT NULL,
     [Size_MaxDiameter] [decimal](5, 2) NOT NULL,
     [Size_Status] [nvarchar](3) NOT NULL,
     [Inflammation_Infection_Status] [nvarchar](3) NOT NULL,
     [Granuloma_Status] [nvarchar](3) NOT NULL,
     [Necrosis_Status] [nvarchar](3) NOT NULL,
     [Pocket_MajorAxis] [decimal](5, 2) NOT NULL,
     [Pocket_MaxDiameter] [decimal](5, 2) NOT NULL,
     [Pocket_Status] [nvarchar](3) NOT NULL,
     [DESIGNR_Score] [int] NOT NULL,
     [PU_picture] [varbinary](max) NULL,
     [PU_picture_path] [nvarchar](max) NULL,
     CONSTRAINT [PK_T_PU_Detail] PRIMARY KEY CLUSTERED
    (
     [Pt_ID] ASC,
     [PU_StartDate] ASC,
     [PU_Location_Code] ASC,
     [PU_AssessmentDate] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    T_PU_HeaderとT_PU_Detailとは親子関係で,これにT_PU_Descriptive_Ulcer_Dermatologyを派生関係として追加したいのですが,表題のエラーでできません.何が悪いのでしょうか.どうすればよいのでしょうか.よろしくお願いいたします.
    2009年7月17日 7:41

回答

  • こんにちは、nagino です。

    具体的な操作が示されていないので、具体的に行いたい操作が何か、またその操作に問題があるのか考え方に問題があるのか、が判断つきません。
    エラーの原因については、野良様がご回答されているとおりです。
    ですので、ミスタイプや誤操作が無いか改めてご確認ください、としかコメントのしようがありません・・・。

    なお、手元の環境(SQL Server 2005)にて、前述の CREATE 文を実行の後、以下の ALTER 文が実行できることは確認しました。
    以下をご参考に、実際に行おうとしている操作との差異を参考として、ご自身でご考察ください。

    ------------------------------------------
    ALTER TABLE dbo.T_PU_Detail ADD CONSTRAINT
        FK_T_PU_Detail_T_PU_Header FOREIGN KEY
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code
        )
        REFERENCES dbo.T_PU_Header
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code
        )
        ON UPDATE  NO ACTION
         ON DELETE  NO ACTION
    GO

    ALTER TABLE dbo.T_PU_Descriptive_Ulcer_Dermatology ADD CONSTRAINT
        FK_T_PU_Descriptive_Ulcer_Dermatology_T_PU_Detail FOREIGN KEY
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Cord,
            PU_AssessmentDate
        )
        REFERENCES dbo.T_PU_Detail
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code,
            PU_AssessmentDate
        )
        ON UPDATE  NO ACTION
        ON DELETE  NO ACTION
    GO
    ------------------------------------------


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク じふ 2009年7月24日 13:37
    2009年7月22日 4:15

すべての返信

  • T_PU_Descriptive_Ulcer_Dermatologyのどの列と、どのテーブルのどの列を紐づけようとしているのかわからないのですが、
    エラー文から推測すると

    ・登録されているデータの中で、親側に関連付かない、親側に存在しないデータが存在する
    ・親側がUniqu制約がない

    などが考えられます。
    http://techbank.jp/nora/(SQL Serverを中心に情報発信中)
    2009年7月18日 14:21
  • お世話になります.

    T_PU_Descriptive_Ulcer_DermatologyのPt_ID, PU_Location_Cord, PU_StartDate, PU_AssessmentDateのそれぞれにT_PU_DetailのPt_ID, PU_Location_Cord, PU_StartDate, PU_AssessmentDateがそれぞれ対応します.4者とも主キーです.

    ・属性名,データ型ともに一致しています.
    ・紐付けしようとしているのは主キーですのでユニーク制約に違反しているとは言えないと思います.

    よろしくお願いします.
    2009年7月19日 1:40
  • こんにちは、nagino です。

    具体的な操作が示されていないので、具体的に行いたい操作が何か、またその操作に問題があるのか考え方に問題があるのか、が判断つきません。
    エラーの原因については、野良様がご回答されているとおりです。
    ですので、ミスタイプや誤操作が無いか改めてご確認ください、としかコメントのしようがありません・・・。

    なお、手元の環境(SQL Server 2005)にて、前述の CREATE 文を実行の後、以下の ALTER 文が実行できることは確認しました。
    以下をご参考に、実際に行おうとしている操作との差異を参考として、ご自身でご考察ください。

    ------------------------------------------
    ALTER TABLE dbo.T_PU_Detail ADD CONSTRAINT
        FK_T_PU_Detail_T_PU_Header FOREIGN KEY
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code
        )
        REFERENCES dbo.T_PU_Header
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code
        )
        ON UPDATE  NO ACTION
         ON DELETE  NO ACTION
    GO

    ALTER TABLE dbo.T_PU_Descriptive_Ulcer_Dermatology ADD CONSTRAINT
        FK_T_PU_Descriptive_Ulcer_Dermatology_T_PU_Detail FOREIGN KEY
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Cord,
            PU_AssessmentDate
        )
        REFERENCES dbo.T_PU_Detail
        (
            Pt_ID,
            PU_StartDate,
            PU_Location_Code,
            PU_AssessmentDate
        )
        ON UPDATE  NO ACTION
        ON DELETE  NO ACTION
    GO
    ------------------------------------------


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク じふ 2009年7月24日 13:37
    2009年7月22日 4:15
  • 回答ありがとうございます.ただいま別件で質問したようにSQL Serverが起動できなくなっており検証ができません.申し訳ありませんがこちらのスレッドにはしばらく返事ができません.
    2009年7月22日 7:27
  • お世話になります.SQL Server Management Studio上でT_PU_DetailテーブルにT_PU_Descriptive_Ulcer_Dermatologyテーブルからリレーションシップを作成しようとしていましたが表題のエラーが出て困っていました.

    T_PU_HeaderでなくT_PU_Detailに紐付けようとしていたのは,T_PU_Detailにレコードが存在する場合に限ってT_PU_Descriptive_Ulcer_Dermatologyにレコード作成を許可したいのと,T_PU_DetailとT_PU_Descriptive_Ulcer_Dermatologyとが1対1で対応するようにしたかったからです.

    ご提示のT-SQL文を実行したところ,両方向の矢印のついたリレーションシップが作成されました.SQL Server Management Studioではできなかったのに?不思議です.ありがとうございました.
    2009年7月23日 20:23