使用parentID进行数据库设计

时间:2012-08-16 18:31:42

标签: sql

我想在sql db中创建以下层次结构。这就是我所拥有的。这是正确的还是有一种更简单的方法。另外,我如何查询它以显示相同的层次结构?

Services
    Property
        Residential
            To let
                Purchase
                Accommodation
                Maintenance
                Plumbers
                Electricians
                Carpenters
       Industrial
    To let
                 Purchase
                 Accommodation
                 Maintenance
                 Plumbers
                 Electricians
                 Carpenters

CategoryType

CategoryTypeID CategoryName
1   Services
2   Products
3   Main
4   MainSub
5   Sub
6   Sub1

Category

CateogryID      CategoryName   CategoryTypeID  ParentID
1       Property    Service
2       Residential Main        1
3        To let     MainSub 2
4       Purchase    Sub     3
5       Accommodation Sub       4

2 个答案:

答案 0 :(得分:0)

您的架构可能有效,但在尝试表示分层数据时,RDBMS非常难以使用。你要么很难更新表格,要么对它进行查询会非常低效。我建议你是否要使用这些数据是考虑嵌套集模型。

http://en.wikipedia.org/wiki/Nested_set_model

http://www.evanpetersen.com/item/nested-sets.html

有一点学习曲线,但值得。

干杯

答案 1 :(得分:0)

使用每个级别的表为层次结构建模。自下而上:

费用表包含“购买”,“住宿”,“维护”等行以及指向“所有权”表的“ID”字段的字段。

Ownership表包含ToBuy和ToLet行以及指向BuildingType表的ID字段的字段。

BuildingType表包含Residential和Industrial行以及指向AssetType表的字段。

AssetType表包含行Property和其他内容。

等等。

这称为3普通形式建模。