多个表之间共享的关系的最佳实践

Pet*_*aud 2 database-design relational

我一直在遇到这个设计问题,到目前为止我对我的解决方案不满意.问题是这样的:

我有两个或更多实体,比如People和Dogs,它们都与Notes表有关系,它存储消息字段和一些关于消息的元数据,例如作者.

1)第一种选择是不强制执行外键.这样我可以像fkId一样在fk字段中存储类似peopleId或dogId(无论它是什么)的FK.然后我将tableId存储在另一列中 - 可以希望从RDMS元数据中获取表id,但是你也可能有一个脏的hack并明确地创建一个表,你必须手动更新表.这真是草率,我只是提到它的完整性.

2)为每个需要它的表克隆Notes表,如PeopleNotes,DogNotes,CatNotes等.这会产生一个非常重要的规范化问题.

在这样的情况下,其他人做了什么?

jd.*_*jd. 6

如果这些是您的"模型"表:

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)

我通常坚持使用我的模型的字母顺序来命名关系表的约定.