I am developing an enterprise application with an Oracle backend. I am designing a core part of the DB architecture now and im having some questions on it.

1. First and most important thing is, most of my tables needs to preserve old data. For example

Consider a table with the fields

Contract No, Contract Name, Contract Person, Contract Email

I have a records like

12, xxx, yyy, xxx@zzz.ccc

and some one modifies it to

12, xxx, zzz, xxx@zzz.ccc

at any point of time i need to display the new record while still have copy of the old record.

So what i thought was to put a duplicate record of the old data and update the fields that was changed and have a flag to keep track of active records with something like "is active" as 1. 

The downside is that this creates redundancy in the table and seems like a bad design. But any other model seems unnecessarily complex and this seems cleaner to me. Also i dont see any performance issues having a duplicate record too. So please let me know if this is ok or am i missing something here.

1. Some times where there is a one to many relationship my assumption is to have a mapping table where i map the multiple entity in individual records by repeating master ID and changing child ID in each record. Is this a right way to do it or is there a better way to do it.
2. Is there a book on database best practices.

Thanks.

The database im dealing with is Oracle 11g on a two node RAC cluster