Eles são dois princípios diferentes. Praticamente a única coisa que eles têm em comum é a palavra "solteiro".
Fonte Única da Verdade é o resultado final do processo de normalização de um banco de dados. Todas as informações da entidade são armazenadas uma vez e apenas uma vez.
Fonte Única da Verdade explica por que colocamos Clientes em uma tabela e Produtos em outra. Ao associar clientes a produtos, usando uma tabela CustomerProducts, evitamos armazenar clientes ou produtos em dois locais diferentes e, em vez disso, colocamos ponteiros na tabela CustomerProducts que apontam para cada cliente e produto. Isso também nos permite associar vários clientes a um produto e vários produtos a um cliente, sem duplicar informações como o nome do produto ou seu preço.
Ter uma única fonte de verdade (cada dado é armazenado em apenas um local) significa que, quando você altera esse dado, todo o sistema vê a mesma alteração no mesmo instante. Compare isso com várias fontes de verdade, nas quais você deve alterar o dado em todos os locais onde ele está armazenado. Diferentes partes do sistema podem ver dois valores diferentes para o mesmo dado, pelo menos temporariamente.
Princípio de responsabilidade única (SRP) significa que uma classe deve ter apenas uma responsabilidade ou um motivo para mudar. O exemplo que Fowler dá é o de uma classe Modem:
interface Modem
{
public void dial(String phoneNumber);
public void hangup();
public void send(char c);
public char recv();
}
Essa classe viola o SRP, porque possui duas responsabilidades principais: estabelecer uma conexão e enviar dados. Para corrigir o problema, você dividiria a interface em duas interfaces diferentes: uma interface de conexão e uma interface de comunicação. A primeira interface conteria os métodos de discagem e interrupção, e a segunda interface conteria os métodos de envio e recebimento.
O SRP não é uma lei, mas apenas um princípio. Às vezes, o SRP é violado por conveniência ou por outros motivos. O mesmo se aplica à normalização do banco de dados; Às vezes, os dados são mantidos em uma forma desnormalizada (inclui alguma duplicação) por desempenho ou outros motivos.
A ignorância de persistência é outra forma de SRP: uma classe não deve ter conhecimento de como se salvar em um armazenamento de dados. Essa não é sua responsabilidade; é responsabilidade de outra classe. Não fosse esse o caso, você teria que alterar todas as classes que usam o armazenamento de dados, se desejasse alterar o armazenamento de dados para outro tipo de armazenamento de dados.