几种不同通知事件的数据库设计

时间:2012-12-10 07:28:39

标签: ruby-on-rails database postgresql notifications database-schema

我还是一名程序员,所以我只是想了解最佳做法。如果我有四个通知流[消息,事件,注释,基于位置],我应该为每个事件类型创建一个单独的表,还是应该创建一个表并添加一个描述事件类型的列。

(假设中等流量,rails,AR,Postgre和每个表具有相当相似的列[id,user_id,other_object_id,message,time,...])

感谢您的建议!

1 个答案:

答案 0 :(得分:3)

这可能是一个软件设计问题。您是否在所有类型的通知之间有共同的行为?如果答案是否定的,那么只需为每种通知创建一个不同的模型。

但是,大多数情况下,通知的共享行为都很多,即使是相同的行为也是如此。如果通知看起来都相同,并且彼此之间只有一些微小的差异,只需添加 notification_type 列并根据该列的值定义小行为。这将是更快捷,更务实的方式。

现在,如果要实现良好的设计模式,您需要实现ActiveRecord继承,您将在Notification模型中定义公共行为,然后消息,事件,注释等将从此模型继承。 / p>

您可以在Rails文档中查找有关Active Record继承的更多信息:http://api.rubyonrails.org/classes/ActiveRecord/Base.html,Martin Fowler模式http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html,您将找到不同的示例across the web