Я должен сделать статью, которая не может быть отредактирована, но она может быть сохранена как новая версия, и только новейшую версию показывают пользователям. Как я должен реализовать этот вид проектирования баз данных?
База данных может иметь номер версии или временную метку для каждой версии статьи, и вы просто обслуживаете самую последнюю статью (самый высокий номер версии или самую последнюю временную метку).
Для достижения наилучших результатов используйте кэш обратного прокси, чтобы не касаться базы данных при каждом попадании.
Есть несколько способов справиться с этим. Я думаю, что наиболее простой способ - это иметь таблицу «article» с любыми данными, высеченными в камне при создании статьи (например, id), и вторую таблицу с каждой отредактированной версией «articleVersion». article будет иметь отношение "один ко многим" с articleVersion.
Вы можете установить бит «currentVersion» и отключить его для старой версии и включить для новой версии. Вы также можете просто использовать datetime, dateCreated, чтобы получить самую новую версию, поскольку вы никогда не планируете их редактировать.