我正在尝试为我的系统中的特定功能设计一个设计(它是基于云的服务的一部分)
基本上,我希望用户能够为与系统集成的简单CRM入口/检索系统创建自己的伪造的''表'。
所以我有2个问题我需要帮助
我想知道如何存储数据,我想到了两种布局
cms_item_text - [id, heaqderID, data (text)]
cms_item_int - [id, headerID, data (int)]
cms_item_double - [id, headerID, data (double)]
[id, headerID, data (text)]
我会(使用
MySQL cast()函数在从文本转换为整数/双精度时
做订单,例如order by cast(data as signed integer)
)现在检索数据是另一回事。由于它通常在表格视图中,从中读取的最佳方式是什么?我已经想到了这个 -
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")
最佳设计路径是什么?
答案 0 :(得分:1)
我的应用程序设计遇到了类似的问题。基本上我必须允许用户在数据库中定义'tables',包括指定数据类型。
我最终采用了第一种方法,即我有一个包含多个字段和不同类型的表,用户可以定义。
虽然我最终得到了所有工作但它并非一帆风顺。查询变得非常复杂,我不得不在我的应用程序中构建SQL查询时使用动态SQL。
我的踢球以及为什么我选择在我的应用程序中实现强类型数据字段(而不是将所有内容存储在文本字段中)是执行SQL函数的能力(AVG
,MAX
, MIN
等)数字数据类型。
所以我可以说,无论你选择哪种方式,都会有一些易于实现和编码的东西,以及其他难以实现的东西。如果您希望提取数据,并使用SQL函数或代码对数据进行CAST,根据应用程序的大小,在存储和检索数据时可能会进行大量不必要的验证检查。
我建议您真正考虑用户对数据库中数据所需的功能,这是您需要彻底调查的决定,并且将取决于您的应用程序及其预期用途。
更新
您可能还需要考虑表格中的数据量。我注意到您将使用ORDER BY
函数执行CAST()
。请注意,这样做效率很低,可能会导致查询速度变慢。