0

MSSQL Management Studioで 2 つのテーブルを接続する際に問題があります。 私の目標は、外部キーでテーブルを接続することです。ユーザーを削除すると、2番目のテーブルエントリが自動的に削除されます。そのために DELETE Cascade メソッドを使用する予定です。

User:
CREATE TABLE [dbo].[Users](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Email] [nvarchar](89) NOT NULL,
[Name] [nvarchar](25) NOT NULL,
[Midname] [nvarchar](25) NOT NULL,
[Surname] [nvarchar](25) NOT NULL,
[Phone] [varchar](15) NOT NULL,
[Country] [smallint] NOT NULL,
[Manager] [nvarchar](89) NOT NULL,
[Referrer] [nvarchar](89) NOT NULL,
[Rank] [tinyint] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
[Email] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,      ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

メールが主キー

Payments:
 CREATE TABLE [dbo].[Investments](
[ID] [bigint] NOT NULL,
[Investor] [nvarchar](89) NOT NULL,
[Sum] [decimal](19, 4) NOT NULL,
[Currency] [smallint] NOT NULL,
[Credit] [decimal](19, 4) NOT NULL,
[CreditRate] [decimal](19, 4) NOT NULL,
[Rate] [tinyint] IDENTITY(1,1) NOT NULL,
[Date] [smalldatetime] NOT NULL,
[Comment] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_Investments] PRIMARY KEY CLUSTERED 
(
        [ID] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

 GO

ID は主キー

私の FK は USER->PAYMENTS または PAYMENTS->USER のようにする必要がありますか?

メールで外部キーを使用してユーザー -> 支払い -> 投資家に接続しようとすると、次のようなエラーが表示されます。

テーブル 'Payments' の列は、既存の主キーまたは UNIQUE 制約と一致しません。

どこに問題があるのか​​教えてください。そして、私は何を間違っていますか?

4

2 に答える 2

3

構造を次のように変更します。

CREATE TABLE [dbo].[Users](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Email] [nvarchar](89) NOT NULL,
[Name] [nvarchar](25) NOT NULL,
[Midname] [nvarchar](25) NOT NULL,
[Surname] [nvarchar](25) NOT NULL,
[Phone] [varchar](15) NOT NULL,
[Country] [smallint] NOT NULL,
[Manager] [nvarchar](89) NOT NULL,
[Referrer] [nvarchar](89) NOT NULL,
[Rank] [tinyint] NOT NULL);

ALTER TABLE [Users]
ADD CONSTRAINT PK_UsersID PRIMARY KEY (ID);

その後

CREATE TABLE [dbo].[Investments](
[ID] [bigint] NOT NULL,
[UserID] [bigint] NOT NULL,
[Sum] [decimal](19, 4) NOT NULL,
[Currency] [smallint] NOT NULL,
[Credit] [decimal](19, 4) NOT NULL,
[CreditRate] [decimal](19, 4) NOT NULL,
[Rate] [tinyint] IDENTITY(1,1) NOT NULL,
[Date] [smalldatetime] NOT NULL,
[Comment] [nvarchar](max) NOT NULL);

ALTER TABLE Investments
ADD CONSTRAINT PK_InstestmentsID PRIMARY KEY (ID);

ALTER TABLE Investments
ADD CONSTRAINT FK_UsersInvestments
FOREIGN KEY (UserID)
REFERENCES Users(ID);

その後、Users.ID参加Investments.UserID

于 2012-05-30T22:28:22.813 に答える
2

表示されているエラーメッセージ(テーブル名なし)を検索しましたが、一般的なコンセンサスは、PRIMARY KEYまたはUNIQUE制約がテーブルに正しく設定されていないようです。このエラーは、(おそらく)SQLServerを使用していることも示しています。

technet.microsoft.comから:

外部キー関係の主キー側の列は、主キーまたは一意性制約のいずれかに参加する必要があります。選択したテーブルの1つに主キーまたは一意性制約を設定した後、そのテーブルの他の関係を定義できます。

PRIMARY KEYS両方の表を確認してください。テーブルの実際のDDLがなければ、これ以上の助けになることは困難です。

編集:あなたはあなたのテーブルにEmailとして持っていますが、私はテーブルにフィールドが表示されません。制約の中でどの分野に参加していますか?PRIMARY KEYUsersEmailInvestments

于 2012-05-30T21:55:56.483 に答える