Czy stosowanie widoków tabel baz danych w kodzie javowym jest dobrą praktyką?
Jedna tabela:
CREATE dbo.tags as (
-- ...
tag varchar(32)
-- ...
)
druga:
CREATE dbo.countryIsoCodes as (
-- ...
isoCode varchar(32),
-- ...
)
Potrzebuję wszystkie kombinacje tag
i isoCode
rozwiązanie z widokiem:
class Service {
// ...
List<TagIsoCodeCombination> getAllTagIsoCodeCombinations() {
return combinationsRepo.findAllCombinations();
}
}
class CombinationsRepo{
List<TagIsoCodeCombination> findAllCombinations() {
//...
String query = "select * from dbo.combinations_view"
//...
}
}
gdzie dbo.combinations_view
to:
SELECT
j.tag,
c.isoCode
FROM
dbo.jobs j crossjoin
dbo.countries c
rozwiązanie bez widoku:
class Service {
// ...
List<TagIsoCodeCombination> getAllTagIsoCodeCombinations() {
List<TagIsoCodeCombination> result = new ArrayList<>();
List<String> tags = tagsRepo.findAllTags();
List<String> countryIsoCodes = countryIsoCodesRepo.findAllCodes();
for(String tag : tags) {
for(String countryIsoCode : countryIsoCodes) {
result.add(new TagIsoCodeCombination(tag, countryIsoCode));
}
}
return result;
}
}
class TagsRepo {
List<String> findAllTags() {
//...
String query = "select tag from dbo.jobs"
//...
}
}
class CountryIsoCodesRepo {
List<String> findAllICodes() {
//...
String query = "select isoCode from dbo.countries"
//...
}
}