我需要在数据库中实现自定义字段,以便每个用户都可以将他想要的任何字段添加到他的表单/实体中。

用户应该能够通过任何自定义字段过滤或/和排序他的数据。

我想使用MySQL,因为其余数据非常适合SQL。因此,除非您有个好主意,否则SQL将比NoSQL更受青睐。

我们考虑了几种解决方案:


JSON字段-非常适合动态架构。可以过滤和排序。问题在于,它比常规列要慢。
动态索引可以解决这个问题,但是动态添加索引太冒险了。
键值表-一种简单的解决方案,但速度却很慢。您无法正确索引它,查询也很糟糕。
静态占位符列-创建N列,并保存每个字段与其占位符的映射。 -就性能而言,这是一个很好的解决方案,但它使数据库不可读并且列数有限。


是否有任何想法如何改进任何解决方案或对新解决方案有任何想法?

最佳答案

正如许多评论者所说,对这个问题没有简单的答案。根据您愿意做出的取舍,我认为JSON解决方案是最整洁的-它对MySQL来说是“本机”,因此最容易解释和理解。

但是,假设您写的是仅在设置时指定了列,而技术熟练的人当然可以在设置过程中包括一个“ alter table”语句来添加新列。然后,您的数据库访问代码和所有相关的视图逻辑也需要可配置。这绝对是不平凡的。

但是...这是一个行之有效的解决方案。例如,Magento和Drupal拥有用于将属性添加到业务实体的管理屏幕,这又将列添加到关系数据库。

关于mysql - 如何在数据库中实现自定义字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48745714/

10-11 02:46
查看更多