Database design 使用JDBC设计数据库表
我正在使用JDBC和mysql创建一个users表,每个用户都有一个包含整数值的权限列表 我想知道是否应该使用一个数组来存储这些值,然后在表中仅为该用户创建一条记录,或者简单地创建一个包含两列的新表:用户ID和权限,然后为每个用户创建多条记录,在一列中指定用户名,在第二列中指定权限值 第二个选项似乎是多余的,因为权限值是一个与任何其他对象不关联的简单对象(例如,学生和课程列表,因为课程与许多其他对象关联,如年级、教师等,因此在这种情况下,自然会有多个记录),但是第一个对我来说似乎有点不自然,所以如果有人对这些东西有经验,可以指导我使用“自然”设计?Database design 使用JDBC设计数据库表,database-design,jdbc,Database Design,Jdbc,我正在使用JDBC和mysql创建一个users表,每个用户都有一个包含整数值的权限列表 我想知道是否应该使用一个数组来存储这些值,然后在表中仅为该用户创建一条记录,或者简单地创建一个包含两列的新表:用户ID和权限,然后为每个用户创建多条记录,在一列中指定用户名,在第二列中指定权限值 第二个选项似乎是多余的,因为权限值是一个与任何其他对象不关联的简单对象(例如,学生和课程列表,因为课程与许多其他对象关联,如年级、教师等,因此在这种情况下,自然会有多个记录),但是第一个对我来说似乎有点不自然,所以
谢谢如果您想为单个用户存储多个权限,我将正确使用三个表。一个用于用户,一个用于权限。在一个属性中存储多个信息(例如逗号分隔)是一种糟糕的设计。存储多个信息会给您带来很多限制
名字 许可 idPermission
许可 用户权限 idUser
idPermission如果要为单个用户存储多个权限,我将正确使用三个表。一个用于用户,一个用于权限。在一个属性中存储多个信息(例如逗号分隔)是一种糟糕的设计。存储多个信息会给您带来很多限制
名字 许可 idPermission
许可 用户权限 idUser
idPermission如果您想在列中存储逗号分隔的值列表(或任何分隔符),这是一个非常强烈的提示,您应该使用另一个表(实际上是两个表,因为您拥有的是多对多关系)。不这样做会破坏正常化
也就是说,我见过(旧的)系统将权限列表存储为“权限掩码”(例如“101101”)。但我认为这是一种不好的做法,它违背了上述规则,并且没有一个好的论据来证明它的合理性(除非你避免连接…如果你不做7+个连接,这不是一个问题)。如果你发现自己正在考虑在列中存储一个逗号分隔的值列表(或任何分隔符),这是一个非常强烈的提示,您应该使用另一个表(实际上是两个表,因为您拥有的是多对多关系)。不这样做会破坏正常化 也就是说,我见过(旧的)系统将权限列表存储为“权限掩码”(例如“101101”)。但是我认为这是一个不好的实践,它违背了上述规则,并且没有一个好的理由来证明它(除了你避免连接…如果你不做7+的连接,这不是一个问题)
“这不是我需要的,就像我说的, 权限仅为整数值 (没有名字和身份证)。我想知道答案 这可以引导我解决我的问题 详情“ 考虑以下陈述
- 用户
拥有权限5、6和7noona
- 用户
拥有权限1和权限9apc
noona
可以使用权限5、6和7做什么?这些权限意味着什么
如果不存储名称或标识符,数据的含义就存在于数据库之外。在某些情况下,这是有效的,但通常是一个糟糕的设计决策指标。这就是为什么每个人都要求权限表和UserPermissions作为该表和用户之间的交集表
拥有一个单独的UserPermissions表是正确的选择(无论您将权限的含义存储在何处),因为有一列作为值可以轻松找到拥有权限4的所有用户,或者查询usernoona
是否拥有权限7
无论如何,数组都是不自然的
“这不是我需要的,就像我说的, 权限仅为整数值 (没有名字和身份证)。我想知道答案 这可以引导我解决我的问题 详情“ 考虑以下陈述
- 用户
拥有权限5、6和7noona
- 用户
拥有权限1和权限9apc
noona
可以使用权限5、6和7做什么?这些权限意味着什么
如果不存储名称或标识符,数据的含义就存在于数据库之外。在某些情况下,这是有效的,但通常是一个糟糕的设计决策指标。这就是为什么每个人都要求权限表和UserPermissions作为该表和用户之间的交集表
拥有一个单独的UserPermissions表是正确的选择(无论您将权限的含义存储在何处),因为有一列作为值可以轻松找到拥有权限4的所有用户,或者查询usernoona
是否拥有权限7
无论如何,数组都是不自然的 这不是我需要的,就像我说的,权限只是一个整数值(没有名字或id)。我想要一个能引导我了解问题细节的答案。谢谢这不是我需要的,就像我说的,权限只是一个整数值(没有名字或id)。我想要一个能引导我了解问题细节的答案。感谢权限值表示权限