数据库设计:新表与新列

时间:2012-05-25 12:36:49

标签: sql database

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

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

编辑(认为这太有限了)

第一个表是页面浏览量记录(目前有200万条记录) - ID - IP地址 - 观看次数 - created_at时间戳 - 日期

对于每个IP地址,每天都会创建一条记录 - 并且连续的综合浏览量会添加到每天的时间视图中

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

并非每次访问都会有这些信息。 我会假设大约10%的行将拥有数据(因为它通常仅归因于第一次访问)

数据的主要用途是归因于人们来自哪里。这可能会更频繁地使用(这似乎适合单个表)

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

2 个答案:

答案 0 :(得分:6)

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

如果属性/列依赖于整个主键而没有其他内容,则它属于表。

如果它取决于主键以外的其他内容,则它属于其他地方,并且它所属的表应该与当前表有关系。

例如,您的名字取决于您的SSN,因此,如果SSN是主键,您的名字将属于该表。您的汽车或电话号码完全取决于您的SSN(因为您可能有多个汽车或电话,因此它会放在另一个表格中(您的主要电话)数字可以放在第一个表格中。)

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

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

答案 1 :(得分:1)

如果大多数列都是数据类型varchar,那么方法就可以了。

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

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

Refer to know more about pros and cons of SPARSE Column