ドメインで不変とは、データベースで不変でなければならないということですか?たとえば、顧客が常に1つの住所を持っていると仮定して、次のことを検討してください。
customer.address = new Address('My Castle', 'Kings street');
customer_repo.save(customer);
顧客IDが1であることを考慮して、次のSQLが実行されます。
INSERT INTO addresses (customer_id, name, street)
VALUES (1, 'My Castle', 'Kings street');
現在、アドレスに対して次の変更が行われています。
customer.address = new Address('Pauper palace', 'Outlands');
customer_repo.save(customer);
そして永続化レイヤーは、非常に賢いので、次のSQLを実行します:
UPDATE addresses SET name='Pauper palance', street='Outlands'
WHERE customer_id = 1;
これにより、個別のDELETE AND INSERTステートメントのオーバーヘッドを回避できます。また、一部のRDBMSにはINSERT REPLACEなどがあると思います。MySqlにはREPLACEがあります。