数据建模。拆分成单独的表或使用基于角色的授权?

Data modeling. To split into separate tables or use role based authorization?

我正在尝试在开始之前为新应用程序尽可能多地建模数据。该应用程序将有 Users & Spaces。 Spaces 将有许多管理员级别,但也会有非管理员成员。 Space 将通过 space_roles/space_admins 加入 table 关联管理员(名称取决于我试图做出的设计决定)。我正在使用角色模型来创建 Space 和管理员之间的关联。这意味着 space_roles table 将是与 user_id, space_id and role_id 列的三向连接。

我计划最终围绕 Space 构建一堆成员可以访问的工具。这些可能不一定限于某个 Space 的成员。最有可能的情况是,一个 Space 的成员可以使用 Space 作为范围与另一个 Space 的成员跨组织边界进行交互(例如,某项运动的粉丝团队可以加入另一个运动队墙上的讨论,其中运动队是 Space 的类比)。

我的问题是我应该创建另一个名为 'member' 的角色,还是应该将成员分解为另一个模型(成员?)并通过 space_members 建立关联?请尽可能详细地解释您的建议advantages/disadvantages。

如果您的 Admin 用户是您的 Users 的子集,并且用户有可能成为或不再是管理员,则将他们保留在同一个 table 中。

如果您的用户(管理员或非管理员)可以参与您的多个空间,您可能需要一个用户 table 和一个单独的 users_spaces 加入 table。 table可能有这个布局。

    user_id       part of the primary key
    space_id      the rest of the primary key
    role          1 = contributor to the space, 2=member, 3=admin 4=owner etc

如果用户和管理员是完全不同的一组人,则使用两个 table 并将它们分开。比如你做医疗保健,护士和病人,你肯定会把他们分开,因为他们受不同的保密规则约束。