MyWackoSite - NsuTs/Documentation/devguide/Неконсистентныеданные http://parallels.nsu.ru/WackoWiki/NsuTs/Documentation/devguide/Неконсистентныеданные History/revisions of MyWackoSite/NsuTs/Documentation/devguide/Неконсистентныеданные en-us 2011-11-16 17:37:37 http://parallels.nsu.ru/WackoWiki/NsuTs/Documentation/devguide/Nekonsistentnyedannye/show?time=2011-11-16+17%3A37%3A37 <div class="pageBefore"><img src="http://parallels.nsu.ru/WackoWiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".nsuts.documentation.devguide.nekonsistentnyedannye" href="http://parallels.nsu.ru/WackoWiki/NsuTs/Documentation/devguide/Nekonsistentnyedannye?v=jk4" class="">/Nsu&nbsp;Ts&nbsp;/&nbsp;Documentation&nbsp;/&nbsp;devguide&nbsp;/&nbsp;Неконсистентныеданные</a> за <a href="http://parallels.nsu.ru/WackoWiki/NsuTs/Documentation/devguide/Nekonsistentnyedannye?time=2011-11-16+17%3A37%3A37">2011-11-16 17:37:37</a> и <a href="http://parallels.nsu.ru/WackoWiki/NsuTs/Documentation/devguide/Nekonsistentnyedannye">2012-05-11 10:38:59</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">|| Текст на&nbsp;печать|print (filename) |solution/&lt;filename&gt;.txt||<br /> Скрипт checkUnusedFiles.pl<br /> <ol type="1"><li> Разбор xml&nbsp;скрипта с&nbsp;расположением файлов в&nbsp;базе данных и&nbsp;на файловой системе </li><li> Составление списка файлов, найденных в&nbsp;базе данных для&nbsp;данного типа, лексическая сортировка и&nbsp;запись в&nbsp;файл $from_db </li><li> Составление списка файлов, найденных на&nbsp;сервере, лексическая сортировка и&nbsp;запись в&nbsp;файл $from_fs </li><li> С&nbsp;помощью утилиты unix comm чтение файлов $from_db, $from_fs и&nbsp;генерация вывода, состоящего из&nbsp;трёх колонок текста: строки, найденные только в&nbsp;файле $from_db; строки, найденные только в&nbsp;файле $from_fs; и&nbsp;строки, общие для&nbsp;обоих файлов. </li><li> Обработка результата, удаление файлов и&nbsp;записей в&nbsp;базе данных по&nbsp;запросу </li><li> Печать отчета</li></ol> ||olympiad.id| forms.olympiadid log.olympid tour.olympid users.current_olympiad userlist.olympiadid olympiad_freeze.olympiadid ||<br /> ||tour.tourid |files_for_tour.tourid langs_for_tour.tourid news.tourid qna.tourid virtualtours.tourid users.selected_tourid notifications.tourid tasks.tourid timeshift.tourid ||<br /> ||users.userid |formvalues.userid online.userid print.userid priv.userid submits.userid virtualtours.userid timeshift.userid notifications.userid qna.userid qna.ansid ||<br /> || forms.id | formvalues.formid userlist.formid ||<br /> || langs.langid |langs_for_tour.langid submits.langid ||<br /> ||tasks.taskid | submits.taskid ||<br /> ||cities.id | universities.cityid users.cityid ||<br /> ||universities.id | users.univerid ||<br /> <!--notypo--><textarea class="code" rows="3" readonly="readonly">SELECT b.* FROM `B` AS b WHERE a.id IS NULL;</textarea><!--/notypo--><br /> Скрипт checkRefIntegrity.pl<br /> 3) <strong>Существование нескольких записей ссылающихся на&nbsp;одну</strong><br /> Использование вместо отношения <span class="nobr">1&ndash;1</span> отношения 1-n. <br /> Пример: каждая запись в&nbsp;таблице priv ссылается на&nbsp;пользователя из&nbsp;таблицы users. Однако, в&nbsp;отсутствии внешних ключей в&nbsp;базе данных, может получиться, что&nbsp;несколько записей в&nbsp;таблице привилегий относятся к&nbsp;одному пользователю, что&nbsp;не&nbsp;верно. <br /> Процесс поиска и&nbsp;удаления таких записей можно осуществить, например, при&nbsp;помощи запросов SQL:<br /> <!--notypo--><textarea class="code" rows="8" readonly="readonly">CREATE TEMPORARY TABLE IF NOT EXISTS tmp ( id int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tmp (SELECT p2.id FROM `priv` AS p1 JOIN priv AS p2 ON p1.userid = p2.userid WHERE p2.id &gt; p1.id); DELETE FROM priv WHERE id in (SELECT id FROM tmp_priv)</textarea><!--/notypo--><br /> 4) <strong>Кавычки в&nbsp;БД</strong><br /> Например title = &#147;Evgen'evich&#148;, могут возникать проблемы при&nbsp;сохранении дампа</div><br /> <b>Удалено:</b><br /> <div class="deletions">|| Текст на&nbsp;печать|print (filename) |...||<br /> <em>Проблемы</em><br /> слишком много записей, большой запрос к&nbsp;БД,оценить время выполнения<br /> ...<br /> ||Olympiad.id| Forms.olympiadid Log.olympid Tour.olympid Users.current_olympiad Userlist.olympiadid Olympiad_freeze.olympiadid ||<br /> ||tour.tourid |Files_for_tour.tourid Langs_for_tour.tourid News.tourid Qna.tourid Virtualtours.tourid users.selected_tourid Notifications.tourid Tasks.tourid Timeshift.tourid ||<br /> ||Users.userid |Formvalues.userid Online.userid Print.userid Priv.userid Submits.userid Virtualtours.userid Timeshift.userid Notifications.userid Qna.userid Qna.ansid ||<br /> || Forms.id | Formvalues.formid Userlist.formid ||<br /> || Langs.langid |Langs_for_tour.langid Submits.langid ||<br /> ||Tasks.taskid | Submits.taskid ||<br /> ||Cities.id | Universities.cityid Users.cityid ||<br /> ||Universities.id | Users.univerid ||<br /> SELECT b.* FROM `B` AS&nbsp;b<br /> WHERE a.id IS&nbsp;NULL;</div></div>