Поскольку только лист категория может содержать продукты, I будет предлагаться следующая структура:
TblCategory
(
Category_Id int PRIMARY KEY,
Category_Name nvarchar(30) -- or whatever length suits your needs
Category_Parent_Id int NULL FOREIGN KEY REFERENCE TblCategory(Category_Id),
CONSTRAINT UC_Category UNIQUE (Category_Name)
)
TblLeafCategory
(
LeafCategory_Id PRIMARY KEY int,
LeafCategory__Name nvarchar(30) -- or whatever length suits your needs
LeafCategory_Parent_Id int NOT NULL FOREIGN KEY REFERENCE TblCategory(Category_Id),
CONSTRAINT UC_Category UNIQUE (LeafCategory_Name)
)
TblProduct
(
Product_Id int PRIMARY KEY,
Product_LeafCategory_Id int NOT NULL FOREIGN KEY REFERENCE TblLeafCategory(LeafCategory_Id),
-- Other product columns
)
При добавлении подкатегории в любую категорию листьев вам нужно будет сначала скопировать ее имя и parent_Id в TblCategory, переименовать существующую категорию листьев в ее новое имя (то есть, если базой была Audi, а листок был Sport, вы должны добавить категорию Спорт в TblCategory и переименуйте лист в Classic), а затем добавьте новую категорию листьев и обновите таблицу продуктов, которая должна принадлежать ей (в примере с машинами добавьте Modern как категорию листьев, где она является родителем Sport, и обновите продукты, которые должны отправиться туда из классической категории).
Хотя это кажется громоздким способом обработки разделов категорий листов, его можно обрабатывать с помощью одной хранимой процедуры (предпочтительно с транзакцией внутри), и эта структура базы данных гарантирует, что только категории листьев могут иметь продукты.
Ожидаете ли вы иметь цепочку подкатегорий (например, Audi, Audi sport, Audi aport convertible) или только один уровень подкатегорий? Кроме того, о каких rdbms мы говорим? –
Я хочу иметь цепочку подкатегорий, каждая категория может иметь много подкатегорий, это не двоичное дерево. Audi Sport может быть разделен на Classic и Modern в будущем, Classic также может быть разделен на некоторые подкатегории. Это делает меня головоломкой. Мой RBDMS - это Microsoft SQL Server 2012 – Andiana