如何存储可替代数据?

时间:2010-01-28 14:56:14

标签: .net sql-server

我正在编写一个.net应用程序,它正在获取表单信息以进行一些汽车贷款资格预审计算,并将其存储在数据库中。问题是每个字段都应该允许用户在其中键入任何类型的字符串数据并将其保存到数据库中。

大多数字段需要转换为十进制或整数值才能进行任何计算,所以最好是忽略数据类型并使用数据库中的字符串吗? 我没有测试过这种方法,但我希望用这种方法很难找到并正确排序数据,因为每个东西都是一个字符串,需要转换为真实数据类型才能进行查询。

我考虑过的另一个选择是每个字段有两列用于保存字符串值,另一列用于保存实际解析的值类型。这听起来有些难以维护。

最后,我考虑过存储一个额外的列或表,它只是一个名称值对,用于放置该记录的所有不可解析的数据。我认为创建业务对象可能非常困难。

您如何处理此类问题?

3 个答案:

答案 0 :(得分:1)

唯一明智的清理数据的方式是输入,当有知情权的人确实存在时。

所以,在您的网络表单中:

  1. 使用javascript阻止输入无效字符。
  2. 在将字段提交到服务器之前使用javascript验证字段,然后显示有关哪些字段需要更正以及如何更正的说明。
  3. 在服务器上,检查所有字段的有效性,并重新显示网络表单,并注明需要更正的字段和方式。
  4. 3号很重要,因为如果禁用了javascript(或有人试图破解表单提交),表单和验证仍然可以正常工作。

    如果您让人们输入错误的数据并尝试在后端解析它,我保证您和您的系统会受到影响。 (注意这与错误不一样。坏意味着它甚至不符合字段的基本要求,例如数字字段中的文本,或负收入,或者完全由空格组成的名称。)

答案 1 :(得分:0)

我认为你建议在每个领域使用两列是最好的方法。毕竟这是语义上发生的事情。

当用户输入金额时,您希望存储用户输入的内容和实际金额,因此您需要两个字段。

创建应用程序时,请确保将所有数据访问组合在一起。通过这种方式,您可以使此解决方案易于维护。

答案 2 :(得分:0)

我猜你需要存储用户键入的内容,以便正确记录用户键入的内容。所以,每个字段的一个字符串称为“what_the_user_typed”。这可能会转化为表格中的很多列,但是到底是什么。接下来,您可以(或者您想)从该字符串中解析哪些有用的数据?我猜每个字符串有一个值。例如,如果您有一个标记为“汽车年龄”的字段,那么您可能希望从字符串中解析'age_of_car'或甚至'year_of_first_registration';所以这是该表的另一列。等等。