【问题标题】:SQL database design suggestion : Naming a database tableSQL 数据库设计建议:命名数据库表
【发布时间】:2010-01-14 21:25:11
【问题描述】:

我必须创建一个表并存储代表 用户Active Directory SID

您如何命名代表用户和组的类别?

编辑 1。

表将包含四列:ID (PK)、SID 的名称、SID 的值和另一列 SID 的类型(0 表示用户,1 表示组)。
请建议表名,而不仅仅是列名。

【问题讨论】:

    标签: sql database naming


    【解决方案1】:

    Active Directory 对两者都使用术语“主体”或“安全主体”。这也包括计算机。

    这是来自 MSDN 文章 Managing Directory Security Principals in the .NET Framework 3.5 的图形图像,显示了层次结构。


    (来源:microsoft.com

    所以我可能会打电话给我的桌子Principals 并拥有你提到的三列:

    • PrincipalName(字符串)
    • SID(字符串或二进制)
    • PrincipalType(0 代表用户,1 代表组)

    【讨论】:

    • 在阅读了 cmets 以及关于 stackoverflow.com/questions/7662 的辩论之后,我坚持使用单数形式的命名表/列。我特别喜欢以下论点:stackoverflow.com/questions/7662/7678#7678
    • 拥有Principal ( ID, Name, SID, TypeID )PrincipalType ( ID, Description ) 表,下面的查询似乎很自然:SELECT Principal.Name, Principal.SID, PrincipalType.Description FROM Principal INNER JOIN PrincipalType ON PrincipalType.ID = Principal.TypeID
    【解决方案2】:

    从最详细到最不详细:

    • ActiveDirectorySecurityIdentifiers
    • ActiveDirectorySID
    • ADSID

    良好的做法要求表名是复数形式,并且名称应该代表和描述表的内容。根据您的舒适程度,以上任何一项都可以。

    【讨论】:

    【解决方案3】:

    当我最近不得不这样做(将数据库用户表链接到 AD 帐户)时,我只是将列命名为 ADSID。

    我发现这对我们来说很有意义,因为我们使用 DirectorySearcher 进行查询,并且 LDAP 数据库中该属性的名称是 objectSid,所以我们的查询看起来像:

    deSearch.Filter = "(&(objectSid=" + ADSID + "))";
    

    虽然,当我从我的项目中粘贴该代码时,我想知道 objectSid 是否也是一个好的列名?

    至于命名表,我希望您在此处存储除了 AD 详细信息之外的其他信息?否则,为什么要复制 AD 数据库?

    如果您要存储附加信息,那么您应该根据该表所建模的任何域/业务对象来命名该表。

    正如我所说,我正在为用户存储数据,所以我的表简称为 [Users]。

    最后 - 也许您会从将其规范化为 [Groups] 和 [Users] 表中受益?

    【讨论】:

    • 我现在将数据从两个表( User 和 Group )迁移到一个表,因为 SID 是唯一的,因此我正在搜索描述两者的通用类别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2011-08-05
    • 2014-10-22
    相关资源
    最近更新 更多