Database design 使用JDBC设计数据库表

Database design 使用JDBC设计数据库表,database-design,jdbc,Database Design,Jdbc,我正在使用JDBC和mysql创建一个users表,每个用户都有一个包含整数值的权限列表 我想知道是否应该使用一个数组来存储这些值,然后在表中仅为该用户创建一条记录,或者简单地创建一个包含两列的新表:用户ID和权限,然后为每个用户创建多条记录,在一列中指定用户名,在第二列中指定权限值 第二个选项似乎是多余的,因为权限值是一个与任何其他对象不关联的简单对象(例如,学生和课程列表,因为课程与许多其他对象关联,如年级、教师等,因此在这种情况下,自然会有多个记录),但是第一个对我来说似乎有点不自然,所以

我正在使用JDBC和mysql创建一个users表,每个用户都有一个包含整数值的权限列表

我想知道是否应该使用一个数组来存储这些值,然后在表中仅为该用户创建一条记录,或者简单地创建一个包含两列的新表:用户ID和权限,然后为每个用户创建多条记录,在一列中指定用户名,在第二列中指定权限值

第二个选项似乎是多余的,因为权限值是一个与任何其他对象不关联的简单对象(例如,学生和课程列表,因为课程与许多其他对象关联,如年级、教师等,因此在这种情况下,自然会有多个记录),但是第一个对我来说似乎有点不自然,所以如果有人对这些东西有经验,可以指导我使用“自然”设计?
谢谢

如果您想为单个用户存储多个权限,我将正确使用三个表。一个用于用户,一个用于权限。在一个属性中存储多个信息(例如逗号分隔)是一种糟糕的设计。存储多个信息会给您带来很多限制

  • 无法对属性进行排序
  • 无法使用该属性连接表
  • 也许更多
  • 用户 idUser
    名字

    许可 idPermission
    许可

    用户权限 idUser

    idPermission

    如果要为单个用户存储多个权限,我将正确使用三个表。一个用于用户,一个用于权限。在一个属性中存储多个信息(例如逗号分隔)是一种糟糕的设计。存储多个信息会给您带来很多限制

  • 无法对属性进行排序
  • 无法使用该属性连接表
  • 也许更多
  • 用户 idUser
    名字

    许可 idPermission
    许可

    用户权限 idUser

    idPermission

    如果您想在列中存储逗号分隔的值列表(或任何分隔符),这是一个非常强烈的提示,您应该使用另一个表(实际上是两个表,因为您拥有的是多对多关系)。不这样做会破坏正常化


    也就是说,我见过(旧的)系统将权限列表存储为“权限掩码”(例如“101101”)。但我认为这是一种不好的做法,它违背了上述规则,并且没有一个好的论据来证明它的合理性(除非你避免连接…如果你不做7+个连接,这不是一个问题)。

    如果你发现自己正在考虑在列中存储一个逗号分隔的值列表(或任何分隔符),这是一个非常强烈的提示,您应该使用另一个表(实际上是两个表,因为您拥有的是多对多关系)。不这样做会破坏正常化

    也就是说,我见过(旧的)系统将权限列表存储为“权限掩码”(例如“101101”)。但是我认为这是一个不好的实践,它违背了上述规则,并且没有一个好的理由来证明它(除了你避免连接…如果你不做7+的连接,这不是一个问题)


    “这不是我需要的,就像我说的, 权限仅为整数值 (没有名字和身份证)。我想知道答案 这可以引导我解决我的问题 详情“

    考虑以下陈述

    • 用户
      noona
      拥有权限5、6和7
    • 用户
      apc
      拥有权限1和权限9
    哪个用户更强大?用户
    noona
    可以使用权限5、6和7做什么?这些权限意味着什么

    如果不存储名称或标识符,数据的含义就存在于数据库之外。在某些情况下,这是有效的,但通常是一个糟糕的设计决策指标。这就是为什么每个人都要求权限表和UserPermissions作为该表和用户之间的交集表

    拥有一个单独的UserPermissions表是正确的选择(无论您将权限的含义存储在何处),因为有一列作为值可以轻松找到拥有权限4的所有用户,或者查询user
    noona
    是否拥有权限7

    无论如何,数组都是不自然的


    “这不是我需要的,就像我说的, 权限仅为整数值 (没有名字和身份证)。我想知道答案 这可以引导我解决我的问题 详情“

    考虑以下陈述

    • 用户
      noona
      拥有权限5、6和7
    • 用户
      apc
      拥有权限1和权限9
    哪个用户更强大?用户
    noona
    可以使用权限5、6和7做什么?这些权限意味着什么

    如果不存储名称或标识符,数据的含义就存在于数据库之外。在某些情况下,这是有效的,但通常是一个糟糕的设计决策指标。这就是为什么每个人都要求权限表和UserPermissions作为该表和用户之间的交集表

    拥有一个单独的UserPermissions表是正确的选择(无论您将权限的含义存储在何处),因为有一列作为值可以轻松找到拥有权限4的所有用户,或者查询user
    noona
    是否拥有权限7


    无论如何,数组都是不自然的

    这不是我需要的,就像我说的,权限只是一个整数值(没有名字或id)。我想要一个能引导我了解问题细节的答案。谢谢这不是我需要的,就像我说的,权限只是一个整数值(没有名字或id)。我想要一个能引导我了解问题细节的答案。感谢权限值表示权限