Que fundamento teórico você encontrou para o design de banco de dados "Padrão de repositório"? Eu estou supondo que nenhum. É uma camada de complexidade baseada em uma premissa falsa: que a "camada de persistência" é algo de que você precisa se isolar. Pelo que posso dizer, isso contribui para o desconhecimento generalizado da programação dos princípios de design relacional e favorece uma centralidade pressuposta do design de OO do aplicativo. Mas isso não justifica sua existência por razões racionais, muito menos teóricas.
O caminho verdadeiro para o design de banco de dados não mudou em 30 anos: analise os dados. Encontre as chaves, restrições e relacionamentos muitos-para-um. Crie suas tabelas de acordo com a forma normal do Boyce-Codd. Use visualizações e procedimentos armazenados para facilitar o acesso aos dados.
Por mais indesejável que seja, um DBMS do SQL fornece uma melhor camada de isolamento do que qualquer coisa que o programador possa fornecer. É verdade que, conforme o banco de dados muda, o SQL usado para acessar pode ter que mudar. Mas observe que isso é verdade, independentemente de haver ou não uma camada de mediação . Desde que o aplicativo use visualizações e procedimentos armazenados para acessar o DBMS, as ferramentas comuns de engenharia do SQL indicarão quando alterações no banco de dados subjacente invalidam essas visualizações e procedimentos armazenados.
Aí reside o desafio, é claro. Uma camada de mediação fornece a ilusão de isolamento e o conforto para o programador de escrever código, o que ele sabe fazer. Aprender o design do banco de dados e o SQL requer aprender algo novo. A maioria das pessoas prefere morrer a pensar e muitas têm sucesso.
Alguém da sua equipe sem dúvida objetará que escrever SQL para dar suporte às suas 200 aulas é muito trabalhoso. Sem dúvida. Mas pelo menos é um trabalho útil . Se você projetar um banco de dados imitando seu design de OO, também fará muito trabalho, grande parte inútil, e derrotará a maior parte do que o DBMS oferece a você.
Por exemplo, você considera refletir a Unidade de trabalho no banco de dados (como tabela ou tabelas, presumo). Unidade de trabalho é um built-in de serviço do DBMS: begin transaction... banco de dados de atualização ... commit transaction. Nada para modelar, além do mapeamento de suas classes para as tabelas de banco de dados no SQL.
Sua pergunta foi publicada há 4 anos. Estou respondendo porque foi "atualizado" de alguma forma recentemente, indicando que ainda interessa a alguém. Espero que minha resposta incentive o leitor a aplicar a teoria relacional básica ao problema, em vez de adotar uma solução inútil.