外键关系问题

Issue with foreign key relationship

我有一个 table,其中主键是一个复合键:P_ID 和 [YEAR]

Table1
_______
P_ID  int
YEAR   nvarchar
FIELD1

和另一个 table:

Table2
__________
P_ID int
PDate  datetime
Year  nvarchar
Field2

在表 1 中 P_ID 不是唯一的,为了得到唯一的记录需要结合 P_ID 和 Year。在表 2 中,唯一标识符将是 P_ID 和 PDate 字段的组合,其中 PDate 是每个月的第一天(例如:9/1/2015),因此每个 P_ID 有 12 条记录。

table 都没有任何约束,所以我想在 P_ID 和 Year 上为 Table1 创建一个主键。对于 Table2,我想让 P_ID 和 PDate 成为主键。现在的问题是我无法在 Table2 中创建外键,因为 P_ID 是复合键的一部分。将这两个 table 连接在一起的最佳方式是什么,还是我应该保持原样?

当然可以。以下代码是 运行 在 SQL Server 2008 r2.

use tempdb;

CREATE TABLE T1 (
  P_ID int not null,
  Year char(4) not null,
  Field1 varchar(50) null
  );

ALTER TABLE T1 ADD CONSTRAINT PK_1 PRIMARY KEY (P_ID, Year);


CREATE TABLE T2 (
  P_ID int not null,
  PDate datetime not null,
  Year char(4) not null,
  Field2 varchar(50) null
  );

ALTER TABLE T2 ADD CONSTRAINT PK_2 PRIMARY KEY (P_ID, PDate);

ALTER TABLE T2 ADD CONSTRAINT FK_2_1 FOREIGN KEY (P_ID, Year)
    REFERENCES T1 (P_ID, Year);

GO


INSERT T1 VALUES (1, 2015, 'abc'); -- Will Succeed
INSERT T1 VALUES (2, 2015, 'bcd'); -- Will Succeed

INSERT T2 VALUES (1, '1/1/2015', 2015, 'xyz'); -- Will Succeed
INSERT T2 VALUES (3, '1/1/2015', 2015, 'xyz'); -- Will Fail

SELECT * FROM T1;
SELECT * FROM T2;