Сложни Изгледи |
![]() |
Търси използвайки сложна функция Имаме същата таблица Roads („Пътища“) като в примера горе и атрибутна таблица GasStations („Газ Станции“), свързана с точки. Искаме да намерим пътища с повече от 1 станция за километър. Първо трябва да дефинираме изгледа, който ще бъде използван в диалоговия прозорец „Търси“. Основното редово множество е таблицата Roads , а допълнителното – таблицата GasStations. Изразът за съвпадение може да се дефинира като: and (aux.Propane, distance (object(), aux.object()) Тук Propane е името на колоната от Булев тип, т.е. търсим единствено газ станции, където има такова гориво. Първият път функцията object() няма префикс, което означава, че основното редово множество с обекти е това по подразбиране. Изразът „Където“ може да бъде дефиниран като: true() Това означава, че всички пътища са включени в новия изглед. Изразите „Колони“ липсват, но не се нуждаем от колони в новия изглед. Диалоговия прозорец „Търси“ е свързан със създадения изглед. Целевия изглед е: count() / km(length()) > 1 Търси използвайки лупа Предишния пример има сериозен недостатък. За да изградите решетка на съвпадение,всички двойки редове от таблиците Roads и GasStations ще бъдат претърсени. Но всъщност, доста малко станции имат гориво пропан – ще бъде по – бързо да откриете всички такива станции. Ще решим задачата в две стъпки: 1) Изградете обикновен изглед PropaneStations, съдържащ единствено газ станции с опция за пропан. Основното редово множество е таблицата GasStations. Изразът „Където“ е Propane. Не са необходими изрази за „Колони“. 2) Втората стъпка е близка до примерната горе. Основното редово множество е също таблицата Roads, допълнителното е изгледа PropaneStations. Изразът за съответствието е: distance (object(), aux.object()) Изразът „Където“ е също true(). По – нататък действията са като в примера горе. Табличен изглед чрез сложна функция от двата вида Продължаваме предишния пример, като искаме да изградим същия изглед, но удължен с две нови стойности: брой станции на километър за всеки път и общо. Главното редово множество е таблицата Roads, допълнителното - изгледа PropaneStations. Изразът за съвпадение е: distance (object(), aux.object()) Изразът „където“ е: width Изразите „колони“ са: km(length()) width km(main.sum(length())) count() / km(length()) sum(count()) / main.sum(km(length())) Забележете, че main. е необходимо два пъти. В противен случай, изразът sum(km(length())) ще има абсолютно различно значение и странно: общатата дължина на всички станции близо до текущия път. Станциите са точки, а тяхната дължина е изчислена като NULL и този изразът ще бъде изчислен също като NULL.. Изглед на БД за получаване на всички точки в полигон Този пример е по-сложен. Първо трябва да дефинираме обобщен изглед изглед (вижте Изгледи в бази данни - Обобщени изгледи ). Този изглед е базиран върху две системни таблици (виж Вътрешна База данни на обектите ): ‘*Точки’ и ‘*Полигони’ и има само една колона. Изгледа изисква условията „съответствие“ и „където“ и израз (колони):
aux.count(if(aux.selected(),1,0) Сега селектираме полигон и изпълняваме търсене за всички заграждащи точки в диалоговия прозорец Търси:
Всички точки лежащи в рамките на този полигон ще бъдат селектирани в чертежа, като полигона от своя страна ще бъде деселектиран. |