- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们目前正在开发一个网络应用程序,其中一项功能是由用户创建事件。用户或管理员稍后可以删除这些事件。然而,客户端要求事件不是真正从数据库中物理删除,而只是标记为已删除。用户应该只能看到未删除的事件,但管理员也应该能够浏览已删除的事件。这就是所有真正的功能。
现在我建议我们应该再添加一个名为“status”的额外列,该列将具有两个有效值:ACTIVE 和 DELETED。这样我们就可以区分正常(事件)和删除的事件,并创建非常简单的查询(SELECT * FROM EVENTS WHERE STATUS = 'ACTIVE')。然而,我的同事不同意。他指出,不管现在事件事件和已删除事件共享相同信息(因此它们可以存储在同一个表中)这一事实在未来的需求中,例如我的更改和客户端将需要存储一些有关已删除事件的附加信息(比如删除日期,谁删除了它,他为什么这样做 - 有点评论)。他说,为了将来满足这些要求,我们必须在 EVENTS 表中添加额外的列,这些列将保存特定于已删除事件的数据,而不是事件事件的数据。他提出了一个解决方案,其中创建了与 EVENTS 表具有相同架构的附加表(如 DELETED_EVENTS)。每个删除的事件都将从 EVENTS 表中物理删除并移动到 DELETED_EVENTS 表。
我强烈反对他的想法。它不仅会使 SQL 查询更复杂、效率更低,而且这完全不利于 YAGNI。我也不同意他的看法,如果将来需求发生变化,我的想法会让我们在 EVENTS 表中创建额外的(不可为空的)列。在我的场景中,我会简单地创建新表,如 DELETED_EVENTS_DATA(它将保存那些额外的存档数据),并在 EVENTS 表中添加引用键,以维护 EVETNS 和 DELETED_EVENTS_DATA 表之间的一对一关系。
尽管如此,两个在软件和数据库设计方面通常有着相似观点的开发人员可能对如何在数据库级别设计这些要求有着截然不同的看法,这让我感到很困惑。我认为我们可能都走错了方向,还有另一个(第三个)解决方案?还是只有一种选择?你如何设计这种需求?是否有关于如何正确执行此操作的任何模式或指南?任何帮助将不胜感激
最佳答案
不要使用状态栏。
至少你应该有一个 datedeleted 和一个 deletedby 列。仅仅知道某些内容已被删除是没有帮助的,即使客户在第一次查看已删除的事件时现在并没有要求,他们也会想知道是谁,以便找出原因。
如果事件表的大小可能会变得非常大,通常会将已删除/归档的数据完全移动到另一个表中。通常您会将这些表分配给不同的数据库文件。该文件通常位于不同的驱动器上以保持性能。我不是说一个全新的数据库,只是一个不同的数据库文件。
如果将它保存在同一个表中,则所有查询都应该有一个 where 子句 on (DateDeleted is null)。显然,如果将信息移动到不同的表,您就没有这个要求。这就是为什么我推荐这种做事方式的原因。
关于sql - 在数据库中设计存档。也许有些模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105571/
我想用 File::Find 归档所有 txt 文件,删除源文件并删除空目录。 我在使用“$tar->rename( );”重命名文件时遇到困难因为我想从它们的完整路径名中删除它们并仅使用父目录/*.
我试图从一个远程存储库中获取一个目录,但我只想从特定的哈希中获取该文件。如果我使用带有 HEAD 的 git archive 一切正常,但是当我尝试使用特定的哈希时: git archive -v -
无论当前目录如何,我都在尝试归档我的项目。 项目结构 main_folder/ sub1/ sub2/ sub3/ 如果我 cd至 main_folder/sub2/s
我有一个创建 install-tars 的远程裸存储库(无工作目录)。很好用。但是现在我只想为更改的文件创建 tars。我这样试过: git archive --format=tar --prefix
我正在构建自己的 rpm。通常我使用 git archive 从我感兴趣的提交或标签中获取 tarball(假设我放了一个标签 1.0): git archive --format=tgz --pre
如何使用 git archive 创建当前存储库的存档,包括本地未提交的更改? 最佳答案 我知道这是旧的,但我想我找到了解决方案。 运行: stashName=`git stash create`;
当我尝试发布 aab 时,出现此错误。请有人帮助我。我该如何修复它。 点击蓝色链接查看图片 最佳答案 当我使用拖放操作到网络浏览器时,我经常遇到这个错误。 如果我使用页面上的“上传”按钮并使用文件选择
我试图通过使用归档模块从 2 个文件夹中创建 2 个归档。 不幸的是,它无法正常工作,没有任何错误。 我的任务如下所示: tasks: - name: create a tarball of
我不想创建一个没有内部目录结构的“平面”tarball。但我希望顶级文件是“松散的”而不是镜像它们最初所在的目录结构。 考虑: + archives | + data | + site
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Xcode 4 Archive Version Unspecified 你好, 我正在为 iPad 临时部署归档应
我想将 UIWebView 的当前状态保存到 iPhone SDK 中的磁盘。 我有一个 UIWebView,它加载一个包含大量 JavaScript 的网站。我想保存 UIWebView 状态,维护
存档我的 Mac OS 应用程序时,我收到“通用 Xcode 存档”。我读过,可以通过在任何静态库上将 Skip Install 设置为 YES 来解决此问题,但我没有添加任何静态库。我有两个目标和一
可以使用什么组件或方法来指定文件名列表,然后将它们压缩到单个存档中? 我不需要高级功能或任何东西,但如果我可以将一些文件名添加到字符串列表中,然后将这些文件放入 ZIP 中,那就太好了。 我尝试搜索一
我有一个很大的 tar 文件,我分割了。是否可以使用管道来 cat 并解压文件。 类似于: cat largefile.tgz.aa largefile.tgz.ab | tar -xz 而不是: c
我使用 distZip 任务来创建我的发行版。目前发行版名称为“baseName”-“version”.zip。我想将当前时间戳用作分类器,即构建时间。 我尝试使用 distZip { cla
我正在尝试将 MySQL 查询的输出动态写入存档。这是我的代码: var async = require("async"); var mysql = require("mysql"); var exp
也许是个愚蠢的问题,但我的谷歌不起作用。在我的存储库根目录上执行以下操作: $ hg archive my_archive.tar.gz 给我一个 tar.gz 文件,其中包含一个名为 my_ar
[root@c0002242 lfeng]# tar -zxvf/opt/test/ALLscripts.tar.gz -C/opt/test1 tar:这看起来不像 tar 存档 tar:跳到下一个
我的tree命令返回 tmp `-- t `-- e |-- foo.ps `-- s |-- bar.ps `
在编译DLL时,我遇到了许多undefined reference错误,我认为这可能是由于库之间的循环依赖关系引起的。为了解决这个问题,我一直在尝试使用-(文件-)和--start-group文件--
我是一名优秀的程序员,十分优秀!