gpt4 book ai didi

database-design - 支持应用程序中自定义字段的设计模式有哪些?

转载 作者:行者123 更新时间:2023-12-03 05:24:26 25 4
gpt4 key购买 nike

我们开发了一个商业应用程序。我们的客户正在寻求自定义字段支持。例如,他们想要向客户表单添加一个字段。

存储字段值和字段元数据的已知设计模式是什么?

我现在看到这些选项:

选项 1:将 varchar 类型的 Field1、Field2、Field3、Field4 列添加到我的 Customer 表中。

选项 2:在客户表中添加一个 XML 类型的列,并将自定义字段的值存储在 xml 中。

选项 3:添加包含 varchar 类型列的 CustomerCustomFieldValue 表,并在该列中存储值。该表还有一个 CustomerID、一个 CustomFieldID。

CustomerID,  CustomFieldID, Value
10001, 1001, '02/12/2009 8:00 AM'
10001, 1002, '18.26'
10002, 1001, '01/12/2009 8:00 AM'
10002, 1002, '50.26'

CustomFieldID 将是来自另一个名为 CustomField 的表的 ID,其中包含以下列:CustomFieldID、FieldName、FieldValueTypeID。

选项 4:添加 CustomerCustomFieldValue 表,其中包含每种可能值类型的列,并将值存储在右列中。与 #3 类似,但字段值使用强类型列存储。

CustomerID,  CustomFieldID, DateValue,           StringValue,       NumericValue                 
10001, 1001, 02/12/2009 8:00 AM, null, null
10001, 1002, null, null, 18.26
10002, 1001, 01/12/2009 8:00 AM, null, null
10002, 1002, null, null, 50.26

选项 5:选项 3 和 4 使用特定于单个概念(客户)的表格。我们的客户也要求其他形式的自定义字段。我们是否应该拥有一个全系统的自定义现场存储系统?因此,我们不会拥有多个表(例如 CustomerCustomFieldValue、EmployeeCustomFieldValue、InvoiceCustomFieldValue),而是拥有一个名为 CustomFieldValue 的表?虽然对我来说看起来更优雅,但这不会造成性能瓶颈吗?

您使用过这些方法吗?你成功了吗?您会选择什么方法?您知道我应该考虑的其他方法吗?

此外,我的客户希望自定义字段能够引用其他表中的数据。例如,客户可能希望向客户添加“最喜欢的付款方式”字段。付款方式在系统的其他地方定义。这就带来了“外键”的主题。我是否应该尝试创建约束以确保自定义字段表中存储的值是有效值?

最佳答案

我确实同意下面的发帖者的观点,即选项 3、4 或 5 最有可能是合适的。但是,您建议的每个实现方案都有其优点和成本。我建议根据您的具体要求进行选择。例如:

  1. 选项 1 的优点:实现速度快。允许对自定义字段进行数据库操作(搜索、排序。)
    选项 1 缺点:自定义字段是通用的,因此没有强类型字段。数据库表效率低下,在大小方面有许多永远不会使用的无关字段。需要预计允许的自定义字段数量。
  2. 选项 2 的优点:实现速度快。灵活,允许任意数量和类型的自定义字段。
    选项 2 缺点:无法对自定义字段执行数据库操作。如果您需要做的只是稍后显示自定义字段,或者仅针对每个客户对数据进行少量操作,那么这是最好的选择。
  3. 选项 3 的优点:既灵活又高效。可以执行数据库操作,但数据会在一定程度上标准化以减少浪费的空间。我同意未知(谷歌)的建议,即您添加一个可用于指定类型或源信息的附加列。选项 3 缺点:开发时间和查询复杂性略有增加,但实际上并没有太多缺点。
  4. 选项 4 与选项 3 相同,只是您的类型化数据可以在数据库级别进行操作。选项 3 中向链接表添加类型信息允许您在应用程序级别执行更多操作,但数据库将无法进行比较或排序等操作。 3 和 4 之间的选择取决于此要求。
  5. 选项 5 与 3 或 4 相同,但具有更大的灵 active ,可以将该解决方案应用于许多不同的表。在这种情况下,代价是该表的大小将变得更大。如果您执行许多昂贵的连接操作来访问自定义字段,则此解决方案可能无法很好地扩展。

附注如下所述,术语“设计模式”通常指面向对象的编程。您正在寻找数据库设计问题的解决方案,这意味着大多数有关设计模式的建议将不适用。

关于database-design - 支持应用程序中自定义字段的设计模式有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1126783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com