【问题标题】:Will multiple SQL records require more memory than multiple fields?多条 SQL 记录会比多条字段需要更多的内存吗?
【发布时间】:2012-12-01 05:12:27
【问题描述】:

情况:用于 HTML 表单提交的 SQL 数据存储。

场景 1: 1 个表格,每个表格字段作为表格字段(表格)。

场景 2: 2张桌子 - 第一个带有 id 和时间戳的表(form_submission)。 带有 id、fk 到 form_submission、field_title、field_value (form_field) 的第二张表。 仅当 HTML 字段有值时才插入数据。

哪个需要更多内存?

在场景 1 中...每次提交只有 1 条记录,但每条记录会有多个空值。

在场景 2... form_field 表中的 5+ 条记录以及从 form_submission 表中提交的时间。

旁注:我们每年只收到一万份表单提交。

【问题讨论】:

  • 假设大多数用户填写了大部分字段,那么是的,更规范化的表单将占用更多内存(特别是因为时间戳 - 我真的希望是 DATETIME/ DATETIME2,无论如何,这是一个可怕的名字)。就个人而言,对于 HTML 提交表单(没有“子”数据),我可能会为表单制作一个表格; EAV 表可能更难查询。但是,如果您要构建更复杂的系统(例如客户管理),则需要以不同的方式拆分。
  • 感谢 Clockwork... 是的,它是 DATETIME 类型。如果可以的话,我会将您的评论标记为已回答。
  • 根据您的建议,我将“时间戳”更改为“已提交”。谢谢
  • 是的,submitted 是一个更好的名称,尽管它暗示布尔或类似状态(已提交/待处理等)。也许submittedAt?始终尝试按使用而不是类型来命名变量(尽管在某些域中包含“类型”可能会很尴尬,例如“soldOnBusinessDay” -这与日历日完全不同......)

标签: sql sql-server-2008-r2 normalization forms


【解决方案1】:

假设大多数用户填写了大部分字段,那么是的,更规范化的表单将占用更多空间/内存(特别是因为时间戳 - 我真的希望它是 DATETIME/DATETIME2 ,无论如何,这是一个可怕的名字)。

就个人而言,对于 HTML 提交表单(没有“子”数据),我可能会为表单创建一个表格; EAV 表可能更难查询。非必需列可以简单地默认为空。但是,如果您要构建更复杂的系统(例如客户管理),则需要以不同的方式拆分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多