我对数据库设计有一些疑问。
有这个名字吗?
这是好习惯吗?
有性能方面的考虑吗?
我有一个用于存储关系的通用表结构。
最近,我重构了一些东西来使用这种通用结构,而不是直接使用Fk列,但是现在我不确定这是否真的是最好的主意。
原始架构:
+ ------------------ + + --------------------- + + ------ ---------------- +
| 书本 | 注意事项 | MetaParent |
| ------------------ | | --------------------- | | ---------------------- |
| ID | | ID | | ID |
| NoteId | | MetaParentId :(空)| | MetaTableId |
| + ------- + + ---- + KeyValue |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+ ------------------ + + --------------------- + + ------ ---------------- +
新架构
+ ------------------ + + --------------------- + + ------ ---------------- +
| 书本 | 注意事项 | MetaParent |
| ------------------ | | --------------------- | | ---------------------- |
| ID | | ID | | ID |
| | | MetaParentId :(空)| | MetaTableId |
| + + + ---- + KeyValue |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+ ------------------ + + --------------------- + + ------ ---------------- +
因此,基本上,与在Book和Note之间没有直接的Fk关系相比,我们通过使用MetaTableId / KeyValue列的MetaParent表具有间接关系。
当前,MetaParent表具有约50万条记录,并且一切运行正常。但是我们每天晚上都会重建索引。
我担心的是,现在Book和Note之间的关系并不明显。您必须知道一个存在并使用MetaParent表。
在性能方面,我不确定在什么时候遇到针对MetaTableId / KeyValue的连接运行太慢的问题。似乎您添加到该表中的越多,查询速度就越慢。
幕布斯6054654
相关分类