sql - 数据库关系帮助(具有不同类型和组的用户)
问题描述
例如,如果我们有一个关于啤酒的网站。
- 我们会有
Users
谁可能是也可能不是Brewers
。 Users
who areBrewers
也可能是 a 的一部分Brewery
。
当前设置:
// 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
我想听听关于这是否是应该使用的模式的反馈。我很想看到这个的替代品。
解决方案
摆脱Brewery.members
.
这是多余的,因为您已经有了Users.brewery
参考,并且您冒着数据不同步的风险。我的意思是,如果您找到Brewery.members
列表用户 1234,但该用户Users.brewery
引用了不同的啤酒厂,您怎么知道哪个是正确的成员?
关系数据库规范化的最大优势之一是每个事实只存储一次,因此它不可能不同步或与代表相同信息的其他数据不一致。
推荐阅读
- android - JetPack Jetifier 的 Android Crashlytics 问题
- python - 如何使用 pymongo 解析所有集合的数据
- ios - Stripe Radar 规则不适用于 Apple Pay 待授权
- msbuild - 全新安装时 GAC 缺少 netstandard.dll
- react-native-ios - 使用 iOS 模拟器,React Native 应用程序卡在空白屏幕上
- intellij-idea - IDEA编辑器中字符的宽度不一样
- http - netcat - 接收包含多个文件的多部分 TCP/HTTP 响应
- javascript - Window.top.opener is null/undefined in the child window opened from gmail in all browsers
- mysql - 在 Istio 中连接到 MySQL (AWS RDS)
- android - tensorflow-lite and nnapi hw acceleration for embedded linux