【发布时间】:2011-12-29 23:23:16
【问题描述】:
我正在尝试按如下方式创建用户、组和成员表。一个用户可能属于一个或多个组,一个组可能有一个或多个用户。 User 和 Group 表之间的多对多关系是使用 Membership 表来维护的。我想维护会员状态(已批准/待定/其他??)和会员批准者信息。成员资格批准者将是管理员组中的用户之一。以下是我脑海中的粗略模式。我是数据库建模的新手,希望获得有关以下实施的一些反馈。特别是我不确定 Membership 表是否应该使用 'user_id' FK 有 'approved_by' 列,还是应该创建一个单独的表来维护 MembershipStatus(id, members_id, status,approved_by)?我猜这里有一个单独的表 MembershipStatus 更合适,但不确定。另外,我打算在这个应用程序中使用 ActiveRecord 作为 ORM。我感谢任何实施此设计/架构的 cmets 或建议。
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
-谢谢
【问题讨论】:
-
为什么 ID 和 userID 以及 ID 和 GroupID 我看不出在每个表中保留 2 组 ID 的原因。您将 ID 字段隐藏起来,并向用户公开 Name 字段..
-
如果用户离开会发生什么,您想保留会员历史或他们曾经是会员的事实吗?我想我会保留会员身份,使用 FK 到用户并将会员状态命名为 MembershipJRNL 以跟踪历史。我还会考虑一张包含所有不同类型的会员资格的表格。最后,如果不记录安全性,那么显示记录不再处于活动状态的“Deleted_at”怎么样?
-
userID 和 groupID 与 Linux 系统的用户和组数据库相关,因此我将其与数据库表中的 ID(主键)保持不同,这些表通常是连续递增的。系统用户/组 ID 可能没有相同的约定,因此我将它们分开。感谢您对审计这些账户的建议。我没有想过。我会考虑您和 Randy 的建议,稍后再重新发布我的架构。谢谢你们的cmets。
标签: database ruby-on-rails-3 postgresql activerecord schema