Tôi nghĩ rằng bạn chắc chắn đã gặp phải một trục trặc kỳ lạ trong SSMS. Tôi đã có thể tạo giản đồ của bạn bằng SSMS 2014 mà không gặp bất kỳ lỗi nào. Nó đã điền trước ba cột khóa chính tổng hợp khi thêm FK mới. Tôi đã cẩn thận để đảm bảo rằng tất cả chúng đều được bỏ trống trước khi tôi bắt đầu thêm hai cột trong FK. Có thể SSMS nghĩ rằng một trong các hàng trống vẫn có dữ liệu trong đó.
Chỉnh sửa:Chỉ cần có một suy nghĩ nữa, SSMS biết để lưu vào bộ nhớ đệm bất kỳ thay đổi nào được thực hiện khi chỉnh sửa bảng. Ví dụ:nếu bạn sửa đổi hai bảng và mở cả hai cửa sổ chỉnh sửa. Sau đó, bạn thay đổi PK trong một cửa sổ và sau đó cố gắng tham chiếu nó trong cửa sổ thứ hai, nó sẽ bị lỗi vì nó đã lưu vào bộ đệm những gì giản đồ dành cho bảng đầu tiên khi cửa sổ được mở lần đầu tiên.
Đây là DDL đã tạo của tôi:
CREATE TABLE [dbo].[AppRegion](
[appname] [nvarchar](50) NOT NULL,
[isocode] [char](5) NOT NULL,
CONSTRAINT [PK_AppRegion] PRIMARY KEY CLUSTERED
(
[appname] ASC,
[isocode] ASC
)
) ON [PRIMARY]
CREATE TABLE [dbo].[Translation](
[ResourceKey] [nvarchar](128) NOT NULL,
[appname] [nvarchar](50) NOT NULL,
[isocode] [char](5) NOT NULL,
[text] [nvarchar](400) NULL,
CONSTRAINT [PK_Translation] PRIMARY KEY CLUSTERED
(
[ResourceKey] ASC,
[appname] ASC,
[isocode] ASC
)
) ON [PRIMARY]
ALTER TABLE [dbo].[Translation] ADD CONSTRAINT [FK_Translation_AppRegion] FOREIGN KEY([appname], [isocode])
REFERENCES [dbo].[AppRegion] ([appname], [isocode])