I have a strange requirement for changing data in a table.
The current database design is a dimensional design (as opposed to a relational design). There is a Fact table called PERSON_FACT (name, address, Expertise_id, Industry_Id, Status_id, Country_id.....), EXPERTISE_DIM(Expertise_id, Expertise_Desc), INDUSTRY_Dim(Industry_id, Industry_Desc) and so forth. The 'dim' tables are basically 'lookup' tables and very common in this type of design.
Inserting rows into the PERSON table is straight forward. The dim tables have the valid values and the appropriate id's are inserted into the PERSON_FACT table. But there is a requirement that when an attribute in the PERSON_FACT table changes rather than perform an update a new record is inserted into the PERSON_FACT table so as to keep the history of what changed and when it was changed. I would like the user to be able to go to the specific 'person' and make the change but behind the 'scene' have the database perform the Insert rather than an update. This would require that all of the unchanged attributes be 'copied' to the new record.
Over time there will be cases where a person has several 'historical' records. In that case i believe it would be helpful for the user to see the history and the current record as well. And then be able to modify the current record.
I would welcome some suggestions as to a good design approach to satisfy this requirement.
thanks,
don