所以我有一个用户帐户表(用户)。子帐户需要有适当的功能。
例如,一家名为Dunder Mifflin的公司可能拥有一个帐户。该公司将有子账户,会计和销售。会计帐户将有凯文,安吉拉和奥斯卡的子帐户。并且对级别数量没有限制。
我最初的想法是创建一个这样的表:
CREATE TABLE Users
(
UserID INTEGER,
ParentUserID INTEGER,
...
)
如果主帐户的ParentUserID只是null,但子帐户将包含其父帐户的UserID。
这是一个很好的设计吗?我不知道其他任何方式。
答案 0 :(得分:4)
它是一个很好的设计。另一种方法是使用HIERARCHID数据类型来管理层次结构,但对此的支持是有限的(报告,ORM工具等)。
实际上我在许多设置中都使用了这个。没有太多的替代品显然不会转储(比如为层次结构提供X字段)。我真的知道没有其他选择。
答案 1 :(得分:2)
这是一个很好的设计,你别无选择。阅读CTEs (Common Table Expressions),它将帮助您查询这种层次关系(递归地。)
在Sql Server 2000中可以递归查询层次结构,但自2005年以来CTE大大简化了。
连接到自身的表在设计器中看起来像这样:
答案 2 :(得分:2)
这称为自连接,是的,它是表示分层数据的标准方式。您可能需要像this一样查询以获得与Dunder Mifflin相关的所有用户。
答案 3 :(得分:0)
什么是子帐户用于?数据库设计是一个严重的问题。 早期的答案声称,您展示的设计定义很好。如果您有分层数据,是的,您始终拥有父ID。但是,您经常会有某种帐户所属的组帐户。这将是设置层次结构的更合适的地方。