我有一些网络应用程序可以放置在外部网站上。此应用程序是disqus(disqus.com)等评论的小部件。
在应用程序中,每个小部件都是一个具有许多属性的实体对象。 例如:
@Entity
class Widget {
private User admin; //same as owner, administrator, creator
private String site; //example.com
private String providers; //google_plus,facebook,twitter,lastfm and others
//... and a lot of many other attributes
}
现在我开发了坏词列表。此列表将由管理员窗口小部件(所有者)管理。
对于这项任务,我有两种实现方式:
第一种方式:
@Entity
class Widget {
...
@ElementCollection(fetch = FetchType.LAZY)
@Column(name = "bad_words", length = 20)
private Set<String> badWords= new HashSet<String>();
...
}
在第二个表中保持关系
第二种方式:
@Entity
class Widget {
...
@Column(name = "bad_words", length = 2000)
private String badWords;
...
}
将字符串保留为由某些分隔符分割的单词,例如:“fukc,azz,shitt,...”
所以问题是在每个小部件实体中保留坏词的最佳方法是什么?案例1,2或其他一些事情?
答案 0 :(得分:1)
绝对选项1.选项2违反了First Normal Form。
考虑在第二种方式中将所有单词连接起来进行讨论。查询表会遇到很多困难。此外,还会出现许多用于更新/删除/添加单词的糟糕代码。你不想要任何这个。
拥有集合中的所有单词(First Way)将允许轻松查询它们并使所有CRUD操作更简单。
答案 1 :(得分:1)
IMO你应该保留一个单独的坏词列表,而不是将它们全部塞进一列。
它更干净。还有一个很多的坏词。
如果每个小部件确实需要自己的坏词列表,我会保持原样。但是,如果坏词列表总是相同,我不会将它们直接与小部件相关联,而是将列表保持为单独的实体。