Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
Итак имеется родительская таблица tbChel - в ней ключевое поле - KLUCH - C(10), Name C(10) имя человека, nKab C(2) - номер (допустим кабинета) начальный, Номер конечный -nKabEnd C(2)
И дочерняя таблица - tbPereezd в которой нет собственного уникального номера, но есть родительский kluch, а также поле даты DataPereez D, номер кабинета из какого перехали nKabIZ C(2), номер кабинета куда перехали nKab С(2) Нам нужно проверить таблицу на корректность заполнения. А именно: 1. Самый первый перезд должен быть из "начального" кабинета родительской таблицы. 2. Самый последний перезд должен быть в "конечный" кабинет 3. "Цепочка" кабинтов должна быть непрерывна. Каждый пункт один Select запрос возвращающий имена людей с некорректными данными. P.S. Конечно дублирование и не отвечает нормализации, но что делать? |
Re: Еще игра | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Слав, ты бы хоть код создания таблиц привёл, а то ломает самому писать
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
Что то запарился простите
|
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Вроде бы элементарная задача, на на фоксе превращается в головоломку.
Вот так первый пункт должен решаться на нормальном SQL:
Дальше начинаются игры с уникальностью DataPereez и т.п., фоксовые извраты SQL... Вот поэтому я начиная с 6-ки БД делаю на MSSQL и с фоксовым SQL страюсь дела не иметь. |
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
Вместо неравно попробуй not in
|
Re: Еще игра | |
---|---|
Foxtrot Сообщений: 3408 Откуда: Куда: Дата регистрации: 25.04.2003 |
Твой код формирования таблиц чуток подправил = добавил тебя в список
------------------ Мойте ноги, моя ноги вы моете и руки Исправлено 1 раз(а). Последнее : Foxtrot, 15.03.07 13:37 |
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Foxtrot
Насколько я вижу, это не решение. Достаточно чуть усложнить/пополнить условие/данные:
Предлагаю использовать именно эти данные. |
Re: Еще игра | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
А я еще предлагаю добавить условие, что один человек в один день не может переезжать два раза (или это и так предполагалось?), а то третий пункт без него становится непонятным.
|
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
Предполагалось.
Нам нужно проверить таблицу на корректность заполнения. 0. Нельзя чтобы несколько переездов было в один день... |
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Неа. Так нечестно. ;)
Тут получится тогда что дата является ключом, а вот попробуйте-ка такое решить если даты переездов у человека повторяются! Впрочем, ладно, я погорячился, пусть будет такое условие. Исправлено 1 раз(а). Последнее : Prudivus, 15.03.07 17:05 |
Re: Еще игра | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Наверно это далеко не оптимальный вариант, но все-таки
|
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Посмотрел первый (и второй) селект. По-моему вполне рабочий вариант! Я позволил себе немного оптимизировать его:
|
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
А по поводу третьего селекта и задания: мне кажется такое на SQL не делается вообще, без циклов/рекурсий не очень представляю себе...
|
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
2 Prudivus
это еще почему?? 2 leonid Первые два я делал приблизительно также. Третий чуть по другому.
А вообще |
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Да, по поводу третьего я был не прав - решается. Но хотелось увидеть комментарии к решениям, с объяснением что и почему. (навскидку мне кажется что оба приведенных решения неточны/неполны)
|
Re: Еще игра | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Я тут двое суток был вдали от интернета, сейчас посмотрел на свое решение - как там сделано уже все забыл, а разобраться - черт ногу сломит. Поэтому, вполне допускаю, что Цитата:Посмотрел авторское решение - сначала показалось, что там что-то не так, потом, что все путем, а проверить на работе не могу - девятки нет, а на шестерке все это не работает. А вообще, мое мнение, что если такие вещи писать на фоксе, то лучше все это делать не одним оператором, а несколькими, загоняя промежуточные результаты в курсоры. Отлаживать это будет несравненно проще, читаемость тоже существенно повысится, и сдается мне что почти всегда и скорость выполнения можно сделать не хуже. |
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
В моем случае это было невозможно потому что начиная от оператора Where в select код должен был присутствовать в мем поле и работать по скану. ТО бишь полностью код выглядит примерно/схематично так:
|
Re: Еще игра | |
---|---|
Zakharov_slava Автор Сообщений: 2022 Откуда: Алматы Дата регистрации: 14.10.2005 |
Код - самодокументируемыйся. А вообще так:
|
Re: Еще игра | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Я вчера погонял оба варианта на скорость. Результаты вообще говоря не очень. Оба варианта жрут много памяти, а когда она кончается, начинаются резкие тормоза. На 3000 записях я уже не дождался. Оба варианта занимают время пропорционально N^2, где N - это количество записей (я проверял только при одном значении ключа). Сдается мне, что если писать в несколько операторов, то легко можно достичь если не линейной зависимости, то по крайней мере N*lnN. Может быть этого можно достичь и с одним оператором, но как-то не приходит в голову как. Вот код, на котором я тестировал
|
Re: Еще игра | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Разбирал код Леонида, все корректно, у Славы, видимо, тоже. Так что я был неправ. Но понять "с наскоку" не смог, видимо в голове не сложился шаблон на подобные задачи, никогда с таким не сталкивался. А ключом к решению (то чего хотелось в комментах) является "Соеденяю каждый перезд со следующим" (с) Слава.
|
© 2000-2024 Fox Club  |