Pet*_*aud 2 database-design relational
我一直在遇到这个设计问题,到目前为止我对我的解决方案不满意.问题是这样的:
我有两个或更多实体,比如People和Dogs,它们都与Notes表有关系,它存储消息字段和一些关于消息的元数据,例如作者.
1)第一种选择是不强制执行外键.这样我可以像fkId一样在fk字段中存储类似peopleId或dogId(无论它是什么)的FK.然后我将tableId存储在另一列中 - 可以希望从RDMS元数据中获取表id,但是你也可能有一个脏的hack并明确地创建一个表,你必须手动更新表.这真是草率,我只是提到它的完整性.
2)为每个需要它的表克隆Notes表,如PeopleNotes,DogNotes,CatNotes等.这会产生一个非常重要的规范化问题.
在这样的情况下,其他人做了什么?
如果这些是您的"模型"表:
dog Table:
id | name | ...
1 | Rex
2 | Fido
people Table:
id | name | ...
1 | Bob
2 | Alice
notes Table:
id | text | ...
1 | A nice dog.
2 | A bad dog.
3 | A nice person.
Run Code Online (Sandbox Code Playgroud)
您可以将关系保存在单独的表中:
dog_note Table:
dog_id | note_id
1 | 1
2 | 2
note_people Table:
person_id | note_id
1 | 3
2 | 3
Run Code Online (Sandbox Code Playgroud)
我通常坚持使用我的模型的字母顺序来命名关系表的约定.