在数据库中进行灵活列的正确方法是什么?

时间:2010-04-07 19:17:36

标签: mysql database database-design

我将列存储在数据库中,用户可以使用假列添加和删除列。如何有效地实现这一目标?

3 个答案:

答案 0 :(得分:6)

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

这可以使用

之类的东西来完成
TableAttribute
    AttributeID
    AttributeType
    AttributeValue

垂直应用程序主要用于用户可以创建自己的自定义表单和字段的应用程序(如果我正确地回忆起devexpress表单布局允许您创建自定义布局)。 主要用于CRM应用程序,它易于修改生产,易于维护,但一旦数据集变得非常大,就会大大降低SQL性能。

修改

这取决于你想要走多远。您可以将其设置为每个表单/表,添加描述控件的实际控件(查找,组合,日期时间等等)位置的属性,允许值(min / max / allow null)。 / p>

这可能会成为一项非常繁琐的任务,但很大程度上取决于您的实际需求。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

其他人采用的方法是使用一个包含用户定义列的表,并为它们提供一组可定义的列。这样可以更好地实现性能,但更多地限制了它们可以定义的新列的数量。

在任何情况下,您都应严格限制谁可以仅为系统管理员(可以在客户端级别)定义其他列。在设计阶段与用户进行实际交谈并了解他们需要什么是一个更好的主意。您会发现,如果您实际与他们交谈(并且不仅仅是管理人员,也可以是组织的所有级别的用户),您可以正确地设计一个具有90%以上客户需求的系统。

我知道在今天的世界中,通过说我们正在灵活地设计来摆脱设计的责任是很常见的,但是我必须使用并为这些系统中的许多系统提供dba支持,并且他们尝试制作的设备越灵活设计,用户使用起来越困难,用户越讨厌系统。