Как создать это ограничение SQL - PullRequest
3 голосов
/ 19 июля 2010

Ситуация, в которой я нахожусь, заключается в том, что у меня есть набор существующих таблиц с инкрементными целыми числами в качестве идентификаторов. Теперь я добавил GUID для каждой таблицы, чтобы быть новым PK.

У меня есть основная таблица

dbo.ParentTable(GUID - PK, ParentTableId INT, Name VARHCHAR) 

и дочерний стол

dbo.ChildTable(GUID - PK, ParentTableId INT, other fields.....) 

и хотим создать отношения между ними (в основном, так что LINQ to SQL из .Net будет создавать объекты) на основе ParentTableId. Я понимаю, что не могу создать отношения FK между ними, поскольку у них есть GUIDS для PK сейчас. Должен ли я обновлять GUID в дочерней таблице, чтобы они ссылались на родительскую таблицу, или я могу создать связь, основанную на ранее существовавшем столбце ParentId?

Отношения между ними - «Один ко многим» (родитель и потомок), и я использую SQL Server 2008.

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Я думаю, вы можете ошибочно думать, что вы можете создать только FOREIGN KEY, который ссылается на PRIMARY KEY.Фактически, вы можете создать FOREIGN KEY, который ссылается на ограничение UNIQUE, например,

ALTER TABLE ParentTable ADD 
   UNIQUE (ParentTableId);

ALTER TABLE ChildTable ADD 
   FOREIGN KEY (ParentTableId)
   REFERENCES ParentTable (ParentTableId);
0 голосов
/ 19 июля 2010

хочет создать отношения между ними (в основном, так что LINQ to SQL из .Net будет создавать объекты)

Принятый ответ великолепен. Однако LinqToSql на самом деле не волнует, что находится в вашей базе данных. Вы можете добавить ассоциацию , даже если FKey не был определен.

0 голосов
/ 19 июля 2010

Не думаю, что вы захотите обновить свои GUID в дочерней таблице, чтобы они связывались с родительской таблицей, так как это, вероятно, сломало бы ваш PK в дочерней таблице. Я хотел бы изменить столбец «ParentTableId» в дочерней таблице на GUID вместо INT. Затем обновите дочернюю таблицу, указав связь между ParentTable.GUID <-> ChildTable.ParentTableID.

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