【发布时间】:2017-05-21 21:06:33
【问题描述】:
我正在编写一个应用程序,用户可以在其中添加有关书籍、出版商、来源(特定书籍的链接)等的信息。
每个用户都应该能够添加或编辑书籍或任何书籍(类型、出版商等)的信息。
当用户添加或更改一本书的信息时,该信息将只对他可用,而版主不检查信息的正确性。验证后,所有用户都可以使用该信息。
您可以看到我的数据库架构here。
我应该如何存储有关用户贡献的更改的信息?
【问题讨论】:
我正在编写一个应用程序,用户可以在其中添加有关书籍、出版商、来源(特定书籍的链接)等的信息。
每个用户都应该能够添加或编辑书籍或任何书籍(类型、出版商等)的信息。
当用户添加或更改一本书的信息时,该信息将只对他可用,而版主不检查信息的正确性。验证后,所有用户都可以使用该信息。
您可以看到我的数据库架构here。
我应该如何存储有关用户贡献的更改的信息?
【问题讨论】:
您至少有几个可以使用的基本方法。
选项 1:在一组并行表中保留待处理的更改 - 在此选项中,您将或多或少地将具有相同表的架构复制到主架构,但每个表都会添加额外的编辑 -相关信息,如proposed_by、proposed_datetime、approval_status、approved_by等
在此选项中,您将跟踪所有建议的更改,并且只有在主持人批准后才会将它们写入主表集。您可以在这些并行表中保留建议更改的历史记录,也可以删除已批准和已拒绝的更改,只留下待处理的更改。这将取决于您的业务需求。
选项 2:使用状态标志跟踪主表中的未决更改 - 在此选项中,您可以将选项 1 中的更改跟踪列添加到主表中。您还将有一个 status_flag 列来指示哪些记录是正式的,哪些是待定的提议更改。如果需要,您也可以跟踪被拒绝的更改。
选择哪个选项?所有设计都是关于权衡的。根据您的需要,您可以使用这些选项中的任何一个。第一个选项的问题是您必须复制所有表,然后在其上添加更改跟踪列。第二个选项的问题是您读取数据的代码会更复杂,因为它必须考虑过滤掉所有待处理的更改(以及被拒绝的更改,如果您跟踪它们) .
我喜欢简洁的代码。出于这个原因,我可能会倾向于选项 1,但是我不知道您的业务需求,因此您必须自己做出决定。
【讨论】: