Проверка неисполненных условий перед вставкой - PullRequest
0 голосов
/ 10 марта 2012

Я видел несколько вопросов, где разработчики спрашивали о проверке, существует ли запись перед вставкой, чтобы избежать нарушения ограничения первичным ключом ... ИМХО, это не большая проблема.Но что делать, если условие, которое я хочу проверить, не состоит в том, чтобы избежать ошибки БД, поскольку ошибка БД не возникнет, если условие существует во время вставки.

Например, большая ненормализованная таблица с несколькимизначения состояний, но я хочу разрешить вставку только новой строки, которая изменяет состояние только одного столбца значения состояния за раз.

Столбцы могут иметь вид:

id
animal_id
health_problem_id
treatment_plan
treatment_approved
treatment_scheduled
treatment_in_progress
treatment_complete
who_updated
when_updated

Когда пользователь обновляет поле состояния в своем представлении приложения, другая неизменная информация будет использоваться как часть вставки , если соответствует тому, что они видят в настоящее время, в противном случае они будут уведомлены, а затем они могут просмотретьтекущую информацию и попробуйте еще раз.

Например, это не позволит двум разным пользователям планировать что-либо дважды без немедленного уведомления одного из пользователей.

Теперь давайте представим, что эта таблица будетиспользуется интенсивно и одновременно (мой пример, возможно, не самый лучший для этого ...).Для тех, у кого поразительное воображение, давайте также предположим, что есть разумная вероятность, что люди будут работать над одним и тем же животным в одно и то же время.Давайте также предположим, что целостность данных важна.

Очевидно, что если она будет использоваться одновременно и интенсивно блокировать всю таблицу, это НЕ хорошее решение, но, безусловно, обеспечит целостность данных.

  1. Есть ли эффективное решение этой проблемы?
  2. Является ли плохой дизайн базы данных виновником (т. Е. Ненормализация данных)?Если это так, какой дизайн решит эту проблему?
  3. Является ли этот дизайн нормальным, если он не будет интенсивно использоваться, и существует низкая вероятность того, что люди будут работать на одном и том же животном?(Примечание: целостность данных по-прежнему чрезвычайно важна.)
  4. Тот же вопрос, что и 3, но с требованием целостности данных менее важным.

Примечание: Мой пример,Например, это не то, что я делаю с данными о животных:)

Мнения и / или подробности о том, как решить эту проблему с помощью существующих реляционных баз данных, безусловно, предпочтительнее.

...