数据库设计帮助 - 分层数据

时间:2010-11-19 19:42:19

标签: sql-server database database-design hierarchical-data

所以我有一个用户帐户表(用户)。子帐户需要有适当的功能。

例如,一家名为Dunder Mifflin的公司可能拥有一个帐户。该公司将有子账户,会计和销售。会计帐户将有凯文,安吉拉和奥斯卡的子帐户。并且对级别数量没有限制。

我最初的想法是创建一个这样的表:

CREATE TABLE Users
(
    UserID INTEGER,
    ParentUserID INTEGER,
    ...
)

如果主帐户的ParentUserID只是null,但子帐户将包含其父帐户的UserID。

这是一个很好的设计吗?我不知道其他任何方式。

4 个答案:

答案 0 :(得分:4)

它是一个很好的设计。另一种方法是使用HIERARCHID数据类型来管理层次结构,但对此的支持是有限的(报告,ORM工具等)。

实际上我在许多设置中都使用了这个。没有太多的替代品显然不会转储(比如为层次结构提供X字段)。我真的知道没有其他选择。

答案 1 :(得分:2)

这是一个很好的设计,你别无选择。阅读CTEs (Common Table Expressions),它将帮助您查询这种层次关系(递归地。)

在Sql Server 2000中可以递归查询层次结构,但自2005年以来CTE大大简化了。

连接到自身的表在设计器中看起来像这样: Self Join Cap

答案 2 :(得分:2)

这称为自连接,是的,它是表示分层数据的标准方式。您可能需要像this一样查询以获得与Dunder Mifflin相关的所有用户。

答案 3 :(得分:0)

什么是子帐户用于?数据库设计是一个严重的问题。 早期的答案声称,您展示的设计定义很好。如果您有分层数据,是的,您始终拥有父ID。但是,您经常会有某种帐户所属的组帐户。这将是设置层次结构的更合适的地方。