2010-04-07 62 views
2

Im将数据列存储在数据库中,用户可以使用虚列来添加和删除列。我如何有效地实现这一点?在数据库中做灵活列的正确方法是什么?

+0

这真的是你想要的吗?我想有些情况下,这是适当的,但我会认为,如果这是最好的解决方案,也许sql数据库不是最好的平台。你能澄清需求吗? – MJB 2010-04-07 19:27:38

+0

还有什么替代方法?实施CMS/CRUD应用程序,并且需要稍微扩展 – Timmy 2010-04-07 19:32:47

回答

6

最好的方法是垂直实现数据结构,而不是普通的水平。

这可以使用类似

TableAttribute 
    AttributeID 
    AttributeType 
    AttributeValue 

的垂直此应用程序中,用户可以创建自己的自定义表单和字段(如果我还记得corretly的DevExpress的形式布局可以让你的应用程序主要是用来做创建自定义布局)。 主要用于CRM应用程序,这很容易修改生产内容,并且易于维护,但一旦数据集变得非常大,可能会大大降低SQL性能。

编辑:

这将取决于你想多远,走了。你可以设置它为每个表格/表格,添加描述控件的实际控件(查找,组合,日期时间等)位置的属性,允许的值(最小/最大/允许为空)。

这可能会变成一项非常繁琐的任务,但会极大地取决于您的实际需求。

+2

我确实鼓励使用downvoting并附带评论X-) – 2010-04-07 19:21:38

+0

有关这种野外结构的示例,请参阅Trac的“ticket_custom”表。 – jemfinch 2010-04-07 19:30:45

+1

我在想这个,我以后会如何缩放? – Timmy 2010-04-07 19:33:19

1

我想你可以允许在用户权限级别(在适当的表上授予ALTER特权),然后限制可以使用表示层添加/删除哪些类型的数据。

但为什么要添加列?为什么不是一个链接表?

1

允许用户定义列通常是一个糟糕的选择,因为他们不知道他们在做什么或如何正确地将其与其他数据关联。有时候人们会使用EAV方法来让它们添加尽可能多的列,但这很快就会失去控制,并导致性能问题和查询数据的困难。

其他人采用的方法是有一个用户定义列的表,并给他们一个他们可以定义的列数。这种方法在性能方面效果更好,但更多地限制了他们可以定义多少个新列的过程。

无论如何,您应该严格限制哪些人可以将附加列仅限定给系统管理员(可以位于客户端级别)。在设计阶段与用户进行实际交谈并了解他们的需求是一个更好的主意。你会发现,如果你实际与他们谈话(而不仅仅是管理人员,或组织内各级用户),你可以正确设计一个满足客户需求90%以上的系统。

我知道在今天的世界里,我们通过说我们让事情变得灵活来摆脱我们的设计责任是很常见的,但是我必须为这些系统中的许多系统使用和提供dba支持,并且他们尝试更灵活做出设计,用户使用起来就越困难,用户越是厌恶系统。

+0

谢谢,但需要此功能。只需要对假列进行排序。 – Timmy 2010-04-09 22:22:45

相关问题