我开始在一个新项目中工作,我在C#中编程并使用SQL服务器。 数据库开始变得有点复杂,但没有什么可担心的,但是昨天我在Stack Overflow中找到了一种新的表格关联方式。
表A
CREATE TABLE tableA (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
CONSTRAINT tablea_pk PRIMARY KEY (Id))
表B
CREATE TABLE tableB (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
idA int NOT NULL REFERENCES TableA(Id) ON DELETE CASCADE,
CONSTRAINT tableB_pk PRIMARY KEY (Id))
表C
CREATE TABLE tableC (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
idB int NOT NULL,
CONSTRAINT tableC_fk_tableB FOREIGN KEY(idB)
REFERENCES tableB(Id)
ON DELETE CASCADE)
我怀疑创建引用的两种方式完全相同,唯一的区别是当您在表B中创建引用时,没有为外键指定约束名称,因此外键的名称是随机生成的,因为我可以在sysobjects表中看到:
SELECT * FROM sysobjects WHERE name LIKE '%FK%'
问题是:两个REFERENCES的工作方式是否完全相同?如果我创建一个约束外键...或者如果我从列的定义行引用PK,它是否相同?
我不知道这是否只能在SQL服务器上完成,或者它是SQL中的常规内容,我也尝试在Google上查找有关它的信息,但我没有运气(也许是因为我不知道是什么我正在寻找)
答案 0 :(得分:1)
它是相同的,你也可以在表B中内联命名你的约束:
CREATE TABLE tableB (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
idA int NOT NULL CONSTRAINT FK_TableB_TableA REFERENCES TableA(Id) ON DELETE CASCADE,
CONSTRAINT tableB_pk PRIMARY KEY (Id))
go