5

目前有一个表..并且需要开始向它添加新的数据列。并非每条记录(即使在添加新数据列后继续使用新数据)都会有数据。所以我想知道这是否更适合新表,因为它实际上是某些数据行的扩展,并不适用于每一行。

换句话说,因为这些新数据元素会有很多未使用的列,所以这似乎更适合新表?

编辑(认为这太有限了)

第一张表是页面浏览量的记录(目前200万条记录)-id-IP地址-浏览次数-created_at时间戳-日期

对于每个 IP 地址,每天都会创建一个记录 - 连续的网页浏览量会添加到每天的时间浏览量中

附加字段将用于源点跟踪(即谷歌分析源/媒体/活动)

并非每次访问都会获得该信息。我会假设大约 10% 的行会有数据(因为它通常只在第一次访问时被归因)

数据的主要用途是确定人们来自哪里。这可能会被更频繁地使用(然后似乎适合单张桌子)

感谢反馈 - 如果需要可以添加更多

4

2 回答 2

10

基本规则是这个(从更严格的规范化规则简化而来)。

如果属性/列依赖于整个主键而不依赖于其他任何东西,则它属于表。

如果它依赖于主键以外的东西,或者除了主键之外,它属于其他地方,并且它所属的表应该与当前表有关系。

例如,您的姓名取决于您的 SSN,因此,如果 SSN 是主键,您的姓名将属于该表。您的汽车或电话号码并不完全取决于您的 SSN(因为您可能有不止一部汽车或电话,所以它会放在不同的表中(您的主要电话号码可能会放在第一个表中)。

如果您真的想了解数据库设计,请忘记select命令的语法并查看规范化。我对其他人的建议是,所有数据库模式都应该从 3NF 开始,并且只有在性能需要时才恢复。

然后,只有当您了解(并减轻)这样做所固有的问题时。

于 2012-05-25T12:46:35.983 回答
1

如果大多数列都是数据类型,varchar那么该方法很好。

因为varchar数据类型根据表格单元格中内容的大小占用表格中的空间。

如果使用 Sql server 2008,您可以将新列定义为 SPARSE。

参考了解更多关于 SPARSE Column 的优缺点

于 2012-05-25T12:43:37.993 回答