我们有一个数据库,每个数据库都有一堆类别。层次结构如下:
Department
-- Necklaces
-- N_Diamond
-- N_D_Silver
-- N_Silver
-- Rings
-- R_Diamond
-- R_Gemstone
每个顶级类别(项链,戒指)都有一个父类别(部门),这些顶级类别中的每个类别只有一个父类别(即N_Diamond是N_D_Silver的父级)。
在每个类别中,都会有一个产品列表。每个产品可以属于多个类别(一对多?)。
如何在数据库中组织此操作?产品的表格,每行是产品+它所属的类别?这意味着每个产品可以有多行。不过,这似乎并不是很正常化。
答案 0 :(得分:0)
好吧,使用树形结构
表格包含rows id
,parent_category
,child_category
。
所以典型的行是
1, Departments, Necklace
2, Departments, Rings
3, Neckless, N_Diamonds
3, Neckless, N_Silver
...
10, R_Gemstone, null
您可以通过编制索引来规范化。
现在为引用上面树的产品创建一个表
Product_Table
rows id
,category_id
,product_name
答案 1 :(得分:0)
可以简单地说:
Product (ProductID, Name, details)
Department (DepartmentID, DepartmentName, ParentDepartmentID)
ProductDepartment (DepartmentID, ProductID)
您可以将部门级别的层次结构分成不同的表格,理想情况取决于使用情况。
答案 2 :(得分:0)
我会按照以下方式对其进行建模:
create table dbo.Type
(
id int not null identity(1,1) primary key ,
)
create table dbo.TypeAttribute
(
typeId int not null foreign key references dbo.Type(id) ,
id int not null identity(1,1) unique ,
primary key ( typeId , id ) ,
)
create table dbo.Product
(
id int not null identity(1,1) unique ,
typeId int not null foreign key references dbo.Type(id) ,
primary key ( id , typeId ) ,
)
create table dbo.ProductAttribute
(
productId int not null ,
typeId int not null ,
attributeId int not null ,
primary key ( productId , typeId , attributeId ) ,
foreign key ( productId , typeId ) references dbo.Product ( id , typeId ) ,
foreign key ( typeId , attributeId ) references dbo.TypeAttribute ( typeId , id ) ,
)
Types
,即产品的父类别。Type
都有一些TypeAttributes
个特定类型项目的描述性属性。Products
,每个Type
被分配给一个且只有一个ProductAttribute
。Type
,枚举每个唯一产品所拥有的属性,这些属性来自该产品{{1}}的可用属性。