Я видел несколько вопросов, где разработчики спрашивали о проверке, существует ли запись перед вставкой, чтобы избежать нарушения ограничения первичным ключом ... ИМХО, это не большая проблема.Но что делать, если условие, которое я хочу проверить, не состоит в том, чтобы избежать ошибки БД, поскольку ошибка БД не возникнет, если условие существует во время вставки.
Например, большая ненормализованная таблица с несколькимизначения состояний, но я хочу разрешить вставку только новой строки, которая изменяет состояние только одного столбца значения состояния за раз.
Столбцы могут иметь вид:
id
animal_id
health_problem_id
treatment_plan
treatment_approved
treatment_scheduled
treatment_in_progress
treatment_complete
who_updated
when_updated
Когда пользователь обновляет поле состояния в своем представлении приложения, другая неизменная информация будет использоваться как часть вставки , если соответствует тому, что они видят в настоящее время, в противном случае они будут уведомлены, а затем они могут просмотретьтекущую информацию и попробуйте еще раз.
Например, это не позволит двум разным пользователям планировать что-либо дважды без немедленного уведомления одного из пользователей.
Теперь давайте представим, что эта таблица будетиспользуется интенсивно и одновременно (мой пример, возможно, не самый лучший для этого ...).Для тех, у кого поразительное воображение, давайте также предположим, что есть разумная вероятность, что люди будут работать над одним и тем же животным в одно и то же время.Давайте также предположим, что целостность данных важна.
Очевидно, что если она будет использоваться одновременно и интенсивно блокировать всю таблицу, это НЕ хорошее решение, но, безусловно, обеспечит целостность данных.
- Есть ли эффективное решение этой проблемы?
- Является ли плохой дизайн базы данных виновником (т. Е. Ненормализация данных)?Если это так, какой дизайн решит эту проблему?
- Является ли этот дизайн нормальным, если он не будет интенсивно использоваться, и существует низкая вероятность того, что люди будут работать на одном и том же животном?(Примечание: целостность данных по-прежнему чрезвычайно важна.)
- Тот же вопрос, что и 3, но с требованием целостности данных менее важным.
Примечание: Мой пример,Например, это не то, что я делаю с данными о животных:)
Мнения и / или подробности о том, как решить эту проблему с помощью существующих реляционных баз данных, безусловно, предпочтительнее.