【问题标题】:Database table design, user menu strip access, winforms数据库表设计,用户菜单条访问,winforms
【发布时间】:2019-10-24 21:15:40
【问题描述】:

我对 Winforms 桌面应用程序有一个要求,即根据用户访问权限隐藏/显示 fileMenStrip 上的选项。不能使用角色,因为不同的访问权限是按人授予的。

我正在尝试找出满足需求的数据库设计。

目前我有一个带有桥接表的 userTable、fileMenuTableLevel1、fileMenuTableLevel2。

我知道这不对,但我不确定如何表示 2 级是 1 级的子菜单项。

此外,如果需要第三级,则必须创建一个新表。

我有一个想法,即使用一个表来表示使用“parentId”的访问,这只是表上引用 menuId 的另一列。这也感觉不对,因为我不知道在哪里存储它是否可见。

什么是最好的表达方式?

Design that I know is incorrect

【问题讨论】:

    标签: c# sql postgresql winforms database-design


    【解决方案1】:

    我会推荐以下允许将 任意 数量的子元素添加到父元素的方法。 使用自引用键(显式声明带有约束或不带约束)。

    MENU_ELEMENTS_TABLE

    :ID

    :ELEMENT_TYPE

    :PARENT_ID

    ...

    注意:最顶层的元素(即第一个父元素的 PARENT_ID 为 null 或默认值或所有顶级父元素都通用的值,以便能够将其与子元素区分开来。删除条目可以通过级联删除约束添加。

    【讨论】:

      【解决方案2】:

      我有一个想法,即使用一个表来表示使用“parentId”的访问权限,这只是表上引用 menuId 的另一列。这也感觉不对,因为我不知道在哪里存储它是否可见。

      您尝试将所有文​​件菜单元素存储在一个表中的想法是正确的。我不确定我是否理解您的“可见性”问题。在我看来,如果您的架构由这三个表组成:

      用户

      菜单元素

      用户菜单元素

      然后可见性将简单地存储在 UserMenuElement 链接表中。我认为该字段可能无关紧要,但条目的存在应该表明您确实具有访问权限。

      【讨论】:

      • 是的,这确实更有意义。 “可见”列及其存储位置是阻止我将一个表用于 MenuElements 的问题,但正如您所说,它无关紧要,删除该列可以解决所有问题。感谢您的帮助!
      猜你喜欢
      • 2017-05-05
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多