【发布时间】:2021-04-28 17:56:50
【问题描述】:
假设我正在构建一个包含群组和房间的聊天。我需要为它创建关系数据库方案。
- 每个组可以有多个房间。
- 而且每组总是只有 1 个主房间(这也是与其他房间相同的房间)
- 房间已经预建(不管它是否是主房间)结构并且不能被复制。比如它的外键、描述、通知设置等。
因此,由于它是一对多关系,因此以下数据库模式可以代表此模型:
,-----------------.
|Group |
|-----------------|
|*id: pk |
|*name: string |
|*main_room_id: fk|
`-----------------'
↑ ᗐ
ᗑ ↓
,-------------.
|Room |
|-------------|
|*id: |
|*name: string|
|*notif: bool |
|*group_id: fk|
`-------------'
但我想在这个方案中避免循环引用。我可以通过在表示这是主房间的房间中设置布尔字段来做到这一点:
,-------------.
|Group |
|-------------|
|*id: pk |
|*name: string|
`-------------'
↑
ᗑ
,----------------.
|Room |
|----------------|
|*id: |
|*name: string |
|*notif: bool |
|*group_id: fk |
|*is_main: bool |
`----------------'
但是在使用这个方案时数据库没有被规范化。主房间is_main布尔字段依赖于其他房间is_main字段。此外,应创建更复杂的约束以支持数据一致性。
什么是适合这个问题的数据库架构?
【问题讨论】:
标签: database database-design schema relational-database