我正在尝试创建User,Group和Membership表,如下所示。用户可以属于一个或多个组,并且组可以具有一个或多个用户。使用Membership表维护User和Group表之间的多对多关系。我想保持会员身份(已批准/待定/某事 - 其他??)和会员批准人信息。成员资格审批者将是管理员组中的一个用户。以下是我脑海中的粗略架构。我是数据库建模的新手,希望得到一些关于以下实现的反馈。特别是我不确定Membership表是否应该使用'user_id'FK具有'approved_by'列,还是应该创建一个单独的表来维护MembershipStatus(id,membership_id,status,approved_by)?我猜有一个单独的表MembershipStatus在这里更合适但不确定。此外,我打算在此应用程序中使用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
-Thanks
答案 0 :(得分:2)
看起来很不错。
您在2个表格中显示approved_by。如果你保留MembershipStatus表,那么它应该属于哪里。另外 - 名称'approved_by'表示“已批准”的状态,可能存在也可能不存在。你可能想到另一个名字......
您还应该有一个表,可能确定哪些用户是哪些组的管理员。这样,您就可以为允许批准的人以及实际批准的人存储数据库端安全性。
另外,我不是在你正在展示的表中存储审计历史的忠实粉丝。使用内置审计的数据库,或将其拉出到另一个表以记录审计历史记录。
最后,id和userid似乎是多余的。使用userid。 (与其他表类似)