This looks really good to me. Another practice that goes nicely with these points is the construction of debugging views and stored procedures. Immutability, especially, can make rapid debugging more difficult in the sense that the information you're looking for is spread across several tables. Debugging views or stored procs fix this by combining relevant information into a single virtual table which is more fit for direct use by humans.