database - 我应该将可选的记录属性放在单独的表中吗?

标签 database ms-access database-design ms-access-2007 normalization

我有一个包含大约 1,000 条记录的表。其中大约一半将使用一组包含某些特征的字段。大约有 10 个相关字段。另一半的记录不需要填写该信息。

此表是数据库的核心,将承担大部分操作。虽然只有大约 1,000 条记录,但并不多。

存储数据库的硬件又旧又慢(旋转硬盘驱动器而不是 SSD...)所以我希望有一个相当优化的结构来充分利用它。显然,仅由于空白字段而增加的数据库大小并不是主要问题,但如果它减慢了查询速度,那就不好了。

我想我应该描述一下设置。目前使用 Access 2007 客户端和 Access 后端,但后端将很快迁移到 SQL Server。目前后端位于主服务器机架上,但当移动到 SQL Server 时,它将拥有自己的旧服务器机架。

那么我应该单独建一个表来存储前面提到的一组特征,还是应该保持原样?

最佳答案

将可选字段放入单独的表然后使用联接的查询开销不会为大小或数据管理带来太多好处。特别是如果它像您的示例中那样是 1 对 1。对于大小,可选字段将为 NULL 不会对您产生太大影响。是的,75% 是一个很好的随机阈值,用于确定您何时应该开始将内容移出,但即便如此,您实际上并没有通过移出可选字段(如果它们是 1 对 1与记录一起,您将始终与主记录一起获取它)。

值得注意的是:对于大多数数据库,在单个查询中获取大行比几个小查询要好......以防您稍后有冲动在单独的查询中获取第二个表中的可选数据。不过在 Access 2007 中,这可能不太重要。

无论您是否将这些可选字段移出,请为您可能在 where/having/join< 中使用的那些字段添加索引.

关于database - 我应该将可选的记录属性放在单独的表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136375/

相关文章:

sql - H2 - 如何截断所有表?

database - Sequential Guid 相对于标准 Guid 有哪些性能改进?

database - SimpleDB 选择修改项

sql - 如何将这两个表连接到同一个 Sql 结果中

c# - 使用 OleDb 关闭与 Access DB 的连接

vba - 如果表存在,如何删除?

php - 有什么方法可以在数据库中存储有关匿名/访客用户的信息?

mysql - 数据库设计: multiple values for single field in a record

sql - MS Access 2007中SQL语句的查询表达式中的语法错误(逗号)

database-design - 对于数据库分析,哪个比另一个更好 : Class diagram or ERD?