实现为具有不同类型数据字段的定制产品保存数据的应用程序的最佳方法是什么?
What is the best way to implement an application that saves data for customized products with different kinds of data fields?
假设我们有一个包含两个 tables Product
和 ProductField
的数据库。 Table ProductField
包含与 Product
table 中每个产品相关的几个字段。因此,对于一种产品,它的 ID 在 ProductField
中重复了几次。这是一个很好的模式,可以为每个产品保存多个不同的字段。
但是这个幼稚的解决方案有一个问题。例如在上图中,您可以看到产品字段有不同的类型,名称为字符串,价格字段为数值。因此,我们必须在应用程序的某处保存每个字段的类型。我认为将这种类型保存在另一个 table 中是个好主意,如下所示:
这解决了未知类型的问题。但是仍然存在类型转换问题。因为我们还需要将第一个 table 字段值中的所有值都保存起来,这是一个字符串列。所以我们必须在我们的应用程序中将值转换为所需的类型。这是我们需要的代码:
// string fieldType retrieved from database
// string fieldValue retrieved from database
if (fieldType == "string")
{
// do something with fieldValue
}
else if (fieldType == "int")
{
// do something with int.Parse(fieldValue)
}
.
.
第三种解决方案是对每个字段类型使用一个 table。下图说明了我心中的解决方案。
如您所见,此解决方案的一个缺点是您无法直接创建新的字段类型。如果要添加新的字段类型,您必须在 运行 时间内创建新的 table 并更改数据库架构。
但此解决方案的一个优点是您无需将字符串值转换为 int 或 double 或保存值的实际格式。
你觉得第三种方案怎么样?有道理吗?
假设我们有一个包含两个 tables Product
和 ProductField
的数据库。 Table ProductField
包含与 Product
table 中每个产品相关的几个字段。因此,对于一种产品,它的 ID 在 ProductField
中重复了几次。这是一个很好的模式,可以为每个产品保存多个不同的字段。
但是这个幼稚的解决方案有一个问题。例如在上图中,您可以看到产品字段有不同的类型,名称为字符串,价格字段为数值。因此,我们必须在应用程序的某处保存每个字段的类型。我认为将这种类型保存在另一个 table 中是个好主意,如下所示:
这解决了未知类型的问题。但是仍然存在类型转换问题。因为我们还需要将第一个 table 字段值中的所有值都保存起来,这是一个字符串列。所以我们必须在我们的应用程序中将值转换为所需的类型。这是我们需要的代码:
// string fieldType retrieved from database
// string fieldValue retrieved from database
if (fieldType == "string")
{
// do something with fieldValue
}
else if (fieldType == "int")
{
// do something with int.Parse(fieldValue)
}
.
.
第三种解决方案是对每个字段类型使用一个 table。下图说明了我心中的解决方案。
如您所见,此解决方案的一个缺点是您无法直接创建新的字段类型。如果要添加新的字段类型,您必须在 运行 时间内创建新的 table 并更改数据库架构。 但此解决方案的一个优点是您无需将字符串值转换为 int 或 double 或保存值的实际格式。 你觉得第三种方案怎么样?有道理吗?