1

我正在尝试找出系统中特定功能的设计(它是基于云的服务的一部分)

本质上,我希望用户能够为与系统集成的简单 CRM 输入/检索系统创建自己的伪“表”。

所以我有两个问题需要帮助

  1. 我想知道如何存储数据,我想到了两种布局

    • 制作 3 个表格,例如存储textintegerdouble

    cms_item_text -[id, heaqderID, data (text)]

    cms_item_int -[id, headerID, data (int)]

    cms_item_double -[id, headerID, data (double)]

    • cms_item -[id, headerID, data (text)]我会(使用 MySQL cast()函数在执行订单时将文本转换为整数/双精度order by cast(data as signed integer)
  2. 现在数据的检索是另一回事。由于它通常在表格视图中,从中读取的最佳方法是什么?我是这样想的——

    SELECT barcode.data as barcode, price.data as price, notes.data as notes
    FROM cms_item barcode, cms_item price, cms_item notes
    WHERE (barcode.headerID = 1 and barcode.id = 1) and
          (price.id = 1 and price.headerID = 2) and
          (notes.id = 1 and notes.headerID = 3)
    

这样我就可以得到类似的结果

array("barcode" => "eg", "price" => "123", "notes" => "hello there")
array("barcode" => "no2", "price" => "456", "notes" => "yes")

最好的设计路径是什么?

4

1 回答 1

1

我的应用程序设计遇到了类似的问题。本质上,我必须允许用户在数据库中定义“表”,包括指定数据类型。

我最终采用了第一种方法,即我有一个包含多个字段和用户可以定义的不同类型的表。

虽然我最终得到了一切工作,但并非一帆风顺。查询变得相当复杂,我不得不大量使用动态 SQL 以及从我的应用程序中构建 SQL 查询。

对我来说最重要的一点以及为什么我选择在我的应用程序中实现强类型数据字段(而不是将所有内容存储在文本字段中)是能够对数字数据类型执行 SQL 函数( 、 等AVGMAXMIN

所以我只能说,无论你选择哪种方式,都会有一些容易实现和编码的东西,而另一些则很难。如果您希望提取数据,并通过使用 SQL 函数或在代码中 CAST 数据,则取决于您的应用程序的规模,在存储和检索数据时可能会有很多不必要的验证检查。

我建议您真正考虑您的用户对数据库中的数据需要什么功能,这是您需要彻底调查的决定,并且取决于您的应用程序及其预期用途。

更新

您可能还需要考虑表中的数据量。我注意到您将ORDER BY使用该CAST()功能。请注意,这是低效的,可能会导致查询缓慢。

于 2012-06-08T03:12:33.190 回答