目前有一个表..并且需要开始向其添加新数据列。 并非每条记录(甚至在添加新数据列后继续使用新数据)都会有数据。所以我想知道这是否更适合新表,因为它实际上是某些数据行的扩展,并不适用于每一行。
换句话说,由于这些新数据元素会有很多未使用的列,所以它似乎更适合新表?
编辑(认为这太有限了)
第一个表是页面浏览量记录(目前有200万条记录) - ID - IP地址 - 观看次数 - created_at时间戳 - 日期
对于每个IP地址,每天都会创建一条记录 - 并且连续的综合浏览量会添加到每天的时间视图中
其他字段将用于原点跟踪(即谷歌分析源/媒体/活动)
并非每次访问都会有这些信息。 我会假设大约10%的行将拥有数据(因为它通常仅归因于第一次访问)
数据的主要用途是归因于人们来自哪里。这可能会更频繁地使用(这似乎适合单个表)
感谢反馈 - 如果需要可以添加更多
答案 0 :(得分:6)
基本规则是这一点(从更严格的规范化规则简化而来)。
如果属性/列依赖于整个主键而没有其他内容,则它属于表。
如果它取决于主键以外的其他内容,则它属于其他地方,并且它所属的表应该与当前表有关系。
例如,您的名字取决于您的SSN,因此,如果SSN是主键,您的名字将属于该表。您的汽车或电话号码不完全取决于您的SSN(因为您可能有多个汽车或电话,因此它会放在另一个表格中(您的主要电话)数字可以放在第一个表格中。)
如果您真的想了解数据库设计,请忘记select
命令的语法,并查看规范化。我对其他人的建议是所有数据库模式应该从3NF开始,只有在性能需要时才会恢复。
然后,只有你了解(并减轻)这样做所固有的问题。
答案 1 :(得分:1)
如果大多数列都是数据类型varchar
,那么方法就可以了。
因为varchar
数据类型根据表格单元格中的内容大小占用表格中的空格。
如果使用Sql server 2008,则可以将新列定义为SPARSE。