How to keep updates (diffs) of some entity in the database
Check out Drupal and RDF.  Check out what StackExhange (etc) uses.  And study how GIT works.

I recommend keeping the current value in the primary table, and put the history in other table(s).  That is, plan for efficient access to the current value, at the expense of history.

If you are talking about "articles" of, say, 1K characters, then compress them.  Compress old copies; optionally compress the 'current' copy.  But do the compression in the client, so as to offload the database server.  This will save space.  If you are talking about ancillary data (dates, names, etc), don't bother compressing.

Do not save the entire set each time there is a change.  That is, if you change the date, don't store another, identical, copy of the article body.  Too bulky.

You mentioned diffs -- Do you intend to do diffs on paragraphs?  If so, do you have a good algorithms for such?  (My previous comments do not assume "diff".)

Oh, well, I guess I am not adding much to your stated requirements.