我需要在我的数据库中实现自定义字段,以便每个用户都可以将他想要的任何字段添加到他的表单/实体中。
用户应该能够通过任何自定义字段对数据进行过滤或/和排序。
我想使用MySQL,因为我的其余数据非常适合SQL。因此,除非你有一个好主意,否则SQL将优于NoSQL。
我们考虑过几个解决方案:
JSON字段 - 非常适合动态架构。可以过滤和排序。问题是它比常规列慢。 动态索引可以解决这个问题,但动态添加索引风险太大。
键值表 - 一个简单的解决方案,但速度非常慢。您无法正确编制索引,查询也很糟糕。
静态占位符列 - 创建N列并将每个字段的地图保存到其占位符。 - 在性能方面是一个很好的解决方案,但它使数据库不可读,并且列数有限。
如何改进任何解决方案或任何新解决方案的想法?
答案 0 :(得分:1)
正如许多评论者所说,这个问题没有简单的答案。根据您愿意做出的权衡,我认为JSON解决方案是最好的 - 它本地"到MySQL,最容易解释和理解。
但是,考虑到你写的只是在设置时指定列,技术熟练的人,你当然可以让设置过程包括一个" alter table"用于添加新列的语句。您的数据库访问代码和所有相关的视图逻辑也需要配置;它绝对不是一件容易的事。
然而......这是一个经过验证的解决方案。例如,Magento和Drupal具有用于向业务实体添加属性的管理屏幕,后者又将列添加到关系数据库。