是否有用于合并重复数据库记录的设计模式?

chr*_*aly 8 database-design design-patterns

例如,假设我有一个电影迷的社交网站.有些人将"Rocky"列为他们最喜欢的电影,其他人列出"Rocky 1",其他人仍然是"Rocky I".显而易见的是将三者合并在一起并更新关联的表.但是,对于每个明显的解决方案,都有一种设计模式,即1)更复杂,2)有一些额外的好处.是否有用于合并重复数据库记录的设计模式?特别是,提供可审计性或可逆性的东西?

mil*_*use 5

当你说"可逆性"时,我认为命令模式.

典型的例子是支持撤销样式行为,但我认为这也非常适合可审计性 - 特别是因为个别"步骤"(因为缺少更好的词)是如此之小并且易于表示(例如{Merged "Rocky I" -> "Rocky" }).

如何让Command模式真正适用于您的场景?

好吧,假设你已经有了表,我会在RDBMS领域而不是OO建模中保持这一点,USER_FAVORITE并且MOVIE我将添加一个USER_FAVORITE_MOVIE_MERGE_COMMAND包含列的新表:

  • id
  • date
  • user_id
  • old_favorite_movie_title
  • new_favorite_movie_title

因此,您的夜间清理脚本(或其他任何内容)会在USER_FAVORITE桌面上运行,以查找非标准电影标题.每次找到一个,它就会对其进行纠正并在USER_FAVORITE_MOVIE_MERGE_COMMAND表格中记录相关的事实.

您的审计跟踪就在那里,如果您需要撤消清理作业,请按相反的时间顺序"回放"行,替换newold.

请注意,您是如何既在拿到两个可逆性和可审核的时间感(如昨晚的批处理就奇怪在上午02点12分,让我们回滚所有之后所做的工作),并每个用户的感觉.

这是你想要的那种东西吗?