Правильная таблица сопоставлений один-к-одному - PullRequest
0 голосов
/ 29 декабря 2008

Я хочу создать таблицу, в которой просто есть два целочисленных столбца, которые будут служить таблицей отображения между двумя различными наборами данных, и я хочу наложить на нее правильные ограничения.

Первоначально я установил два столбца как составной первичный ключ, но затем понял, что представляет множество-многие, только предотвращая дублирование сопоставлений между многими.

Как мне указать, я хочу, чтобы оба столбца были уникальными целыми числами во всех строках? Я использую MS SQL, но я полагаю, что это общий вопрос проектирования базы данных.

Ответы [ 3 ]

2 голосов
/ 30 декабря 2008

Создание другой таблицы выполняется для создания связи «многие ко многим», поэтому вам, вероятно, не следовало создавать ее (если я что-то упустил).

Обязательное условие «один к одному» аналогично наличию двух таблиц в одной таблице. Единственное приемлемое отношение один к одному является необязательным, и вам просто нужно связать две таблицы, третья таблица не требуется.

1 голос
/ 30 декабря 2008

Создайте первичный ключ в одном столбце и другое отдельное уникальное ограничение или уникальный индекс в другом.

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 голосов
/ 30 декабря 2008

Использовать УНИКАЛЬНОЕ ограничение для каждого столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...