Каков наилучший способ сохранить плохие слова в базе данных? - PullRequest
1 голос
/ 10 ноября 2011

У меня есть какое-то веб-приложение для размещения на внешних сайтах.Это приложение представляет собой виджет для комментариев, таких как 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 или что-то еще?

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

IMO, вам следует хранить отдельный список плохих слов, а не помещать их все в один столбец.

Это чище.И есть много плохих слов.

Если каждому виджету действительно нужен свой список плохих слов, я бы оставил его как есть.Однако, если список плохих слов всегда один и тот же, я бы не связывал их напрямую с виджетом, а поддерживал бы этот список как отдельную сущность.

1 голос
/ 10 ноября 2011

Определенно Вариант 1. Вариант 2 нарушает Первая нормальная форма .

Подумайте о том, чтобы все слова были объединены, как обсуждалось во Втором Пути.Возникнет много трудностей при запросе таблицы.Также появится много ужасного кода для обновления / удаления / добавления слов.Вам не нужно ничего этого.

Наличие всех слов в наборе (Первый способ) позволит легко запрашивать их и упростит все операции CRUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...