Welcome Guest Search | Active Topics | Members | Log In

Operator wstawiania Options · View
dlipski
Posted: Tuesday, October 24, 2006 8:25:03 PM
Rank: Newbie

Joined: 10/13/2006
Posts: 3
Points: 0
Location: Warszawa
Witam
Razem z 4 osobami w ramach pracy magisterskiej zajmujemy sie implemntacja bazy danych opartej na SBQL.
Podczas dyskusji nad operatorem wstawiania(str.315 ksiazki ) napotkalismy 1 problem.

Problem polega na zlozonosci przy wstawieniu obiektu, przykładowo:

Jezeli chcemy wstawic do globalnego srodowiska obiekt o nazwie x z wartoscia 3 to z tego co zrozumialem nalezy napisac:
Code:
local :< create 3 as x


Doszlismy do tego ze mozna uzyc wersji prostrzej:
Code:
local :< 3 as x


Ale to nadal nie przypomina zadnego znanego nam jezyka programowania.
Chcielibysmy uzyskac efekt podobny do:

Code:
x :< 3


Przy odpowiedniej implementacji operatora :< wiadomo gdzie wstawic obiekt, wiadomo jaka ma mieć wartość ale nie jest wiadomo jaką ma mieć nazwę ponieważ
po ewaluacji x na QRES dostajemy pusty bag. Czy ktos probowal uzyskac podobna skladnie przy wstawianiu obiektu do podanej powyzej ?

Na razie bardzo wstepnie myslimy o tym aby funkcja bind zwracala tak jak do tej pory bag ale bag ten mial by nowy atrybut "nazwa".
Przykladowo

bind(abc) zwracal by bag:abc{OID1, OID2, OID3} gdzie abc jest parametrem przekazanym do funkcji bind.

Zdajemy sobie sprawe z istnienia zasady korespondencji dlatego jestesmy sceptyczni co do wprowadzania nowych atrybutow dla elementow zbioru Rezultat, nie mniej
dzieki temu skladania tego konkretnego operatora mogla by ulec znacznemu uprostrzeniu.

dlipski
Posted: Tuesday, October 24, 2006 9:03:53 PM
Rank: Newbie

Joined: 10/13/2006
Posts: 3
Points: 0
Location: Warszawa
Drugim rozwiazaniem jakie przychodzi mi do glowy(o ktorym chyba rozmawialem kiedys z profesorem Subieta i dzisiaj z Michalem Lentnerem)jest wprowadzenie obiektow agregujących.
Nie wiem tylko czy takie obiekty byly by tylko widoczne w składzie czy pojawialy by sie rowniez na stosach ENVS i QRES, jesli tak
to to rozwiazanie wydaje sie bardziej 'inwazyjne', pozostaje rowniez do rozstrzygniecia kiedy je tworzyc (wydaje sie ze w momencie tworzenia metamodelu ?)
Takie obiekty powinny miec nazwe wspolna dla wszystkich zagregowanych obiektow ale czy powinny miec OID ? Czy ich istnienie powinno byc znane programistom ?
I wiele innych pytan...

Czy ktos wprowadzil do swojej implementacji takie obiekty i moglby sie podzielic informacjami na ich temat ?

Pozdrawiam
Daniel Lipski
michal
Posted: Wednesday, October 25, 2006 12:07:23 PM

Rank: Advanced Member

Joined: 12/6/2004
Posts: 332
Points: -61
operator :< o ile mi wiadomo zaklada ze po lewej stronie pojawia sie oid obiektu zlozonego,
a prawej strony - oid dowolnego obiektu. poniewaz 3 nie jest referencja,
dlatego nie mozna napisac x :< 3.

prawa strona operacji

w :< create local 3 as x

tworzy nietrwaly obiekt o nazwie x z wartoscia 3, ktory jest nastepenie wypinany z lokalnego skladu
danych i podpinany pod w.

obiekty agregujace sluza do czegos zupelnie innego.
jest to prosta optymalizacja przyspieszajaca operacje na
stosie envs. obiekt agregujacy jest wewnetrznym obiektem
o jakiejs nazwie, do ktorego podpiete sa wszystkie inne
obiekty o tej samej nazwie na tym samym poziomie hierarchii.
na stos srodowiskowy trafia tylko binder z referencja do obiektu agregujacego,
zamiast do wszystkich obiektow ktore sa teraz jego podobiektami.
zwiazanie na envs referencji do obiektu agregujacego powoduje
automatyczne zwrocenie referencji wszystkich jego podobiektow.

Code:
emp (agg)
  emp (cpx)
   ename (str)
   job (str)
  emp (cpx)
   ename (str)
   job (str)


mam nadzieje ze to cos wyjasnia.
dlipski
Posted: Wednesday, October 25, 2006 8:04:09 PM
Rank: Newbie

Joined: 10/13/2006
Posts: 3
Points: 0
Location: Warszawa
Quote:
poniewaz 3 nie jest referencja


Jesli przyjmujac doslownie to co jest opisane w ksiazce masz racje. Ale na zdrowy rozum pisanie instrukcji w stylu:
Code:
create 123
create true
create "jakisNapis"

Chyba nie ma większego sensu (jesli nie potrzeba tego robic w Javie, C, PHP itp to czemu trzeba robic to w SBQL ???).
Swoją drogą nie rozumiem czym dla programisty miały by się różnić instrukcje:
Code:
3;
create 3;


Jeśli 3 nie jest referencją to rozumiem że nie można wykonać zapytań:
Code:
3.increment();
3.pow()


i podobnych:
Code:
"abc".length()
"abc".toUpperCase()


Powracając do tematu: przyjeliśmy że zapytanie 3; tworzy obiekt(bez nazwy) w lokalnym środowisku o podanej wartości, dlatego można napisać:
Code:
y :< 3 as x


Dodatkowo local jest slowem kluczowym służącym do wiązania 'najbliższego lokalnego środowiska' czasami będzie to środowisko metody czasami najwyższy poziom (korzeń) bazy danych.

A więc dopuszczalne są instrukcje:

Code:
local :< 3 as x


To co chcemy osiągnąć to pozbyć się operatora as (w tym konkretnym przypadku) a także x przenieść na lewą strone operatora uzyskując coś bardzo dobrze znanego:

Code:
x :< 3


Ale tu pojawiają się problemy, które opisałem w pierwszym poście.

Chyba bezdyskusyjny pozostaje fakt że pisanie:
Code:
x = 3;

Jest wygodniejsze od:
Code:
create local 3 as x


Quote:
obiekt agregujacy jest wewnetrznym obiektem o jakiejs nazwie

I można go wykorzystać do rozwiązania problemu że po ewaluacji x na qres jest pusty bag(w przypadku gdy nie ma obiektu x) i nie wiadomo
jaką ma mieć nazwę nowo stworzony obiekt. Problem w tym że wprowadzenie takich wewnetrznych obiektow agregujacych wymaga uwzglednienia ich w skladzie,
na stosach i we wszystkich operatorach (nawet jesli nie jest to rzecz wielce skomplikowana)

Pozdrawiam
Daniel
michal
Posted: Wednesday, October 25, 2006 8:32:44 PM

Rank: Advanced Member

Joined: 12/6/2004
Posts: 332
Points: -61
strasznie to pokrecone.

create w sbql jest potrzebne z takiego samego powodu jak create w sql.

as jest potrzebne do nadania nazwy nowo tworzonemu obiektowi
(create akceptuje tylko bindery). nie mozna napisac create 1,
bo kazdy obiekt musi miec nazwe. nie mozna tworzyc obiektow bez nazw.

nie uwazam rowniez za wlasciwe by zapytania tworzyly obiekty.
to zdecydowanie nie jest dobry pomysl.

x := 3 nie jest rownowazne create local 3 as x.
wersja rownowazna jest raczej x : integer := 3. deklaracja x : integer
w czasie wykonania automatycznie tlumaczona jest jest na cos a'la
create local 0 as x.

nie do konca wiem o co chodzi z tym pustym bagiem. jak nie ma obiektu, to jak mozna cos do niego
wstawic? na tym polega wstawianie ze jedna istniejaca rzecz wstawia sie do drugiej istniejacej.
mam wrazenie ze jest tu jakies pomieszanie wstawiania z podstawianiem.
dlipski
Posted: Wednesday, October 25, 2006 8:50:47 PM
Rank: Newbie

Joined: 10/13/2006
Posts: 3
Points: 0
Location: Warszawa
Quote:
create w sbql jest potrzebne z takiego samego powodu jak create w sql.


Nie chcemy zrezygnowac z create tylko w przypadku x :< 3 automatycznie i niejawnie je wykonywac (a ze nie mamy kontroli typow wiec nie mamy innej mozliwosci jak wywolanie go podczas ewaluacji operatora :<).

Quote:
create akceptuje tylko bindery

To opisane w ksiazce tak, ale czemu by go nie zmodyfikowac ?

Quote:
nie mozna tworzyc obiektow bez nazw

Czemu ?

Quote:
nie uwazam rowniez za wlasciwe by zapytania tworzyly obiekty.
to zdecydowanie nie jest dobry pomysl.


Przyznam szczerze ze tego nie rozumiem wogole.

Przeciez
Code:
x :< create local 3 as y

Jest takim samym zapytaniem jak
Code:
x :< 3


Quote:
wersja rownowazna jest raczej x : integer := 3. deklaracja x : integer
w czasie wykonania automatycznie tlumaczona jest jest na cos a'la
create local 0 as x.


Zalezy od tworcy jezyka, a co jesli x : integer; ma tworzyc pusty bag ? Jak wtedy podstawic wartosc ?
Pozostaje:
Code:
create local 3 as x


A my chcemy pisac:
Code:
x :< 3


Jeszcze raz: intencja x :< 3 jest stworzenie obiektu x o wartosci 3. A nie wstawienie do obiektu x nowego obiektu 3.
Przykladowo jak do osoby chce wstawic imie to zamiast pisac:

Code:
osoba :< create local "Adam" as imie


Duzo latwiej jest napisac:

Code:
osoba.imie :< "Adam"


Nie wiem czy to cos wyjasnia jutro bede w szkole, postaram sie Cie zlapac i porozmawiamy.



Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

Powered by Yet Another Forum.net version 1.9.1.6 (NET v2.0) - 11/14/2007
Copyright © 2003-2006 Yet Another Forum.net. All rights reserved.
This page was generated in 0.081 seconds.