Sql 正确的一对一映射表

Sql 正确的一对一映射表,sql,mapping,one-to-one,Sql,Mapping,One To One,我想制作一个只包含两个整数列的表,作为两个不同数据集之间的映射表,并希望对其施加正确的约束 我最初将这两列设置为复合主键,但后来意识到这表示多对多,只会避免出现重复的多对多映射 如何指定我希望所有行中的两列都是唯一的整数?我正在使用MS SQL,但我想这是一个一般的数据库设计问题。对每列使用唯一的列约束。对每列使用唯一的列约束。在一列上创建主键,在另一列上创建另一个单独的唯一约束或唯一索引 CREATE TABLE [dbo].[test]( [x] [int] NOT NULL,

我想制作一个只包含两个整数列的表,作为两个不同数据集之间的映射表,并希望对其施加正确的约束

我最初将这两列设置为复合主键,但后来意识到这表示多对多,只会避免出现重复的多对多映射


如何指定我希望所有行中的两列都是唯一的整数?我正在使用MS SQL,但我想这是一个一般的数据库设计问题。

对每列使用唯一的列约束。

对每列使用唯一的列约束。

在一列上创建主键,在另一列上创建另一个单独的唯一约束或唯一索引

CREATE TABLE [dbo].[test](
    [x] [int] NOT NULL,
    [y] [int] NOT NULL,
     CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
     ( [x] ASC) 
     WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
         IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, 
         ALLOW_PAGE_LOCKS  = ON) 
     ON [PRIMARY]) 
 ON [PRIMARY]

CREATE UNIQUE NONCLUSTERED INDEX [IX_test] ON [dbo].[test] 
  ([y] ASC) 
   WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
         SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
         DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
         ALLOW_PAGE_LOCKS  = ON)  
 ON [PRIMARY]

在一列上创建主键,在另一列上创建另一个单独的唯一约束或唯一索引

CREATE TABLE [dbo].[test](
    [x] [int] NOT NULL,
    [y] [int] NOT NULL,
     CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
     ( [x] ASC) 
     WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
         IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, 
         ALLOW_PAGE_LOCKS  = ON) 
     ON [PRIMARY]) 
 ON [PRIMARY]

CREATE UNIQUE NONCLUSTERED INDEX [IX_test] ON [dbo].[test] 
  ([y] ASC) 
   WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
         SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
         DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
         ALLOW_PAGE_LOCKS  = ON)  
 ON [PRIMARY]

创建另一个表是为了创建多对多关系,所以您可能不应该创建它(除非我遗漏了什么)


一对一强制与将两个表作为一个表相同。唯一可接受的一对一是可选的,您只需将两个表关联起来,不需要第三个表。

创建另一个表是为了创建多对多关系,因此您可能不应该创建它(除非我遗漏了什么)


一对一强制与将两个表作为一个表相同。唯一可接受的一对一是可选的,您只需将两个表关联起来,不需要第三个表。

为什么需要一个关系表进行一对一映射?其中一个数据表中的外键列不会起作用吗?我想我的原因是这样我就可以不去设计我正在链接的两个表,而拥有一个逻辑上只表示映射的表。为什么需要一对一映射的关系表?其中一个数据表中的外键列不会起作用吗?我想我的原因是,我可以让我正在链接的两个表的设计单独进行,并且有一个逻辑上只表示映射的表。除非创建附加表作为反规范化以提高性能。例如,如果这个映射表将被每秒1000次的查询命中,而它所使用的一对一的核心表非常宽,并且每天只被命中几次……当然,但这可以通过分区来实现。是的,这被称为垂直分区(或者是水平分区?)。无论DBMS是否具有特殊的功能,您都可以通过从表的属性子集创建另一个一对一的表来手动执行此操作,除非创建额外的表作为反规范化以提高性能。例如,如果这个映射表将被每秒1000次的查询命中,而它所使用的一对一的核心表非常宽,并且每天只被命中几次……当然,但这可以通过分区来实现。是的,这被称为垂直分区(或者是水平分区?)。无论DBMS是否有特殊的功能来实现这一点,您都可以通过从表的属性子集创建另一个一对一的表来手动实现