Retrieve the ID from the database based on system name
Todas as suas outras opções envolvem a duplicação dos dados do banco de dados em seu código. O design do banco de dados e do programa geralmente é um processo de redução da duplicação de dados, não aumentando-o.
Se você estivesse começando do zero, e não esperasse um novo sistema com muita frequência e houvesse apenas alguns sistemas, talvez você começasse com um enum. Quando você se cansava de recompilar e relançar o código toda vez que você suportava um novo sistema, então você criaria uma tabela de banco de dados. Mas como você já tem uma tabela de banco de dados, não consigo pensar em uma razão para não usá-la.
I now need to explicitly reference the ID relating to Windows to query
for user name, team etc.
Simples:
select u.user_name, u.team, u.other_field
from user u
join system s on u.system_id = s.id
where s.name = 'Windows';
Ou se o mesmo usuário puder estar em vários sistemas:
select u.user_name, u.team, u.other_field
from user u
join user_system_xref usx on usx.user_id = u.id
join system s on usx.system_id = s.id
where s.name = 'Windows';
Hmm ... Eu vejo a tag "Orientada a objeto" em sua postagem. Eu acho que vou apenas um pouco mais e dizer que se você estiver usando o Hibernate, você pode fazer algo semelhante com uma consulta de critérios:
Crit<System> crit = Crit.create(System.class);
crit.add(Restrictions.eq("name", "Windows"));
System currSystem = crit.uniqueResult();
for (user : currSystem.getUsers()) {
System.out.println(user.getName());
System.out.println(user.getTeam().getName());
}