Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 对用户、组和成员数据库表进行建模_Database_Ruby On Rails 3_Postgresql_Activerecord_Schema - Fatal编程技术网

Database 对用户、组和成员数据库表进行建模

Database 对用户、组和成员数据库表进行建模,database,ruby-on-rails-3,postgresql,activerecord,schema,Database,Ruby On Rails 3,Postgresql,Activerecord,Schema,我正在尝试创建用户、组和成员表,如下所示。一个用户可能属于一个或多个组,一个组可能有一个或多个用户。用户和组表之间的多对多关系是使用成员关系表维护的。我想维护成员身份(已批准/待决/其他信息??)和成员批准人信息。成员资格审批人将是管理员组中的用户之一。下面是我脑海中的一个粗略的模式。我对数据库建模还不熟悉,希望获得关于以下实现的一些反馈。特别是,我不确定成员资格表是否应该使用“用户id”FK具有“批准人”列,还是应该创建一个单独的表来维护成员资格状态(id、成员资格id、状态、批准人)??我猜

我正在尝试创建用户、组和成员表,如下所示。一个用户可能属于一个或多个组,一个组可能有一个或多个用户。用户和组表之间的多对多关系是使用成员关系表维护的。我想维护成员身份(已批准/待决/其他信息??)和成员批准人信息。成员资格审批人将是管理员组中的用户之一。下面是我脑海中的一个粗略的模式。我对数据库建模还不熟悉,希望获得关于以下实现的一些反馈。特别是,我不确定成员资格表是否应该使用“用户id”FK具有“批准人”列,还是应该创建一个单独的表来维护成员资格状态(id、成员资格id、状态、批准人)??我猜在这里使用单独的表成员身份更合适,但不确定。另外,我计划在这个应用程序中使用ActiveRecord作为ORM。我非常感谢在实施此设计/方案时提出的任何意见或建议

User:
  id, Primary Key
  userid, Integer, Unique
  username, String, Unique
  email, String, Unique
  created_at, DateTime
  updated_at, DateTime

Group:
  id, Primary Key
  groupid, Integer, Unique
  groupname, String, Unique
  created_at, DateTime
  updated_at, DateTime

Membership:
  PK(user_id, group_id)
  status, String
  approved_by, user_id FK to User table 
  created_at, DateTime
  updated_at, DateTime

MembershipStatus 
  id
  membership_id FK to Membership table
  status, String
  approved_by, user_id FK to User table 
  created_at, DateTime
  updated_at, DateTime
-谢谢

看起来不错

在两个表中显示approved_by。如果您保留MembershipStatus表,那么这就是is应该属于的位置。此外-名称“approved_by”表示“approved”的状态,该状态可能存在,也可能不存在。你可能会想到另一个名字

您还应该有一个表,该表可能标识了哪些用户是哪些组的管理员。这样,您就可以为允许批准的人以及实际批准的人编码数据库端安全性

此外,我不太喜欢在表中存储审计历史记录,正如您所展示的那样。要么使用内置的审计数据库,要么将其拉到另一个表中以记录审计历史记录


最后,id和userid看起来是多余的。使用userid。(与其他表类似)

为什么ID和userID以及ID和GroupID我看不出在每个表中保留两组ID的原因。您将隐藏ID字段,并向用户公开名称字段。如果用户离开,会发生什么情况?您想保留成员身份的历史记录还是他们曾经是成员的事实?我想我会保持会员身份,将FK改为用户名,将membershipstatus改为MembershipJRNL以跟踪历史。我也会考虑一个具有所有不同类型的会员资格的表格。最后,一个“Deleted_at”如何显示如果不记录安全性,记录将不再处于活动状态。userID和groupID与Linux系统的用户和组数据库相关,因此我将其与数据库表中的ID(主键)不同,后者通常是按顺序递增的。系统用户/组ID可能没有相同的约定,因此我将它们区分开来。谢谢你关于审计这些账目的建议。我没想过。我会考虑你和兰迪的建议,然后重新发布我的模式。谢谢你的评论,谢谢你的回复。我不确定是否要添加一个单独的MembershipStatus表,而这正是我所困惑的——是要使用单独的MembershipStatus表来维护状态并获得批准,还是只将其存储在MembershipStatus表中。如果我使用的是MembershipStatus表,那么我不会将status和approved_by列添加到MembershipStatus表中。另外,感谢您关于使用GroupAdmin类型表的建议。我在发帖后马上想到了这个问题。:)