我尝试在一列到两列主键之间创建一个外键,而SQL Server拒绝了。为什么 ?
我有一张桌子,用不同的语言存储我的措辞,还有一张国家表。
ref.SystemLabels
--------------
--> [Id] int
| [IdLanguage] int
| Label nvarchar(200)
| Keywords nvarchar(200)
|
| ref.Countries
| --------------
| [Id]
--> IdSystemLabel
IsoCode
在我看来,这是很逻辑的,但是我不明白为什么SQL Server无法理解或接受我的逻辑^^。
如果有人可以帮助我。
注意我认为以另一种方式,尽管有外键,我仍将在IdSystemLabel上创建索引。
编辑:当您问我时,请参阅我的表的SQL代码
表格系统语言
CREATE TABLE [ref].[SystemLanguages](
[Id] [int] NOT NULL,
[IdSystemLabel] [int] NOT NULL,
[IsoCode] [nchar](2) NOT NULL,
[Enabled] [bit] NOT NULL,
CONSTRAINT [PK_SystemLanguages] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [ref].[SystemLanguages] ADD CONSTRAINT [DF_SystemLanguages_Enabled] DEFAULT ((0)) FOR [Enabled]
GO
表格系统标签
CREATE TABLE [ref].[SystemLabels](
[Id] [int] NOT NULL,
[IdLanguage] [int] NOT NULL,
[Label] [nvarchar](max) NOT NULL,
[Keywords] [nvarchar](200) NULL,
[CreatedAt] [datetime] NOT NULL,
[UpdatedAt] [datetime] NULL,
[Group] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_SystemLabels] PRIMARY KEY CLUSTERED
(
[Id] ASC,
[IdLanguage] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [ref].[SystemLabels] ADD CONSTRAINT [DF_SystemLabels_CreatedAt] DEFAULT (getdate()) FOR [CreatedAt]
GO
注意由于循环依赖关系,该表不能具有SystemLanguages的外键
表LocalizationLevel0
CREATE TABLE [ref].[LocalizationLevel0](
[Id] [int] NOT NULL,
[IdSystemLabel] [int] NOT NULL,
[IsoCode] [nchar](2) NOT NULL,
[CreatedAt] [datetime] NOT NULL,
[UpdatedAt] [datetime] NULL,
[Enabled] [bit] NULL,
CONSTRAINT [PK_LocalizationLevel0] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [ref].[LocalizationLevel0] ADD CONSTRAINT [DF_LocalizationLevel0_CreatedAt] DEFAULT (getdate()) FOR [CreatedAt]
GO
ALTER TABLE [ref].[LocalizationLevel0] ADD CONSTRAINT [DF_LocalizationLevel0_Enabled] DEFAULT ((0)) FOR [Enabled]
GO
我正在尝试解释我的逻辑:
一个localizationlevel0项可以翻译成多种系统语言:
法国国家的示例
1 4 'FR' '2015-04-17 00:00:00:000' NULL 1
-系统语言
1 1 'FR' 1
2 2 'EN' 1
3 3 'DE' 1
-相应的措辞
1 1 'Français' NULL '2015-04-17 00:00:00:000' NULL 'SystemLanguages'
1 2 'French' NULL '2015-04-17 00:00:00:000' NULL 'SystemLanguages'
1 2 'Französisch' NULL '2015-04-17 00:00:00:000' NULL 'SystemLanguages'
...
4 1 'France' NULL '2015-04-17 00:00:00:000' NULL 'LocalizationLevel0'
4 2 'France' NULL '2015-04-17 00:00:00:000' NULL 'LocalizationLevel0'
4 3 'Frankreich' NULL '2015-04-17 00:00:00:000' NULL 'LocalizationLevel0'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句