2008-12-29 11 views
0

我想製作一個表格,它只是有兩個整數列作爲兩個不同數據集之間的映射表,我希望在其上放置正確的約束條件。一個正確的一對一映射表

我最初將這兩列設置爲複合主鍵,但後來認識到它代表了多對多,只保留重複出現的多對多映射。

如何指定我希望兩列在所有行中都是唯一整數?我正在使用MS SQL,但我想這是一個通用的數據庫設計問題。

+0

爲什麼你需要一個關係表來進行一對一映射?其中一個數據表中的外鍵列不會訣竅嗎? – Ole 2008-12-29 21:03:30

+0

我想我的理由是,我可以讓我單獨鏈接的兩張表的設計都有,並且有一張邏輯上僅表示映射的表。 – spilliton 2008-12-29 21:40:55

回答

1

在一列上創建一個主鍵,另一個在另一個上創建另一個單獨的唯一約束或唯一索引。

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] 
0

在每列上使用UNIQUE列約束。

2

創建另一個表是爲了創建多對多的關係,所以你可能不應該創建它(除非我失去了一些東西)。

一對一強制與將兩個表作爲單個表相同。唯一可以接受的一對一是可選的,您只需將兩個表關聯起來,不需要第三個表。