Im将数据列存储在数据库中,用户可以使用虚列来添加和删除列。我如何有效地实现这一点?在数据库中做灵活列的正确方法是什么?
回答
最好的方法是垂直实现数据结构,而不是普通的水平。
这可以使用类似
TableAttribute
AttributeID
AttributeType
AttributeValue
的垂直此应用程序中,用户可以创建自己的自定义表单和字段(如果我还记得corretly的DevExpress的形式布局可以让你的应用程序主要是用来做创建自定义布局)。 主要用于CRM应用程序,这很容易修改生产内容,并且易于维护,但一旦数据集变得非常大,可能会大大降低SQL性能。
编辑:
这将取决于你想多远,走了。你可以设置它为每个表格/表格,添加描述控件的实际控件(查找,组合,日期时间等)位置的属性,允许的值(最小/最大/允许为空)。
这可能会变成一项非常繁琐的任务,但会极大地取决于您的实际需求。
我想你可以允许在用户权限级别(在适当的表上授予ALTER特权),然后限制可以使用表示层添加/删除哪些类型的数据。
但为什么要添加列?为什么不是一个链接表?
允许用户定义列通常是一个糟糕的选择,因为他们不知道他们在做什么或如何正确地将其与其他数据关联。有时候人们会使用EAV方法来让它们添加尽可能多的列,但这很快就会失去控制,并导致性能问题和查询数据的困难。
其他人采用的方法是有一个用户定义列的表,并给他们一个他们可以定义的列数。这种方法在性能方面效果更好,但更多地限制了他们可以定义多少个新列的过程。
无论如何,您应该严格限制哪些人可以将附加列仅限定给系统管理员(可以位于客户端级别)。在设计阶段与用户进行实际交谈并了解他们的需求是一个更好的主意。你会发现,如果你实际与他们谈话(而不仅仅是管理人员,或组织内各级用户),你可以正确设计一个满足客户需求90%以上的系统。
我知道在今天的世界里,我们通过说我们让事情变得灵活来摆脱我们的设计责任是很常见的,但是我必须为这些系统中的许多系统使用和提供dba支持,并且他们尝试更灵活做出设计,用户使用起来就越困难,用户越是厌恶系统。
谢谢,但需要此功能。只需要对假列进行排序。 – Timmy 2010-04-09 22:22:45
- 1. 在Openshift中连接数据库的正确方法是什么?
- 2. 在mojoportal中传输数据库的正确方法是什么?
- 3. 这是做什么的正确方法?
- 4. 什么是从数据库中分离数据列的正确方法
- 5. 什么是在关系数据库中存储'元数据'的正确方法?
- 6. 什么是备份/恢复mnesia数据库的正确方法?
- 7. 更改数据库名称的正确方法是什么?
- 8. 什么是处理数据库的正确方法?
- 9. 使用sqlsrv切换数据库的正确方法是什么?
- 10. 在我的数据库中存储随机数的正确方法是什么?
- 11. 在C++中做事件处理的正确方法是什么?
- 12. 在AbpAuditLog中更改列参数的正确方法是什么?
- 13. 在表格中保存数据的正确方法是什么
- 14. 什么是在DOM中存储数据的正确方法
- 15. 在mysql数据库中存储友谊关联的正确方法是什么
- 16. 什么是在数据库中保存php代码的正确方法
- 17. 在数据库中记录成员生日的正确方法是什么?
- 18. 将Vue状态数据绑定到数据库的“正确”方法是什么?
- 19. 将大量数据导入Firebase数据库的正确方法是什么?
- 20. 什么是使用.NET核心修复数据库数据的正确方法?
- 21. reactjs中的正确方法是什么?
- 22. 在HTML中使用精灵图像的正确方法是什么?
- 23. 在表格中设置列宽的正确方法是什么?
- 24. 在数据库中存储大型列表的正确方法
- 25. mysqldump函数导入mysql数据库的正确方法是什么?
- 26. 在python中派生类方法的正确方法是什么?
- 27. 获取数据库实例的正确语法是什么?
- 28. 做REST网址的正确方法是什么?
- 29. 什么是做这个变量覆盖的正确方法?
- 30. 做什么是GameCenter身份验证的正确方法?
这真的是你想要的吗?我想有些情况下,这是适当的,但我会认为,如果这是最好的解决方案,也许sql数据库不是最好的平台。你能澄清需求吗? – MJB 2010-04-07 19:27:38
还有什么替代方法?实施CMS/CRUD应用程序,并且需要稍微扩展 – Timmy 2010-04-07 19:32:47