【发布时间】:2021-12-30 19:21:07
【问题描述】:
我有两张桌子:
表 1
idproduct (PK)
des_product
表2
idclient (PK)
des_client
我需要创建一个这样的表:
Table3
idproduct (FK)(PK)
idclient (FK)(PK)
des_anything
【问题讨论】:
标签: sql sql-server database
我有两张桌子:
表 1
idproduct (PK)
des_product
表2
idclient (PK)
des_client
我需要创建一个这样的表:
Table3
idproduct (FK)(PK)
idclient (FK)(PK)
des_anything
【问题讨论】:
标签: sql sql-server database
使用“out-of-line constraint”语法:
CREATE TABLE T3 (
idproduct INT NOT NULL REFERENCES t1(idproduct), -- in-line FK syntax
idclient INT NOT NULL REFERENCES t2(idclient),
anyt_other_column VARCHAR(10),
PRIMARY KEY(idproduct, idclient) -- out-of-line PK syntax
);
具有命名约束的更健壮的语法:
CREATE TABLE T3 (
idproduct INT NOT NULL,
idclient INT NOT NULL,
anyt_other_column VARCHAR(10),
CONSTRAINT PK_T3 PRIMARY KEY (idproduct, idclient),
CONSTRAINT FK_T3_T1 FOREIGN KEY (idproduct) REFERENCES t1(idproduct),
CONSTRAINT FK_T3_T2 FOREIGN KEY (idclient) REFERENCES t2(idclient)
);
【讨论】:
这里是一个带有级联删除的实体框架完整示例:
CREATE TABLE [dbo].[Table3](
[idproduct] [int] NOT NULL,
[idclient] [int] NOT NULL,
-- other fields
-- [des_anything] ....
CONSTRAINT [PK_Table3] PRIMARY KEY CLUSTERED
(
[idproduct] ASC,
[idclient] ASC
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_Table3_idclient] ON [dbo].[Table3]
(
[idclient] ASC
) ON [PRIMARY]
ALTER TABLE [dbo].[Table3] WITH CHECK ADD CONSTRAINT [FK_Table3_Table1_idproduct] FOREIGN KEY([idproduct])
REFERENCES [dbo].[Table1] ([idproduct])
ON DELETE CASCADE
ALTER TABLE [dbo].[Table3] CHECK CONSTRAINT [FK_Table3_Table1_idproduct]
ALTER TABLE [dbo].[Table3] WITH CHECK ADD CONSTRAINT [FK_Table3_Table2_idclient] FOREIGN KEY([idclient])
REFERENCES [dbo].[Table2] ([idclient])
ON DELETE CASCADE
ALTER TABLE [dbo].[Table3] CHECK CONSTRAINT [FK_Table3_Table2_idclient]
【讨论】: