一个组件作为外键的复合键
Composite key with one component being a foreign key
我有一个金融应用程序,我每天都在其中存储行情数据,所以我从 Ticker
和 Date
.
创建了一个主键
我还需要将 Ticker
(它是上述组合键的一部分)作为另一个 table 的外键,称为 Tickers
。
然而,当我在 SQL Server Management Studio 中添加外键关系时,它要求我为 Ticker
和 Date
两列提供 link ,而 Ticker table 只包含 Ticker
(这是我只想绑定的内容)。
请问我做错了什么,或者这不可能吗?
我的table如下:
CREATE TABLE [dbo].[Tickers](
[Ticker] [nvarchar](8) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Market] [int] NOT NULL,
[Locale] [int] NOT NULL,
[Type] [int] NOT NULL,
[Active] [bit] NOT NULL,
[PrimaryExch] [nvarchar](50) NOT NULL,
[Updated] [datetime2](7) NOT NULL,
[Currency] [int] NOT NULL,
CONSTRAINT [PK_Tickers] PRIMARY KEY CLUSTERED
(
[Ticker] 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
CREATE TABLE [dbo].[AggregateDay](
[Ticker] [nchar](8) NOT NULL,
[Date] [date] NOT NULL,
[Volume] [decimal](18, 0) NULL,
[Open] [decimal](18, 0) NULL,
[Close] [decimal](18, 0) NULL,
[High] [decimal](18, 0) NULL,
[Low] [decimal](18, 0) NULL,
[Samples] [int] NULL,
CONSTRAINT [PK_AggregateDay] PRIMARY KEY CLUSTERED
(
[Ticker] ASC,
[Date] 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
您设置的一个问题是父列和子列的数据类型不同:[dbo].[Tickers]([Ticker])
是 [nvarchar](8)
,而 [dbo].[AggregateDay](Ticket)
是 [nchar](8)
.
如果对齐两种数据类型,则可以创建关系,如下所示:
CREATE TABLE [dbo].[AggregateDay](
[Ticker] [nvarchar](8) NOT NULL
REFERENCES [dbo].[Tickers]([Ticker]), -- foreign key declaration
[Date] [date] NOT NULL,
[Volume] [decimal](18, 0) NULL,
[Open] [decimal](18, 0) NULL,
[Close] [decimal](18, 0) NULL,
[High] [decimal](18, 0) NULL,
[Low] [decimal](18, 0) NULL,
[Samples] [int] NULL,
CONSTRAINT [PK_AggregateDay] PRIMARY KEY CLUSTERED
([Ticker] ASC, [Date] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
) ON [PRIMARY]
我有一个金融应用程序,我每天都在其中存储行情数据,所以我从 Ticker
和 Date
.
我还需要将 Ticker
(它是上述组合键的一部分)作为另一个 table 的外键,称为 Tickers
。
然而,当我在 SQL Server Management Studio 中添加外键关系时,它要求我为 Ticker
和 Date
两列提供 link ,而 Ticker table 只包含 Ticker
(这是我只想绑定的内容)。
请问我做错了什么,或者这不可能吗?
我的table如下:
CREATE TABLE [dbo].[Tickers](
[Ticker] [nvarchar](8) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Market] [int] NOT NULL,
[Locale] [int] NOT NULL,
[Type] [int] NOT NULL,
[Active] [bit] NOT NULL,
[PrimaryExch] [nvarchar](50) NOT NULL,
[Updated] [datetime2](7) NOT NULL,
[Currency] [int] NOT NULL,
CONSTRAINT [PK_Tickers] PRIMARY KEY CLUSTERED
(
[Ticker] 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
CREATE TABLE [dbo].[AggregateDay](
[Ticker] [nchar](8) NOT NULL,
[Date] [date] NOT NULL,
[Volume] [decimal](18, 0) NULL,
[Open] [decimal](18, 0) NULL,
[Close] [decimal](18, 0) NULL,
[High] [decimal](18, 0) NULL,
[Low] [decimal](18, 0) NULL,
[Samples] [int] NULL,
CONSTRAINT [PK_AggregateDay] PRIMARY KEY CLUSTERED
(
[Ticker] ASC,
[Date] 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
您设置的一个问题是父列和子列的数据类型不同:[dbo].[Tickers]([Ticker])
是 [nvarchar](8)
,而 [dbo].[AggregateDay](Ticket)
是 [nchar](8)
.
如果对齐两种数据类型,则可以创建关系,如下所示:
CREATE TABLE [dbo].[AggregateDay](
[Ticker] [nvarchar](8) NOT NULL
REFERENCES [dbo].[Tickers]([Ticker]), -- foreign key declaration
[Date] [date] NOT NULL,
[Volume] [decimal](18, 0) NULL,
[Open] [decimal](18, 0) NULL,
[Close] [decimal](18, 0) NULL,
[High] [decimal](18, 0) NULL,
[Low] [decimal](18, 0) NULL,
[Samples] [int] NULL,
CONSTRAINT [PK_AggregateDay] PRIMARY KEY CLUSTERED
([Ticker] ASC, [Date] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
) ON [PRIMARY]