SQL Server Management Studio – 添加外键混淆?
我总是发现在Management Studio中将外键添加到主表时会感到困惑。
可以说我有一个
Table1 { ID int, -- Primary Key Table2ID int, -- Refers to Table2's ID } Table2 { ID int, -- Primary Key SomeData nvarchar(50) }
我正在通过Right Click -> Relationships -> Table and column specification
向Table1添加一个外键。 我将Table2,ID和“Foreign Key Table”设置为Table1,Table2ID的“Primary”popup窗口。
我的问题:
-
不应该列出“外键表”和主键表1列表2? 我的理解错了吗?
-
当我保存我得到一个警报“下面的表将被保存到您的数据库”。 并显示两个表。 我真的不明白这一点。 我只改变了Table1。 为什么显示第二个表格?
- 点击表格旁边的展开符号。
- 右键点击“Keys”文件夹并select“New Foreign Key”。
- (或者,也可以在打开表格时单击工具条上的“关系”button)
- 点击“表格和列规格”行中的“…”button以打开编辑器。
- 左边的下拉列表是您要添加的表格,而静态文本字段会列出要添加的表格。
- 使用下拉菜单来指定您的约束,并确保双方具有相同的列数。
你为什么不使用相当的T-SQL语句? 似乎更容易,更不容易混淆我:
ALTER TABLE dbo.Table1 ADD CONSTRAINT FK_Table1_Table2 FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
当我读到这个,我相信这是立即清楚什么两个表涉及,以及他们如何连接( Table1.Table2ID
– (引用) – > Table2.ID
)
如果你想留在SSMSdevise师的世界里,你也可以创build一个涉及你的表的数据库图表,然后只需将Table2ID
列从Table1
拖放到Table2
然后将它放到ID
列上 – 这将graphics地告诉SSMS什么你想要做的,你只需要检查你的select,并在popup的对话框上单击确定。
1.不应该列出“外键表”和主键表1吗? 我的理解错了吗?
我相信你的理解是错误的。 表2是您正在引用的主键的表。 因此它在主键下列出。 表1是将具有外键(对另一个表的主键的引用)的表; 因此在“外键表”中列出。
至于为什么这两个表都保存了,即使外键被列为属于Table1:我相信这是因为外键约束两个表。 他们都必须“知道”约束,所以他们都需要被保存。
ALTER TABLE dbo.Table1 ADD CONSTRAINT FK_Table1_Table2 FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)