首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新表或新列

新表或新列
EN

Database Administration用户
提问于 2012-04-09 17:01:17
回答 1查看 568关注 0票数 3

如果这是个愚蠢的问题,请提前道歉。

背景:我是一名实习学生,我的任务是在公司客户管理系统中增加一个新的功能。基本上,这涉及到“清除”订阅,他们希望从客户端管理系统中删除选定的订阅,但保留在数据库中进行记录。我们目前约有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%的行使用的列。

另外,左外加入是否是排除已清除订阅的最佳方式?

预先感谢您所能提供的任何帮助,如果这是一个基本问题,再次表示歉意。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-04-09 17:53:38

我采用备选方案3,这将减少总体工作的工作量:

  • 创建一个包含清除记录和日期列表的查找表,如第一个选项中所示。
  • 将当前表重命名为类似于dbo.Tablename_master的内容
  • 创建一个名为VIEWdbo.Tablename,它包括:

代码语言:javascript
复制
SELECT <fields>
FROM dbo.Tablename_Master
WHERE PrimaryKeyField NOT IN (SELECT PrimaryKeyField FROM PurgeTable)

现在您不需要修改任何现有的代码,因为对原始表的所有引用都要经过视图。如果您有任何现有的约束,这将是复杂的,但它们应该很容易解决。

票数 7
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/16253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档