在设计数据库时,我经常遇到以下问题:
通常有一个相互关联的实体树,并且这种关系可以(并且确实可以)随时间而变化……然后,在我看来,我有一个设计来尝试解决这一点,并且这种变化就像这些不会修改初始数据库设计。
这是:
我没有像每个实体那样有一个表格并在它们之间建立联系,而是像这样:
[Feature] <-> [Type] <-> [Element] <-> [Value]
^ ^
|_________________________|
“ []”之间的所有内容都是关系数据库中的表。
通过这种方式,我可以将Element(主键:int id)与数据库的其余部分(动作,时间,动作属性,用户等)相关联。
元素(传统设计中某些实体的行,其次是TD)是一种类型(TD中的实体),并且具有某些属性(TD中的实体属性),并具有具体值(TD中的属性值)。
例如,通过这种方式,我可以将任何“实体”与系统其余部分的同一表相关联,例如“输入”,我通常在其中设置操作的user_id,时间和日期。
一个问题是我失去了主键和每个实体的相关性的好处,但是,在值表中设置索引时,对于数据库上的数据量不是很大,应该不会有较差的性能,不是吗?当然,值的类型将为varchar:-S以便存储“任何类型的数据”。
我相信NoSQL数据库可以通过其他方式解决类似的问题,但是,关系数据库中没有解决方案吗?我的意思是,我想使用关系数据库而不是NoSQL,因为项目和技术是固定的。
谢谢。