我想製作一個表格,它只是有兩個整數列作爲兩個不同數據集之間的映射表,我希望在其上放置正確的約束條件。一個正確的一對一映射表
我最初將這兩列設置爲複合主鍵,但後來認識到它代表了多對多,只保留重複出現的多對多映射。
如何指定我希望兩列在所有行中都是唯一整數?我正在使用MS SQL,但我想這是一個通用的數據庫設計問題。
我想製作一個表格,它只是有兩個整數列作爲兩個不同數據集之間的映射表,我希望在其上放置正確的約束條件。一個正確的一對一映射表
我最初將這兩列設置爲複合主鍵,但後來認識到它代表了多對多,只保留重複出現的多對多映射。
如何指定我希望兩列在所有行中都是唯一整數?我正在使用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]
在每列上使用UNIQUE列約束。
創建另一個表是爲了創建多對多的關係,所以你可能不應該創建它(除非我失去了一些東西)。
一對一強制與將兩個表作爲單個表相同。唯一可以接受的一對一是可選的,您只需將兩個表關聯起來,不需要第三個表。
爲什麼你需要一個關係表來進行一對一映射?其中一個數據表中的外鍵列不會訣竅嗎? – Ole 2008-12-29 21:03:30
我想我的理由是,我可以讓我單獨鏈接的兩張表的設計都有,並且有一張邏輯上僅表示映射的表。 – spilliton 2008-12-29 21:40:55