Запрос, который допускает повторяющиеся значения в таблице, но не для той же ссылки внешнего ключа - PullRequest
0 голосов
/ 02 марта 2011

Я использую SQL Server2005 с asp.net. Я хочу, чтобы проверка на стороне сервера ограничивала повторяющиеся записи. Здесь я использую две таблицы компаний и филиалов. В таблице филиалов у меня был внешний ключ CompanyId. В филиалах имя филиала можно дублировать, но не для конкретного идентификатора компании.

Companies Table:
        Columns: CompanyId (Primary Key), CompanyName

Branches Table :
        Columns: BranchId(Primary Key), BranchName, CompanyId (Foreign Key).

Идентификатор компании может быть повторен несколько раз, отношение один ко многим. Какой запрос я использую, чтобы разрешить дублирование, но не для того же CompanyId?

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

Требуется ограничение, обеспечивающее уникальность столбцов CompanyID и BranchName.Это может быть либо по первичному ключу для таблицы (как рекомендовал Тим), либо по ограничению UNIQUE:

ALTER TABLE Branches ADD
    CONSTRAINT UQ_BranchNamesWithinCompanies UNIQUE (BranchName,CompanyID);

Вы можете решить, в каком порядке помещать столбцы в пределах ограничения, в зависимости от того, как часто выполняются поиски.выполняется в таблице на основе двух столбцов.Т.е. вы на самом деле создаете индекс для этих столбцов, так что вы также можете использовать его для повышения производительности запросов.

Приведенный выше порядок был основан на предположении, что вы можете искать имена ветвей без ссылки наконкретная компания.Если вы всегда выполняете поиск внутри компании и выполняете поиск по префиксу (например, CompanyID=21 and BranchName like 'Lon%'), вам нужно изменить порядок столбцов.

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