如果这是个愚蠢的问题,请提前道歉。
背景:我是一名实习学生,我的任务是在公司客户管理系统中增加一个新的功能。基本上,这涉及到“清除”订阅,他们希望从客户端管理系统中删除选定的订阅,但保留在数据库中进行记录。我们目前约有60万订阅。他们希望立即“清除”10,000份订阅,并在未来几个月内再清除30,000份,因此约占订阅表的6%。
我想知道的是,实现这一目标的最佳方式是什么。我想出了两个选择;
( a)向数据库中添加一个新表,将“清除”订阅存储为3列: purgedId、subscriptionId (引用订阅的fk )和purgedDate。然后,在引用订阅表的任何sql中,左侧加入已清除的表,然后使用"where purgedId = null“。
( b)在订阅表中添加一个新列来存储purgedDate,并在我的所有订阅sql中添加"where purgedDate = null“。
选项a)似乎是一种浪费,添加一个全新的表来存储一个属性。选项b)似乎是一种浪费,添加一个仅由表中6%的行使用的列。
另外,左外加入是否是排除已清除订阅的最佳方式?
预先感谢您所能提供的任何帮助,如果这是一个基本问题,再次表示歉意。
发布于 2012-04-09 17:53:38
我采用备选方案3,这将减少总体工作的工作量:
dbo.Tablename_master的内容VIEW的dbo.Tablename,它包括:。
SELECT <fields>
FROM dbo.Tablename_Master
WHERE PrimaryKeyField NOT IN (SELECT PrimaryKeyField FROM PurgeTable)现在您不需要修改任何现有的代码,因为对原始表的所有引用都要经过视图。如果您有任何现有的约束,这将是复杂的,但它们应该很容易解决。
https://dba.stackexchange.com/questions/16253
复制相似问题