If a given test must be "frozen", then you should create a whole new test (questions, answers, etc) when the user wants to make changes. Rather than giving them an "edit" button on the question or answers, give them a "clone" button on the test.
The previous suggestion about marking the 'active' version is a good one.
EDIT:
I don't remember seeing your picture before, so I'll update based on it and your later comments. I would still suggest that you create a whole new test by "cloning" an existing one, but you could do that similarly to how your two *Log tables work, though with a little modification. How about this:
test (id), say one row.
question (id, text), 7 rows.
answer (id, text), 28 rows (4 for each question).
Note that there's nothing joining any of those together. Now...
test_question (test_id, question_id). 7 rows.
question_answer (test_id, question_id, answer_id). 28 rows.
Now, to change a question: issue a new test_id (+1 small row). Copy all the unchanged test_question and question_answer values for the new test (6+24 small rows). Add a new question row (+1) and copy the old question_answer to this new question (+4 small rows).
Most of your new rows are comprised of integers, so they'll be small and fast. You didn't copy any of the larger question/answer rows.
This also leaves you with the ability to find everything you need to know given just a test.id. With this type of versioning, you can say that Johnny took test #5, and know exactly what he saw, without any calculations, etc.
Hope that helps.
I would use (title,prod_date) as the primary key, since movies are not uniquely identified by their title alone (remakes, for example). In my opinion, the first diagram is preferable, the sub-attribute approach in the second diagram seems a bit convoluted to me.
Best Answer
The Name of a Person and his/her Bith Date are almost enough to make an
unique index
with both columns. This way you would garantee 100% of unique individuals in your table, but you could have problems with those miracle situations where two people born the same day with same name.In this case I would recommend you add a new columns called Birth place (City/State/Country) to your Person table and make the Unique Index with those 3 columns.
It will solve your problem.