首页 > 解决方案 > 数据库关系帮助(具有不同类型和组的用户)

问题描述

例如,如果我们有一个关于啤酒的网站。

当前设置:

// made up shorthand TS like syntax to demonstrate
User {
    role: User | Moderator | Admin; // global site permissions
    type: User | Brewer; // did user register as a brewer?
    brewery: Brewery; // reference the Brewery if user is part of one
    breweryRole: Owner | Member; // reference the Brewery Role is user is part of one
}

Brewery {
    owner: User; // reference user who created the Brewery so they always have permissions
    members: [User]; // list of users who belong to this Brewery
}

本质上,我们有不同的用户以及用户可能属于的types外部用户。groups

我想听听关于这是否是应该使用的模式的反馈。我很想看到这个的替代品。

标签: sqldatabase-design

解决方案


摆脱Brewery.members.

这是多余的,因为您已经有了Users.brewery参考,并且您冒着数据不同步的风险。我的意思是,如果您找到Brewery.members列表用户 1234,但该用户Users.brewery引用了不同的啤酒厂,您怎么知道哪个是正确的成员?

关系数据库规范化的最大优势之一是每个事实只存储一次,因此它不可能不同步或与代表相同信息的其他数据不一致。


推荐阅读