Ievads - Datu bāzes tehnoloģijas | Izglītība nedrīkst ...



R?GAS TEHNISK? UNIVERSIT?TEDatorzinātnes un informācijas tehnolo?ijas fakultāte?CASE rīki datu bāzu projektē?anā”?SQL konstrukcijas un optimizācija Sybase DBVS”Izstrādāja: Mārti?? Pauk?te (II DGDB – 3 Apl.Num.: 051RDB097)Pārbaudīja: asoc. prof. Jānis EiduksRīga, 2012 TOC \o "1-3" \h \z \u Ievads PAGEREF _Toc341219606 \h 4Pieslēg?anās datubāzei un pārvaldība PAGEREF _Toc341219607 \h 6Datu ielāde no faila PAGEREF _Toc341219608 \h 11SQL izpildes plāns PAGEREF _Toc341219609 \h 16Pilnā skenē?ana (Fullscan) PAGEREF _Toc341219610 \h 21Skenē?ana pēc indeksa (Index Scan) PAGEREF _Toc341219611 \h 22Iegultie cikli (Nested Loops) PAGEREF _Toc341219612 \h 24HASH Savienojums (Hash Join) PAGEREF _Toc341219613 \h 27Indeksa izmanto?anas uzspie?ana PAGEREF _Toc341219614 \h 29Sapludinā?anas savienojums (Merge Join) PAGEREF _Toc341219615 \h 30ASA un ASE! PAGEREF _Toc341219616 \h 33Datubāzes atmi?as palielinā?ana (ASE) PAGEREF _Toc341219617 \h 37Character Set mai?a PAGEREF _Toc341219618 \h 38Statistikas savāk?ana PAGEREF _Toc341219619 \h 42Tabulu savieno?anas ieteikumi PAGEREF _Toc341219620 \h 43Transact-SQL jeb T-SQL PAGEREF _Toc341219621 \h 46Sybase raksturīgais SQL (DML,DDL) un T-SQL PAGEREF _Toc341219622 \h 47Palīgtabula (dual?) PAGEREF _Toc341219623 \h 47Rezervēto vārdu ierobe?ojumi PAGEREF _Toc341219624 \h 47Re?istra jutīgums PAGEREF _Toc341219625 \h 47SQL atvasinātās (derived) tabulas PAGEREF _Toc341219626 \h 48Datumu funkcijas PAGEREF _Toc341219627 \h 48Teksta apstrādes funkcijas PAGEREF _Toc341219628 \h 49Skaitliskās funkcijas PAGEREF _Toc341219629 \h 50Salīdzinā?anas operatori PAGEREF _Toc341219630 \h 51Lokālās īslaicīgās tabulas izveido?ana (ASA) PAGEREF _Toc341219631 \h 51Materializētie skati (ASA) PAGEREF _Toc341219632 \h 52Surogāt-atslēgas un identifikatori PAGEREF _Toc341219633 \h 52Tabulas līme?a ierobe?ojumi (Table-Level Constraints) PAGEREF _Toc341219634 \h 53XML datu apstrāde (ASE) PAGEREF _Toc341219635 \h 55SQL - datu grupē?ana un citas konstrukcijas PAGEREF _Toc341219636 \h 57Group by - Having PAGEREF _Toc341219637 \h 57GROUP BY - CUBE/ROLLUP (ASA) PAGEREF _Toc341219638 \h 58Hierarhiskie jeb Rekursīvie vaicājumi PAGEREF _Toc341219639 \h 58Klona tabulas vaicājumi (ASA) PAGEREF _Toc341219640 \h 59Kopsavilkums PAGEREF _Toc341219641 \h 60Trūkumi PAGEREF _Toc341219642 \h 60Priek?rocības PAGEREF _Toc341219643 \h 60Secinājumi PAGEREF _Toc341219644 \h 60Izmantotie avoti PAGEREF _Toc341219645 \h 62Tulkojumi un saīsinājumi PAGEREF _Toc341219646 \h 63Pielikumi PAGEREF _Toc341219647 \h 64DWH DLL PAGEREF _Toc341219648 \h 64DWH tabulu sasaiste PAGEREF _Toc341219649 \h 65Ievads DBVS instalāciju var lejupielādēt no . Tika izvēlēts produktu komplekts, ka saucas ?SQL Anywhere Developer Edition”:Produkta instalācijas laikā būs nepiecie?ams ievadīt re?istrācijas kodu, ko var sa?emt pēc re?istrācijas izstrādātāja vietnē un kas ir derīga 60 dienas.?ajā gadījumā tika izvēlēta SQL Anywhere versija 12.0.1 un instalēta uz Windows x86 operētājsistēmas:Pieslēg?anās datubāzei un pārvaldībaDialogam ar datubāzi, tiek lietots rīks ?Interactive SQL”:?is instalācijas komplekts ietver arī datubāzes parauga instanci. Ar pogu <Browse> atver ODBC datu avotus, kurā jau ir pievienota ?SQL Anywhere 12 Demo”, kuru arī izvēlas.Norāda lietotāju ?DBA” un paroli ?sql” (pēc noklusējuma) un spie? <Connect>:Un nāko?ajā logā jau var rakstīt SQL komandas un sākt strādāt ar datubāzi:Otrs lietojums, kas nāk komplektā, ir ?Sybase Central”, kurā pieejamas da?ādas administratīvas iespējas:Izmanto tos pa?u jau zināmos pieslēg?anās parametrus.Datubāzes pārskatsDatubāzes objektu pārskatsPieslēgumu pārskats – tajā redzamas 2 sesijas – viena ir iepriek? palaistā ?Interactive SQL” sesija, bet otra – ?ī pa?a ?Sybase Central” sesija:Ir arī iespēja apskatīt tādu nosacītu ER diagrammu, kurā var izvēlēties attēlojamās tabulas:?ER diagramma”Datu ielāde no faila?o iespēju izvēlējos uzsvērt atsevi??i, jo man pa?am tā atviegloja darbu un izpelnījās manu atzinību ar savu vienkār?ību, saprotamību.Izveidojam tabulu:CREATE TABLE mpa_employees (employee_id INTEGER ,name VARCHAR(255) ,person_first_name VARCHAR(255) ,person_last_name VARCHAR(255) ,person_code VARCHAR(255) ,department_id INTEGER );Piemēram ir sagatavots .csv fails, kas satur datus par personām. Tajā ir 5 kolonnas: identifikators, personas kods, vārds un uzvārds, atsevi??i vārds, atsevi??i uzvārds.Faila fragments:Iestartējam programmu Sybase Interactive SQL un izvēlamies Data > Import:Tas atver vedni, kurā 1. solī norāda pirmo opciju – datu ielāde no faila:Norāda failu:Izvēlas ielādēt datus eksistējo?ā tabulā (mpa_employees):Nāko?ajā solī iespējams norādīt iestatījumus faila nolasī?anai – ko uztvert par kolonnu atdalītājsimbolu utt.Atkarībā no iestatījumiem, tiek parādīts priek?skatījums ar da?iem no faila apstrādātajiem ierakstiem – lai varētu redzēt vai pareizi esam sakonfigurēju?i faila lasī?anu:Nāko?ajā solī iespējams norādīt kolonnu secību, lai tā atbilstu faila kolonnu secībai: Izmantojot izvēlni uz katras kolonnas, sakārto atbilstību: Tālāk notiek faila imports:Automātiski izpildās atlases vaicājums uz aizpildīto tabulu:Piezīme: ?ajā brīdī ir jāuzmanās, jo uz?enerētais vaicājums no tabulas tiek rakstīts tajā pa?ā SQL failā, kas ir bijis atvērts, turklāt viss tā iepriek?ējais saturs tiek nodzēsts. Tāpēc, ja failā pirms tam bija kaut kas svarīgs, tad labāk nospiest divreiz CTRL+Z, lai atgrieztu visu pazaudēto tekstu.Piezīme: ?ajā brīdī vēl var atcelt ielādētos datus ar ROLLBACK. Ja vēlas datus saglabāt, tad jāizpilda SQL > Commit:SQL izpildes plānsVaicājuma izpildes plānu no Interactive SQL konsoles palai?, stāvot uz vaicājuma un izvēloties no rīkjoslas Tools > Plan Viewer vai ērtāk ar Shift + F5.Tas atver plāna analīzes logu Plan Viewer, kurā pēc <Get Plan> pogas nospie?anas optimizators uz?enerē izpildes plānu:Vaicājumu var turpināt pielāgot ?ajā pa?ā logā, bet dīvaini un ?oti neērti gan ir tas, ka nav pielāgojams SQL loga augstums. Attēlā redzamais plāns analizēts ?ādam vaicājumam:SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = 'Chin' AND emp.givenName = 'Philip' AND so.customerID = cus.ID AND cus.City = 'Elmira'ORDER BY so.orderDate DESC;Ir redzams grafisks vaicājuma attēlojums un, uzklik??inot uz katru koka mezglu, labās puses logā (??irk?os <Details> un <Advanced Details>) parādās detalizēta informācija par doto operāciju.Tas, kas vēl ir parocīgi, ir vaicājuma izpildes plāna saglabā?anas iespēja.Fails saglabājas ar papla?inājumu *.saplan XML formātā:Faila fragmentsAttiecīgi ?ādus plānu failus ar ?o pa?u rīku var atvērt vēlāk un var salīdzināt, piemēram, ar tāda pa?a vaicājuma izpildes plānu kādā citā reizē. Protams, var arī salīdzināt plānus kā vienkār?us 2 XML failus ar jebkuru teksta salīdzinātāju.Te gan ir viens mīnuss – uz Windows ma?īnas rīks pats neasociē savus .saplan failus ar sevi. Tāpēc uzreiz ?ādu failu atvērt nevar – vienmēr ir jāpieslēdzas DB ar Interactive SQL, tad jāatver Plan Viewer un tad tikai var atvērt failu ar saglabāto plānu.Izpildes plānu bez grafiska attēlojuma var apskatīt arī pa?ā Interactive SQL logā. Tas gan ir nedaudz neparocīgāk, jo, ja vaicājumā ir tekstuāli filtri, tad vaicājums ir jāparedi?ē - viena apostrofa vietā jāliek 2 apostrofi.?sais variants – noderīgi ātrai plānu salīdzinā?anai, ta?u sniedz minimālu informāciju par izpildes plānu:SELECT EXPLANATION ('SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = ''Chin'' AND emp.givenName = ''Philip'' AND so.customerID = cus.ID AND cus.City = ''Elmira''ORDER BY so.orderDate DESC;') AS myShortPlan;Tas atgrie? visu plāu vienā teksta rindi?ā:Garais variants – sniedz jau detalizētāku informāciju par plānu un diezgan pārskatāmā veidā:SELECT PLAN ('SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = ''Chin'' AND emp.givenName = ''Philip'' AND so.customerID = cus.ID AND cus.City = ''Elmira''ORDER BY so.orderDate DESC;') AS myLongPlan;Tas arī rezultātu atgrie? 1 teksta rindi?ā, ta?u tajā ir teksts vairākās rindās. Ar peles dubultklik??i atver logu, kurā var pārskatāmā veidā aplūkot izpildes plānu:Piezīme: Pēc noklusējuma programmas iestatījumos var būt pārāk maza vērtība nolasītās vērtības ierakstī?anai ke?atmi?ā. Tāpēc to vēlams palielināt (attēlā noklusētā vērtība ?im plānam tika palielināta uz 1000).Pretējā gadījumā, verot va?ā plānu ar peles dubultklik??i, iegūs k?ūdu:Un tiks parādīts tikai da?ējs izpildes plāna teksts.Pilnā skenē?ana (Fullscan)Aplūkosim izpildes plānu vienkār?am vaicājumam uz tabulu, kurā jau ieimportējām datus - 1’190’779 ierakstus par darbiniekiem.Starp citu, arī Sybase SQL COUNT funkciju var izmantot ar nedokumentēto COUNT(1):SELECT count(1) FROM mpa_employees;Tātad apskatīsim plānu vaicājumam:SELECT * FROM mpa_employees WHERE name = 'IMANTS PAUK?TE';Izpildes plāns - FullScanSkenē?ana pēc indeksa (Index Scan)Izveidojam indeksu darbinieku tabulai (mpa_employees) uz lauku, kas satur darbinieka vārdu (name):Tagad izpildes plāns tam pa?am vaicājumam jau izskatās citādāk.Tiek izmantots tikko izveidotais indekss. ?āds vaicājums izpildītos ievērojami ātrāk.Arī diagrammā ?eometriskā forma ap tabulas nosaukumu ir trapecveidīga – tas liecina par indeksa izmanto?anu.?īs attēlojuma iezīmes ir arī konfigurējamas, turpat uz diagrammas ar peles labo tausti?u atvērot izvēlni Customize:Iegultie cikli (Nested Loops)Tas ir divu tabulu sasaistes princips, kad katram vienas tabulas ierakstam meklē atbilsto?u ierakstu otrā tabulā, skenējot to pēc indeksa.Izveidojam tabulu, kas saturēs datus par noda?ām:CREATE TABLE mpa_departments (department_id INTEGER ,dept_no INTEGER ,department_name VARCHAR(255) );Izveidojam .csv failu un ielādējam to tabulā ar jau minēto rīku:Aizpildām da?iem tūksto?iem darbinieku tā departamenta piederību ar sekojo?ām primitīvām SQL komandām:UPDATE mpa_employees SET department_id = 1 WHERE employee_id BETWEEN 1000 AND 2000;UPDATE mpa_employees SET department_id = 2 WHERE employee_id BETWEEN 2000 AND 3000;UPDATE mpa_employees SET department_id = 3 WHERE employee_id BETWEEN 3000 AND 4000;UPDATE mpa_employees SET department_id = 4 WHERE employee_id BETWEEN 4000 AND 5000;UPDATE mpa_employees SET department_id = 5 WHERE employee_id BETWEEN 5000 AND 6000;UPDATE mpa_employees SET department_id = 6 WHERE employee_id BETWEEN 6000 AND 7000;UPDATE mpa_employees SET department_id = 7 WHERE employee_id BETWEEN 7000 AND 8000;UPDATE mpa_employees SET department_id = 8 WHERE employee_id BETWEEN 8000 AND 9000;UPDATE mpa_employees SET department_id = 9 WHERE employee_id BETWEEN 9000 AND 10000;UPDATE mpa_employees SET department_id = 10 WHERE employee_id BETWEEN 10000 AND 11000;Ar tausti?u kombināciju Ctrl + Shift + C – izpilda COMMIT:Apskatīsim izpildes plānu sekojo?am vaicājuma, kas savieno departamentus (mpa_departments) un darbiniekus (mpa_employees):SELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_id;Izveidosim indeksu, lai ieslēgtos, kas, visticamāk, liks optimizatoram izvēlēties NESTED LOOPS:CREATE INDEX mpa_employees_u02 ON mpa_employees(department_id);Diagrammā tabulas tiek identificētas ar SQL vaicājumā norādītājiem pie?emtajiem vārdiem ?dep” un ?emp”. Tabulas tiek savienotas ar ?JNL” (Join Nested Loops).?ādi izskatās plāns tekstuālā veidā:( Plan [ Total Cost Estimate: 8.9028, Costed Best Plans: 2, Costed Plans: 46, Optimization Time: 0.00067225, Estimated Cache Pages: 21546 ] ( NestedLoopsJoin ( TableScan ( mpa_departments dep ) ) ( IndexScan ( mpa_employees emp ) mpa_employees_u02[ emp.department_id = dep.department_id : 9.9685% Statistics | Join ] ) ))HASH Savienojums (Hash Join)Izveidosim nelielu tabuli?u, kas saturēs pilsonību sarakstu:CREATE TABLE mpa_nationalities (code VARCHAR(5) ,description VARCHAR(30) );Ieliksim tajā 10 ierakstus ar vienkār?u INSERT:INSERT INTO mpa_nationalities VALUES('LV','Latvijas');INSERT INTO mpa_nationalities VALUES('RU','Krievijas');INSERT INTO mpa_nationalities VALUES('EE','Igaunijas');INSERT INTO mpa_nationalities VALUES('GB','Apvienotās karalistes');INSERT INTO mpa_nationalities VALUES('DE','Vācijas');INSERT INTO mpa_nationalities VALUES('US','ASV');INSERT INTO mpa_nationalities VALUES('PL','Polijas');INSERT INTO mpa_nationalities VALUES('UA','Ukrainas');INSERT INTO mpa_nationalities VALUES('LT','Lietuvas');INSERT INTO mpa_nationalities VALUES('TH','Taizemes');Pievienojam darbinieku tabulai lauku, ar kuru sasaistīsim nelielo pilsonības tabulu.ALTER TABLE mpa_employees ADD nationality_code VARCHAR(5)Izmantojot vienkār?as UPDATE izteiksmes UPDATE mpa_employees SET nationality_code = 'LV' WHERE employee_id BETWEEN 0 AND 600000;UPDATE mpa_employees SET nationality_code = 'RU' WHERE employee_id BETWEEN 600000 AND 1200000;UPDATE mpa_employees SET nationality_code = 'EE' WHERE employee_id BETWEEN 1200000 AND 1800000;UPDATE mpa_employees SET nationality_code = 'GB' WHERE employee_id BETWEEN 1800000 AND 2400000;UPDATE mpa_employees SET nationality_code = 'US' WHERE employee_id BETWEEN 3000000 AND 3600000; UPDATE mpa_employees SET nationality_code = 'PL' WHERE employee_id BETWEEN 3600000 AND 4200000;UPDATE mpa_employees SET nationality_code = 'LT' WHERE employee_id BETWEEN 4800000 AND 5400000;UPDATE mpa_employees SET nationality_code = 'TH' WHERE employee_id BETWEEN 5400000 AND 5973562;Pie?emam, ka saprātīgs DBVS optimizators izvēlēsies lietot Hash Join, par cik viena no saistāmajām tabulām ir neliela un to var ielasīt operatīvajā atmi?ā. Aplūkosim plānu sekojo?ajam vaicājumam:SELECT nat.code + ':' + nat.description AS nationality ,emp.person_first_name + emp.person_last_name AS person FROM mpa_employees emp ,mpa_nationalities nat WHERE emp.nationality_code = nat.code;JH*, acīmredzot, apzīmē tie?i ?o sasaistes veidu.Izpildes plāns teksta veidā:( Plan [ Total Cost Estimate: 16.076, Costed Best Plans: 2, Costed Plans: 52, Optimization Time: 0.00074356, Estimated Cache Pages: 21546 ] ( WorkTable ( HashJoin* [ emp.nationality_code = nat.code : 10% Statistics | Join ] ( TableScan ( mpa_employees emp ) ) ( TableScan ( mpa_nationalities nat ) ) ) ))Indeksa izmanto?anas uzspie?anaApskatīsim izpildes plānu ?ādam vienkār?am vaicājumam uz jau iepriek? izveidoto nelielo pilsonības tabuli?u:SELECT * FROM mpa_nationalities WHERE description LIKE 'A%';Notiek tabulas pilna skenē?ana. Tas, protams, ?ādai mazai tabulai arī ir pilnīgi piemēroti.Izveidosim unikālu indeksu uz abiem tabulas laukiem:CREATE UNIQUE INDEX mpa_nationalities_U1 ON mpa_nationalities(code,description);Apskatīsim vai izpildes plāns ir mainījies:SELECT EXPLANATION ('SELECT * FROM mpa_nationalities WHERE description LIKE ''A%''') AS myPlan?sajā plānā ir redzams ?<seq>” (Sequential Read) – tātad lasī?anas veids nav mainījies.Bet tagad pielietosim ieteikumu izmantot izveidoto indeksu ar sekojo?u vaicājumu:SELECT * FROM mpa_nationalities WITH (INDEX(mpa_nationalities_U1)) WHERE description LIKE 'A%'Plāna diagrammā ir redzamas izmai?as – ieteikums tiek ?emts vērā:Arī apskatot īsā plāna variantu ar komandu:SELECT EXPLANATION ('SELECT * FROM mpa_nationalities WITH (INDEX (mpa_nationalities_U1))WHERE description LIKE ''A%''') AS myPlanTunedLīdzīgi ar WITH var norādīt vairākus indeksus, atdalot tos ar komatu.WITH (NO INDEX) – ?ādi var norādīt, lai neizmantotu indeksus nekādā gadījumā.Sapludinā?anas savienojums (Merge Join)Mē?ināsim panākt vēl vienu tabulu savieno?anas veidu ?Sort-Merge Join” jeb ?Merge Join”.Izveidosim tabulu, kas saturēs darbinieku tabulas dublikātus.CREATE TABLE mpa_employee_duplicates (emp_name VARCHAR(255) ,creation_date DATE );Ievietojam datu kopiju jaunajā tabulā:INSERT mpa_employee_duplicatesSELECT name, GETDATE() FROM mpa_employees;Izveidojam sekojo?u vaicājumu:SELECT emp.person_code ,dup.* FROM mpa_employees emp ,mpa_employee_duplicates dup WHERE emp.name = dup.emp_name;Vaicājums atlasa datus no darbinieku (emp) un darbinieku kopijas (dup) tabulām un savieno tās pēc darbinieka vārda. Uz emp.name ir jau iepriek? izveidotais indekss mpa_employees_n01. Tādus DB objektus kā indeksus var apskatīt Sybase Cetral, ta?u izskatās, ka tas nav paredzēts lielam objektu skaitam, jo nav nekādas filtrē?anas iespējas – ir tikai saraksts: Bet, par cik abās tabulās ir vairāk kā miljons ierakstu, tad diez vai optimizators izmantos minēto indeksu un Nested Loops, lai savienotu ?īs tabulas.Vaicājuma izpildes plāns:Plānā tomēr redzams, ka starp tabulām emp un dup ir ?JHP”(Join Hash Parallel). Respektīvi, tiek lietots HASH savieno?anas veids. Vārds ?Parallel” nozīmē, ka paralēli darbojas vairāki procesi jeb servisi. Redzams arī, ka kā alternatīvs variants ticis izskatīts Nested Loops savienojums.Bet mēr?is tomēr bija panākt Merge savieno?anu. Ir zināms, ka Merge ir izdevīgāks tad, ja abi lielie datu bloki (tabulas) ir sakārtotas pēc savienojamajām vērtībām. ?im nolūkam arī uz otra savienojuma lauka dep.emp_name izveidosim indeksu un cerēsim, ka optimizators nolems izmantot Merge:CREATE index mpa_emp_dup_n01 ON mpa_employee_duplicates (emp_name);Un apskatāmies plānu vēlreiz:Plānā ir parādījies ?JM” (Join Merge). Pie milzīgiem datu apjomiem ?āds savienojums varētu būt piemērotākais.ASA un ASE!Sybase bija pietieko?i neskaidri savu produktu aprakstos, tādē? ?ādā pa?apmācības procesā, nonākot līdz ?ai vietai, tika konstatēts, ka ?SQL Anywhere” ir paredzēts vairāk kā mobila DVBS un darbojas ar ?ASA” (Adaptive Server Anywhere), kas piedāvā daudz mazāk padzi?inātas funkcionalitātes at??irībā no ?ASE” (Adaptive Server Enterprise), BET (kā vēlāk izrādījās) da?ās lietās arī Anywhere ir pārāks par Enterprise).Turklāt ASE nav vajadzīga licencē?ana, tāpēc tālākais darbs tika turpināts papildus ar ?ASE 15.7 DE”:Turpmāk tekstā iespējām, kas būs pieejamas tikai ar vienu no serveriem, būs atzīmēts ?ASA” vai ?ASE”.Izvēlamies pilno instalāciju, lai vēlāk atkal neattaptos, ka kaut kas pietrūkst:Izvēlamies izstrādātāja bezmaksas licenci:Visas utilītas, kas ir ietvertas ?ajā instalācijas pakā:Ieliek papildus 2 ?ek?us:Adaptive Server veiktspējas konfigurācijaiParauga datubāzu izveido?anaiPiezīme: Obligāti sekot līdzi Windows firewall pazi?ojumiem un at?aut visu jauno servisu darbību.Arī ASE nāk līdzi līdzīga konsole ?Interactive SQL”:Izveidotais serveris pēc noklusējuma sakrīt ar lokālās ma?īnas nosaukumu (PC Name) un, lai pieslēgtos DB, izmanto pa ce?am instalācijas laikā izveidoto lietotāju ?sa” un norādīto paroli:ASE darbs notiek ar ?oti līdzīgu ?Interactive SQL” ar nelielām at??irībām, un izmantojamajās SQL konstrukcijās ir at??irības.Salīdzinājumam – tas ir līdzīgi kā Oracle Express Edition (XE) un Oracle Enterprise Edition.Piezīme: Iespējams, ka pēc datora pārstartē?anas ASE pats neiestartēsies. Tādā gadījumā var palaist Sybase > Adaptive Server Enterprise > Server Config un, mē?inot pieslēgties, pie reizes var iestartēt serveri:Vai arī atvērt My Computer > Manage > Services And Applications > Services - atrast vajadzīgo servisu un iestartēt to:Datubāzes atmi?as palielinā?ana (ASE)?o punktu atsevi??i uzsvēru, jo ?īs problēmas risinā?ana aiz?ēma neadekvāti daudz laika.Kad ASE ir uzinstalēts, izpildām visus DDL skriptus un datu ielādes, kas minētas iepriek?, arī ?ajā DB.Radās problēmas ar ?urnāla informācijas uzglabā?anu datu importa laikā – imports tika apturēts, jo transakciju ?urnālam pietrūcis vietas:Acīmredzot, nav noteikts pietieko?i liela vieta ?urnāla informācijai.SELECT db_name() -- Noskaidro DB nosaukumusp_helpdb master -- Parāda visas ierīces (Devices), ko lieto ?ī DBIr tikai 1 ierīce, kas arī saucas ?master” (Tāpat kā datubāze)DISK RESIZE name = master , size ="100M" -- Palielina ierīces (Device) izmēru par norādīto apjomusp_helpdevice master -- Var apskatīt ierīces izmērusALTER DATABASE <dbname> LOG ON <devicename> = <size in MB> -- Palielina Log segment par norādīto apjomuALTER DATABASE master LOG OFF master = "50M"sp_helpdevice master -- Var pārliecināties, ka physical disc Free space ir samazinājies par Log pie??irto apjomuTagad datu importam vajadzētu pabeigties veiksmīgi:Character Set mai?aTika konstatēta problēma, ka SAE tika uzinstalēts ar nepareizu CharacterSet.Ielādētajā tabulā mpa_employees latvie?u valodas diakritiskās zīmes bija nelasāmas. Lai to labotu, ir jānomaina datubāzes CharacerSet un, iespējams, jāatkārto ielāde. To dara ar programmu ?Server Config:Izvēlas konfigurēt eso?u Adaptive Server:Izvēlas vienīgo serveri, kas, kā jau tika minēts, pēc noklusējuma saucas tāpat kā lokālā ma?īna:Pieslēdzas ar to pa?u lietotāju ?sa”:Izvēlas Character Set pievieno?anu/izdzē?anu:Ar pieejamo pogu ?Add” (bulti?a) pievieno ?Unicode 3.1 UTF-8 Character Set”:Atgrie?as iepriek?ējā lokā un izvēlas noklusētā Character Set lieto?anu (Set Default):Izvēlas nupat pievienoto:Saglabā izmai?as:Tas var prasīt kādu laiku:Statistikas savāk?anaKā zināms, vaicājumu optimizatoram ir nepiecie?ama aktuāla statistika par datubāzes objektiem (tabulām, jauniem indeksiem, ienāko?ajiem datiem utt.). DVBS ?SQL Anywhere” (Adaptive Server Anywhere) kop? 1992. gada piedāvā autonomu, pa?-organizējo?u statistikas savāk?anu, tāpēc tam nav paredzēta īpa?a komanda kā tas ir citās DBVS. SQL Anywhere 12. versijā ?ī funkcionalitāte ietver:selektivitātes novērtējuma k?ūdu vaicājumos apkopo?ana un kategorizē?anaautomātiska, autonoma resursu taupīga statistisko datu k?ūdu labo?anaautonoms kolonnu histogrammu uzturē?anas monitoringsTa?u Adaptive Server Enterprise versijā ir pieejama manuāla statistikas savāk?anas sintakse:UPDATE STATISTICS mpa_employees; -- Savāc norādītajai tabulai statistikuSintakse:update statistics table_name [[ partition data_partition_name ] [ (column_list ) ] | index_name [ partition index_partition_name ] ] [ using step values ] [ with consumers = consumers ][, sampling=N percent ]Tabulu savieno?anas ieteikumiASE piedāvā iespēju dot padomus SQL vaicājumu izpildes plānu optimizatoram.Apskatīsim izpildes plānu uz ASE tam pa?am vaicājumam, ko izpildījām uz ASA:SELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_id;ASE Interactive SQL plāna pārlūks izskatās nedaudz savādāk un mūsdienīgāk:Ta?u tam NAV plāna pār?enerē?anas pogas, kas atkal ir apgrūtino?i.Plāna pārlūkā ir jauns ??irklis XML, kurā var apskatīt plānu XML formātā:Ir redzams, ka Nested Loops vietā ?oreiz optimizators nolēmis lietot Sort-Merge savieno?anu. ?ajā gadījumā neinteresējamies, kāpēc tas tā ir, bet vaicājumam izmantojam ieteikumu (Hint), kas piespiedīs izmantot Nested Loops:-- ASE: Uzspie? Nested LoopsSELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_idplan "(nl_join (scan dep) (scan emp))" -- HintUn izpildes plānā redzamas izmai?as:Tāpat varam uzspiest lietot Hash Join:-- ASE: Uzspie? Hash JoinSELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_idplan "(h_join (scan dep) (scan emp))" -- HintLīdzīgā veidā ir pielietojami arī citi ieteikumi.Piemēram, pirms vaicājuma ieliekot ieteikumu ?SET FORCEPLAN ON”, vaicājuma izpildei tiks uzspiesta tabulu savieno?anas secība – tāda kādā tabulas uzskaitītas vaicājuma FROM da?ā.Transact-SQL jeb T-SQLSybase DBVS bez SQL ir sava procedurālā programmē?anas valoda ?Transact-SQL” – SQL papla?inājums, kas sevī ietver tādas lietas kā:Lokālie mainīgieMainīgo izmanto?ana SQL vaicājumosDa?ādas funkcijas teksta, datuma un matemātiskās funkcijasPlūsmas kontrole (IF, WHILE,…)Glabājamās procedūras (Nav glabājamās pakas)Iz?ēmumu apstrādeKopu pievieno?anu (BULK INSERT)SQL vaicājumu diagnosticējo?ās operācijas U.c.Līdzīgi kā Oracle ir PL/SQL, ta?u ?im ir daudz mazāk iespēju, salīdzinot ar Oracle.Neliels piemērs – procedūras izveido?ana un izpilde:CREATE TABLE mpa_test_table (id INTEGER);DROP PROCEDURE mpa_delete_record;CREATE PROCEDURE mpa_delete_record @rec_id INTEGER = NULLAS IF @rec_id IS NULL RAISERROR 50001 "K?ūda! Padodiet parametru" ELSE DELETE mpa_test_table WHERE id = @rec_id IF @@rowcount > 0 print 'Ieraksts izdzēsts...' -- Nāk ārā tikai uz ASE ELSE print 'Ieraksts ar tādu ID (%1!) tabulā neeksitē...',@rec_idProcedūras izsaukums:mpa_delete_record 7INSERT INTO mpa_test_table VALUES(7);mpa_delete_record @rec_id=7 Sybase raksturīgais SQL (DML,DDL) un T-SQLSybase ir da?as apstrādes funkcijas, kas it kā nav redzētas tādā formā citās DBVS. Tālāk sekos da?i piemēri.Protams, ?īm funkcijām var atrast alternatīvas – citu funkciju kombinācijas.Palīgtabula (dual?)Lai parādītu kādu vērtību, nav jāizmanto kāda palīgtabula kā ?dual” Oracle (SELECT 'ABC' FROM dual). ?ādu vaicājumu Sybase raksta vienkār?i bez atsauk?anās uz tabulu:Rezervēto vārdu ierobe?ojumiNevar izmantot tabulu kolonnu nosaukumos rezervētos vārdus. Piemēram, sekojo?u DML uz ASE nevarētu izpildīt dē? rezervētā vārda COUNT:CREATE TABLE mpa_test_table (id INTEGER ,count INTEGER );Piemēram, Oracle DBVS tas problēmas nesagādā.Re?istra jutīgumsASE SQL ir re?istra jutīgs. Piemēram, ja tabulas DDL būs ?āds:CREATE TABLE mpa_test_table (id INTEGER ,countABC INTEGER );Tad vaicājums:SELECT countAbc FROM mpa_test_table;Iegūs k?ūdu:Jāatsaucas ir precīzi uz tādu pa?u lauku kā ir definēts DLL (?countABC”).Uz ASA tas neattiecas.SQL atvasinātās (derived) tabulasTas ir jēdziens Sybase SQL, kas nav nekas cits kā SELECT, kas balstīts uz citu SELECT:SELECT * FROM (SELECT * FROM table_1) derived_table_1Vienkār?i ?o definīciju ir noderīgi zināt. Un svarīgi, ka atvasinātajai tabulai ir iedots pie?emtais vārds (alias), citādi, piemēram, vaicājums: SELECT * FROM (SELECT id FROM mpa_test_table)izdos k?ūdu:Ir jāpie??ir pie?emtais vārds jeb Sybase terminolo?ijā – korelācijas vārds (Correlation Name). Pareizi būtu rakstīt ?ādi:SELECT * FROM (SELECT id FROM mpa_test_table) mttDatumu funkcijasDatumu konvertācijas funkcijā norāda datu tipu uz kādu vēlas konvertēt, konvertējamo vērtību un formātu, un to lieto sekojo?i:SELECT CONVERT(date,'02-29-12',10) myDate -- 10 = mm-dd-yy SELECT CONVERT(char,getdate(),103) myCharDate -- 103 = dd/mm/yyyyKonvertācijas formātu tabula-- (ASA) Starpība da?ādās mērvienībās (dienas, stundas, minūtes) starp 2 norādītiem datumiem:SELECT YEARS(now()-365*2,now()) y – GadiSELECT MONTHS(now()-30*3,now()) m – Mēne?iSELECT DAYS(now()-100,now()) d – DienasSELECT WEEKS(now()-30,now()) w – Nedē?asSELECT HOURS(now()-2,now()) h – StundasSELECT MINUTES(CONVERT(time,'20:14:00',108),CONVERT(time,'21:15:00',108)) m – MinūtesSELECT SECONDS(CONVERT(time,'21:10:00',108),CONVERT(time,'21:15:00',108)) s – Sekundes-- Ar 1 argumentu, var noskaidrot, cik nedē?as pagāju?i kop? Kristus dzim?anas līdz norādītajam datumam :)SELECT WEEKS(now()) weeks_since_ChristTeksta apstrādes funkcijas-- (ASA) Iestarpina vienu teksta virkni otrā:SELECT INSERTSTR (3 -- No kuras pozīcijas sākot (+1) ,'Magnetofons' -- Virkne, kurā ievietot ,'XYZ' -- Virkne, kuru ievietot ) str;-- Izdzē? konkrētā pozīcijā konkrētu skaitu simbolu un ieliek vietā konkrētu tekstu:SELECT STUFF('1234567890' – Apstrādājamā virkne ,4 -- No kuras pozīcijas sākot ,3 -- Cik simbolus izdzēst ,'xxyzz' -- Ko likt vietā ) str;-- Atkārto teksta virkni N reizes (Funkcija REPLACE) dara to pa?u):SELECT REPLICATE ('123_',4) str;Skaitliskās funkcijasSELECT PI() pi; -- PI vērtība (3.14...)SELECT DEGREES(0.52) rad; -- Pārveido radiānus - grādos (le??is)SELECT RADIANS(29.7) deg; -- Pārveido grādus - radiānos (le??is)SELECT SQUARE(9) sqr; -- Argumenta reizinājums pa?am ar seviSalīdzinā?anas operatoriSELECT * FROM mpa_test_table;?ādi operatori nav, piemēram, Oracle SQL:SELECT * FROM mpa_test_table WHERE id !< 3 -- (nav mazāks par)SELECT * FROM mpa_test_table WHERE id !> 3 -- (nav lielāks par)Varbūt tas kādā situācijā var noderēt, ta?u to pa?u efektu var panākt ar sekojo?iem operatoriem:SELECT * FROM mpa_test_table WHERE id >= 3 -- (lielāks vai vienāds ar)SELECT * FROM mpa_test_table WHERE id <= 3 -- (mazāks vai vienāds ar)Lokālās īslaicīgās tabulas izveido?ana (ASA)SELECT * INTO LOCAL TEMPORARY TABLE mpa_emp_temp_table FROM mpa_employees WHERE name LIKE 'EI??NIJA S%';Pēc tam no tās var atlasīt datus kā no parastas tabulas:SELECT * FROM mpa_emp_temp_table;?ī tabula tiek glabāta datubāzes sesijas ietvaros. Citas sesijas tai nevar piek?ūt.Materializētie skati (ASA)CREATE MATERIALIZED VIEW mpa_mat_mv AS SELECT store_id,product_id,time_id,countX FROM dwh_facts;Nevar veidot materializēto skatu, kas balstās uz datubāzes skatuNevar neminēt atlasāmos laukus (SELECT * FROM …)Datu atjauno?ana:REFRESH MATERIALIZED VIEW mpa_mat_mv;Surogāt-atslēgas un identifikatoriASE nav tādu sekven?u kā Oracle, ko var lietot kā surogāt-atslēgas, ta?u ir NEWID() funkcija, kas ?enerē globālus unikālus identifikatorus (GUID), kurus var lietot sekven?u vietā:SELECT NEWID()CREATE TABLE mpa_test_table(id VARCHAR(255));INSERT INTO mpa_test_table VALUES(NEWID());INSERT INTO mpa_test_table VALUES(NEWID());INSERT INTO mpa_test_table VALUES(NEWID());SELECT * FROM mpa_test_table;Tas gan nav diez ko efektīvi no tāda viedok?a, ka unikālajai atslēgai vienmēr jāparedz diezgan daudz atmi?as, jo atslēga ir ?oti gara, lai būtu unikāla globālā līmenī.ASA tomēr atbalsta datubāzes virknes (Sequences) tāpat kā Oracle:CREATE OR REPLACE SEQUENCE mpa_test_seq;INSERT INTO mpa_test_table VALUES (mpa_test_seq.NEXTVAL);ASE (un da?ēji arī ASA) atbalsta tādu lietu kā IDENTITY – kas ir automātisks tabulas ieraksta identifikators.CREATE TABLE mpa_test_table (id integer IDENTITY -- "IDENTITY" - norāda, ka tā būs identificējo?ā kolonna ,name varchar(30) );INSERT INTO mpa_test_table (name) VALUES ('A');INSERT INTO mpa_test_table (name) VALUES ('B');INSERT INTO mpa_test_table (name) VALUES ('C');SELECT * FROM mpa_test_table;Labums no tā ir tāds, ka uz lauku, kas DDL atzīmēts ar "IDENTITY", var atsaukties ar atslēgvārdu "syb_identity" - nav jāzina, kā saucas tabulas identificējo?ais lauks:SELECT * FROM mpa_test_table WHERE syb_identity >= 2;Tabulas līme?a ierobe?ojumi (Table-Level Constraints)Ir iespējams nodefinēt ierobe?ojo?us likumus tabulas līmenī.CREATE TABLE mpa_vehicles( vehicle_id INTEGER, vehicle_name VARCHAR(40), CONSTRAINT mpa_bad_car_constraint CHECK (vehicle_id IN (1, 2, 3) AND vehicle_name NOT LIKE 'ZAPOROZHEC'));INSERT INTO mpa_vehicles VALUES (1,'AUDI');Sekojo?ais ieraksts neatbilst ?mpa_bad_car_constraint” definētajām prasībām:INSERT INTO mpa_vehicles VALUES (4,'FORD');(ASE) Ir iespējams arī definēt zi?ojumu, kāds tiks parādīts.Izveido zi?ojumu:sp_addmessage 20001, 'At?autās vērtības ID (1,2,3) un nedrīkst pievienots ZAZ'Sasaista zi?ojumu ar tabulas ierobe?ojumu:sp_bindmsg mpa_bad_car_constraint, 20001Mē?inām izpildīt vēl vienu neapmierino?u INSERT:INSERT INTO mpa_vehicles VALUES (2,'ZAPOROZHEC');Lai nomainītu zi?ojumu, vienkār?i pievieno jaunu. Vecais zi?ojums tiks aizvietots.?ādi no?em zi?ojumu no CONSTRAINT:sp_unbindmsg mpa_bad_car_constraintIzdzē? lietotāja definēto zi?ojumu vispār:sp_dropmessage 20001XML datu apstrāde (ASE)SELECT person_first_name,person_last_name,person_code FROM mpa_employees WHERE name LIKE 'INDRI?IS%'Pievienojam vaicājumam beigās ?FOR XML”, un tas automātiski ?enerēs atlasītos datus XML formātā.SELECT person_first_name,person_last_name,person_code FROM mpa_employees WHERE name LIKE 'INDRI?IS%'FOR XMLSekojo?a k?ūda nozīmē, ka nav ieslēgta XML funkcionalitāte.XML funkcionalitāti ieslēdz ar:sp_configure 'enable xml',1Pēc tā izpildes, XML vaicājumam vajadzētu darboties un atgriez rezultātu:XML iezīmju (Tags) vērtību izgū?anai izmanto funkciju - xmlextract()Izveidojam testa tabuli?u, kurā ievietosim datus XML formātā:CREATE TABLE mpa_xml_table (id INT, xmldata TEXT)INSERT mpa_xml_table VALUES(1,'<darbinieki><darbinieka_id>111</darbinieka_id><vards>Mārti??</vards><uzvards>Pauk?te</uzvards></darbinieki>')INSERT mpa_xml_table VALUES(2,'<darbinieki><darbinieka_id>222</darbinieka_id><vards>Regīna</vards><uzvards>Kairi?a</uzvards></darbinieki>')SELECT * FROM mpa_xml_table;-- Izgūst XML datus no konkrētām iezīmēmSELECT emp_id = xmlextract("//darbinieki/darbinieka_id/text()",xmldata), emp_last_name = xmlextract("//darbinieki/uzvards/text()",xmldata) FROM mpa_xml_table WHERE id = 2;SQL - datu grupē?ana un citas konstrukcijasDa?iem no tālākajiem piemēriem ir izmantota tabulu struktūra no cita darba (par OLAP CUBE). Skatīt tabulu DDL un shēmu pielikumos. Ideja ir vienkār?a – 1 faktu tabula, kas ir pārdo?anas fakts ar 1 rādītāju – pārdoto pre?u skaits. Faktu tabulai piesaistās dimensijas – laiks, preces, veikali.Group by - HavingSELECT * FROM (SELECT p.product_name, s.store_name, t.timeX AS date, SUM (f.countX) sold FROM dwh_facts f, dwh_products p, dwh_stores s, dwh_time t WHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY product_name, store_name, t.timeX HAVING SUM (f.countX) > 10) dv WHERE date BETWEEN CONVERT (date, '31/01/2008', 103) AND CONVERT (date, '30/06/2009', 103)GROUP BY - CUBE/ROLLUP (ASA)-- Veic agregācijas visiem pieejamajiem datiemSELECT * FROM (SELECT product_name ,store_name ,timeX ,SUM(f.countX) sold --,count(1) FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY CUBE (product_name,store_name,timeX) -- "CUBE" vietā var lietot arī "ROLLUP")a WHERE timeX IS NULLORDER BY product_name,store_name;Hierarhiskie jeb Rekursīvie vaicājumiSybase SQL nepiedāvā hierarhisko datu apstrādi, ta?u pastāv alternatīvas – apstrāde ar Transact-SQL kursoriem un glabājamajām procedūrām, ta?u tāds risinājums te netiks apskatīts, jo ir pārāk specifisks.Klona tabulas vaicājumi (ASA)Lai atvieglotu darbu, izveidosim skatu, kas apvienos visas datu vitrīnas skatus:CREATE OR REPLACE VIEW dwh_facts_v ASSELECT p.product_name ,s.store_name ,t.timeX ,SUM(f.countX) sold FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY product_name,store_name,timeX; Sekojo?ajā vaicājumā 2 lauku atlasī?anā tiek izmantota tā saucamā klona tabulas funkcija OVER:SELECT f.store_name,f.product_name,f.timeX,f.sold ,SUM(sold) OVER(partition BY store_name) store_sum ,SUM(sold) OVER(partition BY store_name,product_name) product_sum_in_storeFROM dwh_facts_v fORDER BY f.store_name,f.product_name;?store_sum” – katrā rindi?ā atrāda pārdoto (sold) kopsummu konkrētajā veikalā.?producēt_sum_in_store” – katrā rindi?ā rāda katra produkta pārdoto konkrētajā veikalā.KopsavilkumsTrūkumiSlikta konsole – var atvērt TIKAI 1 SQL failu. Alternatīva ir startēt otru ?Interactive SQL” konsoli.SQL noska?o?anas logā NEVAR mainīt SQL loga izmēru!SQL optimizators pats neasociē savus .*saplan failus ar sevi.Interactive SQL tomēr varēja būt lietotājam draudzīgāks, nevis par katru sīkumu mest uznirsto?o logu ar diezgan grūti saprotamiem pazi?ojumiem (Vispār prasītos cits rīks).Neintuitīva informācijas telpa – grūti saprotams, kur? produkts kam ir paredzēts (ASA un ASE) – da?a uz vienas platformas nav pieejamas tādas lietas kā uz otras un otrādi.Priek?rocībasDatu importa rīks.Grafiskais SQL plāna attēlojums (jo īpa?i SAE).(?eit nav pētīts) Esot laba OLAP datu (pla?i lieto finan?u datubāzēs) un Spatial datu apstrāde.Taupīgāks resursu zi?ā par Oracle.DB dro?ības risinājumi (Ne velti to lieto ASV aizsardzības departaments).Laba tie?saistes dokumentācija.Transact-SQL (T-SQL) – tas paver daudz pla?ākas iespējas.SecinājumiVispār bija diezgan interesanti apskatīties kaut ko citu, jo vienīgā DBVS, uz kuras biju strādājis (iz?emot MS Access) ir Oracle. Patīkams pārsteigums, protams, bija tas, ka SQL tomēr vienkār?ākajā formā tāds pats vien ir – tādā zi?ā vismaz ir brīvības sajūta, programmējot jebkurā DBVS.Bija diezgan grūti gatavot datus testpiemēriem, jo nevarēju likt lietā ierasto Oracle PL/SQL, bet analogas darbības Transact-SQL meklēt bija ?oti laikietilpīgi.Ne tuvu nav tik daudz dokumentācijas un pieejamas informācijas jo īpa?i par SQL noska?o?anu un SQL ieteikumiem.ASA vs ASE! Ne tikai ASA ir mazāk SQL iespēju, kas būtu vēl saprotami, BET ir CITA sintakse! Darba gaitā tika konstatētas lietas, kas darbojas uz viena servera, bet nedarbojas uz cita – un otrādi. Pēdējā brīdī uzmanības lokā parādījās arī tre?ais produkts ?Sybase IQ”, kas ir kaut kas līdzīgs gan ASA, gan ASE un laikam specializēts priek? datu noliktavām, tāpēc vēl te ir iespējas pētījumiem. Tas ir arī iemesls, kāpēc darba saturs ir tik ?saraustīts”. Ja nāko?ajos gados studentiem būtu uzdevums pētīt Sybase DBVS, tad vispirms vajadzētu apzināt ?o serveru at??irības un nolemt, kur? tad būtu tas pētāmais. Citādi var sanākt tā kā man, ka stundām tiek lasīts par kaut kādu funkcionalitāti un mē?ināts to iedarbināt, bet beigās izrādās, ka eso?ā DBVS to nemaz neatbalsta. Kaut kāda nekonsekvence tajā visā ir, jo vairākos avotos lasīju, ka ASE ir universāla RDBVS, kas ir īpa?i labi tiek galā ar OLTP uzdevumiem. ASE tiekot intensīvi izmantots finansiālajā pasaulē (banku, bir?u un apdro?inā?anas sistēmās) utt., ta?u manā gadījumā tas neatpazina ne CUBE ne ROLLUP konstrukcijas (uz ASA gan izdevās).Kopējais mans subjektīvais novērtējums Syabase DBVS ir tāds, ka pelnīti tā nav tik populāra kā Oracle. Sybase Transact-SQL ir daudz ?vājāks” par Oracle PL/SQL. Sybase ASE ir ierobe?ota trigeru funkcionalitāte, pa?ā SQL ir daudz mazāk iespēju – maz analītisko funkciju, maz teksta un skait?u funkciju. Vispār nepastāv XML specifisku apstrādes funkciju (15.0.2 laikam jau kaut kas ir), nav materializēto skatu (ASA tomēr ir), daudz mazāk datu tipu (Pamats ?iem apgalvojumiem - skat. ?Izmantotie avoti” – 7. avots, bet pie?emu, ka ?is tas jau ir mainījies.Lai gan atkal – iespējams, ja apvieno visu 3 produktu (Adaptive Server Anywhere, Adaptive Server Enterprise un Sybase IQ) funkcionalitāti, tad kopā sanāk diezgan konkurētspējīga DBVS..Izmantotie avotiSybase SQL Anywhere (11.0.1) Server – SQL Usage: SQL Anywhere Server (12.0.1) - SQL Reference: Online Help: - at??irības Sybase produktos attiecībā uz GROUP BYSQL sintakse: Paulley Blog raksts par SQL Anywhere autonomo statistiku vāk?anu: un Oracle DBVS salīdzinājums (Noderīgi, ja zina Oracle sintaksi, bet nezina Sybase): padomi no Rob Vershoor (paskaidro labāk par ra?otāju): - ?Ievads Sybase ASE” - XML apstrāde ASEInteresanti viedok?i par Sybase un Oracle konkurējo?ajām iespējām: par surogāt-atslēgu lieto?anas ietekmi: rokasgrāmatas:?ādu RDBVS SQL implementāciju salīdzinājums:ārīgs da?ādu RDBVS salīdzinājums: Transact-SQL User’s Guide (Adaptive Server Enterprise 15.0)Adaptive Server Anywhere SQL Reference ManualAdaptive Server Anywhere SQL User’s GuideTulkojumi un saīsinājumiNested Loops – Iegultie cikliAlias – Pie?emtais vārdsSQL Hint – IeteikumsStatement – Izteiksme (INSERT,UPDATE)Overhead – Izmaksas/ResursiMerge – SapludinātBULK Insert – Kopu pievieno?anaConstraint – Ierobe?ojumsString – Teksta rindaTag - IezīmeASA – Adaptive Server Anywhere – SQL AnywhereASE – Adaptive Server EnterpriseDML – Data Manipulation LanguageDDL – Data Definition LanguagePielikumiDWH DLL-- PrecesCREATE TABLE dwh_products (product_id INTEGER UNIQUE,product_name VARCHAR(255),manufacturer_id INTEGER,product_type_id INTEGER);-- Pre?u tipiCREATE TABLE dwh_product_types(product_type_id INTEGER UNIQUE,type_name VARCHAR(255));-- Ra?otājiCREATE TABLE dwh_manufacturers(manufacturer_id INTEGER UNIQUE,manufacturer_name VARCHAR(255));-- PiegādātājiCREATE TABLE dwh_suppliers(piegadataja_id INTEGER UNIQUE,piegadataja_nosaukums VARCHAR(255));-- KlientiCREATE TABLE dwh_customers(klienta_id INTEGER UNIQUE,klienta_nosaukums VARCHAR(255));-- Klientu grupasCREATE TABLE dwh_customer_types(klienta_grupas_id INTEGER UNIQUE,klienta_grupas_nosaukums VARCHAR(255));-- VeikaliCREATE TABLE dwh_stores(store_id INTEGER UNIQUE,store_name VARCHAR(255),city_id INTEGER);-- PilsētasCREATE TABLE dwh_cities(city_id INTEGER UNIQUE,city_name VARCHAR(255),country_id INTEGER);-- ValstisCREATE TABLE dwh_countries(country_id INTEGER UNIQUE,country_name VARCHAR(255));-- LaiksCREATE TABLE dwh_time(time_id INTEGER UNIQUE,timeX DATE) -- ASA nevar lietot "time"-- DienasCREATE TABLE dwh_days(dienas_id INTEGER UNIQUE,dienas_numurs VARCHAR(2),menesa_id INTEGER);-- Mēne?iCREATE TABLE dwh_months(menesa_id INTEGER UNIQUE,menesa_nosaukums VARCHAR(255)); -- Tabulas nosaukumābija drukas k?ūda-- GadiCREATE TABLE dwh_years(gada_id INTEGER UNIQUE,gada_nosaukums VARCHAR(255));-- Faktu (Centrālātabula)CREATE TABLE dwh_facts (store_id INTEGER ,product_id INTEGER ,time_id INTEGER ,countX INTEGER -- "COUNT":Nevar lietot kākolonnas noaukumu Sybase );DWH tabulu sasaiste ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery

Related searches