Первый вариант предпочтительнее, на мой взгляд. Это облегчает поиск ответов на различные вопросы для одного бренда и на один и тот же вопрос по брендам.
Поиск идентификатора вопроса кажется плохой заменой. С одной стороны, это исключает простые отношения внешнего ключа с таблицей questions
и таблицей brands
. Я большой поклонник явных внешних связей.
Конечно, чтобы сделать эту работу, вам понадобится метод для хранения «нет бренда» или «бренд не имеет отношения». Одним из способов является использование NULL
для таких ответов.
The Google Collections zip contains their tests. There should be a google-collect-testfw jar in there.
Specifically, there's an abstract test for the general contract of Map.
Возможно, вы захотите узнать, есть ли в Google Collections что-то, что соответствует вашим потребностям, чтобы вам не пришлось поддерживать свою собственную карту. См., Например, MapMaker
private Map<Key, Graph> createMap() {
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(32)
.softKeys()
.weakValues()
.expiration(30, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
return Collections.unmodifiableMap(graphs);
}
. Обратите внимание, что карта не будет полностью неизменной после построения, поскольку выполнение map.get (key)
с ранее невидимым ключом изменит то, что видел Map.entrySet ()
Если вам нужно написать собственную реализацию карты и вы хотите хорошее место для начала ваших тестов, предложение Адама об использовании Google Collections MapInterfaceTest является хорошим .