我有两张桌子。第一个表有多列作为主键,第二个表有一列主键。数据首先输入表1 FieldPlacement
,其中将生成FieldPlacementNum
,然后在表2中输入表{1}}中必须存在的记录。
目前有一对多的关系,但我希望反过来表和SQL的关系不允许我这样做。感谢
表1
FieldPlacementNum
表2
CREATE TABLE [dbo].[FieldPlacement]
(
[ID] [varchar](10) NOT NULL,
[Year] [varchar](10) NOT NULL,
[Term] [varchar](10) NOT NULL,
[PlacementNum] [int] IDENTITY(1,1) NOT NULL,
[Email] [varchar](70) NULL,
CONSTRAINT [PK_FieldPlacement]
PRIMARY KEY CLUSTERED ([ID] ASC, [Year] ASC, [Term] ASC, [PlacementNum] 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
ALTER TABLE [dbo].[FieldPlacement] WITH CHECK
ADD CONSTRAINT [FK_FieldPlacement_FieldPlacementEval1]
FOREIGN KEY([PlacementNum])
REFERENCES [dbo].[FieldPlacementEval] ([PlacementNum])
GO
ALTER TABLE [dbo].[FieldPlacement]
CHECK CONSTRAINT [FK_FieldPlacement_FieldPlacementEval1]
GO
答案 0 :(得分:0)
由于FieldPlacement.PlacementNum
是IDENTITY
,NOT NULL
且唯一,您还可以将其设为PK,然后只在当前组成的四列上创建唯一索引PK(确保其独特性)。
从FieldPlacementEval
开始,只需参考PlacementNum
即可。
这里的额外好处是FieldPlacement
表上的一个更小,更有效的聚类键(因为它只有1列而不是4列 - 并且跳过所有那些对聚类键非常糟糕的可变长度列)