1

我正在尝试建立一个网上商店数据库,但当涉及到提供子子类别的 SQL 产品表的设计时,我遇到了一个问题。

例如,我有一个主要类别,始终设置为:

1.Cars

然后我有第一个子类别

1.1 BMW
1.2 Mercedes

最后,在某些情况下,我有一个更深的类别。

1.1.1 BMW M3
1.1.2 BMW M5

1.2.1 Mercedes 1
1.2.2 Mercedes 2

目前我有三个表:

tbl_Article
int ArticleId
char Description
decimal Price
int Category
int SubCategory

tbl_Category
int CategoryId
char Description
int hasSubCategories

tbl_SubCategory
int SubCategoryId
int Category
char Description

我该如何解决这个问题,以便在需要时可以拥有多个子类别?

非常感谢!

4

1 回答 1

1

您可以设计一个“类别表”,其本身带有外键:

tbl_category

int   id                                            --primary key
int   fk_parentCategory REFERENCES tbl_category.id  --foreign key, can be null
char  description
...

tbl_product

int   id         --primary key
int   category   --foreign key, can not be null
char  name
...

该列fk_parentCategory是一个外键,指向它自己的表(但不同的类别)。它也可以为空。

如果为 null,则为顶级类别。如果不是,它是一个子类别。

你只需要关心,一个类别永远不会指向它自己。因此,该列id决不能与该列具有相同的值fk_parentCategory

于 2014-01-30T11:06:07.930 回答