ограничение на RowParentId в той же таблице? - PullRequest
2 голосов
/ 17 апреля 2009

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

  CREATE TABLE TestTable 
(
    RowId int IDENTITY NOT NULL PRIMARY KEY,
    RowParentId int NULL, -- < how do I specify constraint that RowParentId if not NULL should be RowId (foreign key to existing table?)
    RowName nvarchar(30),
    RowShortName nvarchar(10)
)
GO

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

Надеюсь, мне удалось передать то, что я ищу.

Приветствия

Ответы [ 5 ]

5 голосов
/ 17 апреля 2009

Разве это не внешний ключ?

RowParentId int NULL references ParentTable (ParentTableIdColumn),

если оно не равно нулю, то это должно быть значение из родительской таблицы.

1 голос
/ 17 апреля 2009
ALTER TABLE TestTable
ADD CONSTRAINT fk_testtable_parent
FOREIGN KEY (RowParentId)
REFERENCES TestTable(RowId)

Обратите внимание, что хранить NULL в столбце - плохая идея, так как он не доступен для поиска по индексам.

Вам лучше добавить суррогатную запись с id = 0, указать реальный корень этой записи и исключить ее из выбора.

0 голосов
/ 17 апреля 2009

ALTER TABLE [dbo] .TestTable с проверкой ADD CONSTRAINT [FK_TestTable_RowId_TestTable_RowParentId] FOREIGN KEY (RowParentId) ССЫЛКИ TestTable (RowId)

0 голосов
/ 17 апреля 2009

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

references table_name (column_name)

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

0 голосов
/ 17 апреля 2009

У вас может быть ограничение внешнего ключа, которое ссылается на ту же таблицу. Вы можете хотеть смотреть на другие модели для иерархий все же. Модель связанных цепочек имеет много проблем в SQL. Сделайте гугл по «Иерархии Джо Селко», и вы сможете найти информацию о других способах моделирования иерархии.

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