【发布时间】: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