2017-06-21 26 views
0

我开始在一个新的项目中工作,我在C#中使用程序并使用SQL服务器。 数据库开始变得复杂一点,但没有什么可担心的,但是昨天我在堆栈溢出的某个地方找到了一种关联表的新方法。参考字SQL的不同行为

表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) 

我怀疑肌酐的两种方式ng引用完全相同,唯一的区别是当您在表B中创建引用时,您没有为外键指定约束名称,因此外键的名称是随机生成的,因为我可以在sysobjects表中看到:

SELECT * FROM sysobjects WHERE name LIKE '%FK%' 

foreign keys

的问题是:两者都做参考的工作方式完全相同?如果我创建一个约束外键,或者如果我从列的定义行引用一个PK,它是一样的吗?

我不知道这是否只能在SQL服务器上完成,或者它是SQL中的一些东西,我也试着在Google上找到它的信息,但我没有任何运气(也许是因为我不知道我在寻找什么的)

回答

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