2013-02-25 3 views
0

Я новичок в SQL Server, и мне было поручено работать над реализацией функциональных возможностей связанных продуктов в нашей существующей базе данных. У нас есть таблица продуктов, которые выглядят как этотДизайн таблиц для сопутствующих товаров

ProductID int, PK 
Name nvarchar(100) 
Price decimal 
CoverImageURL nvarchar(400) 
-- couple more columns exist 

Я думал о добавлении еще один столбец к существующей базе данных, как RelatedProductID, но не уверен, если это хороший дизайн.

ответ

6

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

Попробуйте добавить новую таблицу, как это:

CREATE TABLE dbo.RelatedProducts 
(
FirstProductId int not null, 
SecondProductId int not null 
) 

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

SELECT SecondProductId 
FROM RelatedProducts 
WHERE FirstProductId = @ProductID 
+0

-1 для не имеющих PRIMARY KEY и FOREIGN KEY. –

+4

@BrankoDimitrijevic Хотя я согласен, что нужно добавить, что должно быть «PRIMARY KEY» и «FOREIGN KEY», вы можете просто прокомментировать запрос об обновлении ответа. Это правильный ответ на проблему, и я не согласен с тем, что он заслуживает понижения. Ответ просто нужно расширить. Кен, вы должны включить в свой ответ, что эта новая таблица имеет как первичные/внешние ключи. – Taryn

+0

@bluefeet PK и FK - такие фундаментальные понятия, что их исключение делает неправильный ответ. Если/когда плакат отредактирует свой ответ, я буду рад обратить вспять вниз. –

1

Зависит от того, что вид отношений вам нужно.

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

CREATE TABLE ProductRelation (
    ProductID1 int REFERENCES Product (ProductID), 
    ProductID2 int REFERENCES Product (ProductID), 
    PRIMARY KEY (ProductID1, ProductID2) 
) 
Смежные вопросы