В настоящее время я поддерживаю довольно большое офисное веб-приложение. Недавно мне стало известно, что с помощью различных инструментов разработчика в веб-браузерах значения выборочных боксов могут быть легко изменены пользователем (между прочим). На стороне сервера я выполняю проверку, если опубликованные данные являются численными или нет (для выпадающих списков), но на самом деле не проверяют, существует ли это значение в таблице базы данных, например, у меня есть раскрывающийся список для приветствия ('mr ',' ms ',' mrs ',' Mr/ms ') и т. д., которые соответствуют числовым значениям.Ссылочная целостность для mysql
В настоящее время я использую MyISAM таблицы MySQL, которые не предлагают внешние ключи ссылочной целостности, так что я имею в виду, о переезде в Innodb, но это обладать следующий вопрос:
Если я хочу, чтобы применить ссылочную целостность (страховать действительные идентификаторы вставлены), это означало бы, что мне нужно будет индексировать все столбцы (при использовании проверок целостности), которые необязательно должны быть проиндексированы для проблем с производительностью вообще (например, всплывающее приветствие). Если в очень большой клиентской таблице базы данных есть 10 симуляционных выпадающих списков (например, группа клиентов, число сотрудников, страна-регион и т. Д.), Казалось бы, переполнение индексирования каждой связанной таблицы.
Мои вопросы:
1) при использовании ссылочной целостности, не столбцы действительно должны быть проиндексированы также?
2) Есть ли другие практические решения, которые я могу игнорировать? (Например, использовать отдельный запрос для каждого выпадающего-списка, чтобы увидеть, существует ли значение в таблице?)
3) Как и другие веб-приложения справиться с такими проблемами?
Помогите оценить!
благодаря Patrick
Привет, Спасибо за быстрый ответ :-) Моих считает, что MyISAM таблица не выполняет такую проверку, вы можете в основном вставку вставить любое значение, которое определяется как «внешний ключ». Также я понимаю, что индексирование следует применять редко; только когда это необходимо для повышения производительности, с столбцами, которые приводят к высокой мощности. – user2022678
да, это правда. myisam анализирует/принимает заявления внешнего ключа, но они в основном молча игнорируются и определенно НЕ применяются. и нет, эмпирическое правило для индексов - применять их к любому полю, используемому в ситуации where/join/order или other «test the value». –