Opened 8 days ago
Last modified 7 days ago
#1360 assigned дефект
Создать страничку для проверки целостности/корректности/консистентности БАЗЫ
Reported by: | Denis_N | Owned by: | Denis_N |
---|---|---|---|
Priority: | minor | Component: | Разное и всякое |
Keywords: | Cc: | san, alx |
Description (last modified by )
Есть идея создать страничку для проверки, чтобы в базе все было консистентно. И просьба вас предлагать правила на которые было бы полезно базу периодически проверять базу через скрипт.
Некоторые уже правила проверки:
- Проверить, что имена изделий в таблице products совпадают с именами в таблице order-items. Нужно правило по просьбе Саши по причине того, что он может по просьбе Олега изменить в одной таблице имя изделия, а в другой ошибиться или забыть.
P.S. Просьба после предложения правила написать обоснование для него.
Note:
See TracTickets
for help on using tickets.
Replying to Denis_N:
Идея хорошая и здравая, только непонятно, зачем скрипту страница (если я правильно понял, что имеется в виду веб-страница)... :)
Непонятно, зачем Саше может потребоваться изменять имя изделия в БД руками. Если одно изделие было переделано в другое, то, насколько я понимаю, для этого в веб-интерфейсе есть страница "Трансформация", код которой должен все нужные изменения в БД сделать автоматически (разукомплектовать заказ, если он был скомплектован данной платой). Если же заказчик изменил состав своего заказа - для этого тоже в веб-интерфейсе есть интерфейс "Заказы", где старая позиция удаляется, и добавляется новая, в результате чего новая позиция оказывается нескомплектованной автоматически!
Еще одно соображение. Неконсистентность может возникнуть там, где есть избыточность. Поэтому, прежде чем добавлять какую-то проверку в скрипт, стоит подумать, а нельзя ли эту избыточность устранить. Ведь если устранить причину, то не надо будет бороться с ее последствиями! Например в той же таблице
order-items
я вижу столбцыtype
иname
, дублирующие (насколько я понял) одноименные столбцы таблицыlist_of_products
. Если удалить столбецtype
из таблицыorder-items
(и вместо него использовать столбецtype
таблицыlist_of_products
, то есть чуть-чуть лучше нормализовать БД), то и не надо будет потом в таблицеorder-items
проверять соответствие наименования изделия его типу...Теперь по сути заданного вопроса. Насколько я понимаю, проверять надо все места, где есть избыточность (как в случае с именами, упомянутом в описании тикета), и где есть агрегированные поля (например поле
mismatch
в таблицеproducts
).И еще одно предварительное замечание: ты просишь предлагать правила для проверки консистентности БД, но я нигде не видел документации на БД, где были бы четко описаны назначения полей - какое поле в каких случаях какое значение должно принимать. Есть такое описание? Без него о назначении большинства полей я могу только гадать и, соответственно, предлагаемые мной правила проверок - тоже не более чем гадание... :)
name
в таблицеproducts
должно иметься в таблицеlist_of_products
. Нужно по причине того, что в таблице для этого поля отсутствует FOREIGN KEY, и в результате ошибки в коде или при ручной правке БД в записи может оказаться имя несуществующего в действительности изделия, что будет запутывать пользователей и, возможно, приводить к наведенным ошибкам.type
в таблицеproducts
должно совпадать с полемtype
в таблицеlist_of_products
с тем же полемname
. Нужно по причине того, что здесь имеется избыточность, и в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочный тип изделия, что будет запутывать пользователей.owner
в таблицеproducts
должно иметься в таблицеusers
. Нужно по причине того, что в таблице для этого поля отсутствует FOREIGN KEY, и в результате ошибки в коде или при ручной правке БД в записи может оказаться ссылка на несущетвующего пользователя, что будет запутывать других пользователей и, возможно, приводить к наведенным ошибкам.location
в таблицеproducts
должно соответствовать полюlocation
последней записи для данного изделия в таблицеhistory
, в которой это поле не пустое (не NULL). Нужно по причине того, что в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочное местоположение, что приведет к потере ценного изделия.testing
в таблицеproducts
должно соответствовать полюstatus
последней записи типаtesting
для данного изделия в таблицеhistory
. Нужно по причине того, что в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочный статус тестирования, что приведет к отгрузке негодного изделия, что, в свою очередь, нанесет урон репутации компании.otk
в таблицеproducts
должно соответствовать полюstatus
последней записи типаotk
для данного изделия в таблицеhistory
. Нужно по причине того, что в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочный результат контроля ОТК, что может привести к отгрузке изделия, не прошедшего контроль ОТК.mismatch
в таблицеproducts
должно быть yes если есть хотя бы одно неустраненное несоответствие и no во всех остальных случаях. Нужно по причине того, что в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочный статус, что может привести к отгрузке негодного изделия, что, в свою очередь, нанесет урон репутации компании.type
в таблицеorder-items
должно совпадать с полемtype
в таблицеlist_of_products
с тем же полемname
. Нужно по причине того, что здесь имеется избыточность, и в результате ошибки в коде или при ручной правке БД в записи может оказаться ошибочный тип изделия, что будет запутывать пользователей.