M'mbuyomu nkhani Ndinalongosola lingaliro ndi kukhazikitsidwa kwa nkhokwe yomangidwa pamaziko a ntchito, osati matebulo ndi minda monga muzosungirako zokhudzana ndi ubale. Inapereka zitsanzo zambiri zosonyeza ubwino wa njira imeneyi kuposa yachikale. Ambiri anawapeza osakhutiritsa mokwanira.
M'nkhaniyi, ndikuwonetsani momwe lingaliro ili limakupatsani mwayi wowerengera mwachangu komanso moyenera ndikuwerenga ku database popanda kusintha kulikonse pamalingaliro ogwiritsira ntchito. Zofananazo zayesedwa kuti zigwiritsidwe ntchito mu DBMS zamalonda zamakono (makamaka, Oracle ndi Microsoft SQL Server). Kumapeto kwa nkhaniyi ndikuwonetsa kuti zomwe adachita, kunena mofatsa, sizinayende bwino.
mafotokozedwe
Monga kale, kuti ndimvetsetse bwino ndiyamba kufotokozera ndi zitsanzo. Tinene kuti tikuyenera kukhazikitsa malingaliro omwe angabweretse mndandanda wamadipatimenti omwe ali ndi kuchuluka kwa ogwira nawo ntchito ndi malipiro awo onse.
Mu database yogwira ntchito zitha kuwoneka motere:
CLASS Department βΠΡΠ΄Π΅Π»β;
name βΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅β = DATA STRING[100] (Department);
CLASS Employee βΠ‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊβ;
department βΠΡΠ΄Π΅Π»β = DATA Department (Employee);
salary βΠΠ°ΡΠΏΠ»Π°ΡΠ°β = DATA NUMERIC[10,2] (Employee);
countEmployees βΠΠΎΠ»-Π²ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ²β (Department d) =
GROUP SUM 1 IF department(Employee e) = d;
salarySum βΠ‘ΡΠΌΠΌΠ°ΡΠ½Π°Ρ Π·Π°ΡΠΏΠ»Π°ΡΠ°β (Department d) =
GROUP SUM salary(Employee e) IF department(e) = d;
Kuvuta kochita funsoli mu DBMS iliyonse kudzakhala kofanana ndi O (chiwerengero cha antchito)chifukwa kuwerengetsaku kumafuna kusanthula tebulo lonse la ogwira ntchito ndiyeno kuwaika m'magulu malinga ndi dipatimenti. Padzakhalanso ena ang'onoang'ono (timakhulupirira kuti pali antchito ambiri kuposa madipatimenti) owonjezera kutengera dongosolo lomwe lasankhidwa O (chiwerengero cha anthu ogwira ntchito) kapena O (chiwerengero cha madipatimenti) za kupanga magulu ndi zina zotero.
N'zoonekeratu kuti kuphedwa kwapamwamba kungakhale kosiyana mu DBMS zosiyanasiyana, koma zovuta sizidzasintha mwanjira iliyonse.
Pakukhazikitsa komwe akufunsidwa, DBMS yogwira ntchito ipanga gawo limodzi lomwe lidzawerengere zofunikira za dipatimentiyo, kenako ndikupanga JOIN ndi tebulo la dipatimenti kuti mupeze dzina. Komabe, pa ntchito iliyonse, polengeza, ndizotheka kukhazikitsa chikhomo chapadera cha MATERIALIZED. Dongosolo lidzapanga zokha gawo lolingana ndi ntchito iliyonse yotere. Posintha mtengo wa ntchito, mtengo wamunda udzasinthanso muzochitika zomwezo. Mukapeza ntchitoyi, gawo lowerengedwa kale lidzafikiridwa.
Makamaka, ngati muyika MATERIALIZED kuti mugwiritse ntchito countAntchito ΠΈ salarySm, ndiye minda iwiri idzawonjezedwa patebulo ndi mndandanda wa madipatimenti, omwe adzasungira chiwerengero cha antchito ndi malipiro awo onse. Nthawi zonse pakakhala kusintha kwa ogwira ntchito, malipiro awo kapena ma dipatimenti awo, dongosololi limangosintha zikhalidwe za magawowa. Funso lomwe lili pamwambapa lipeza magawowa mwachindunji ndipo lidzayankhidwa O (chiwerengero cha madipatimenti).
Kodi zoletsa ndi zotani? Chinthu chimodzi chokha: ntchito yotereyi iyenera kukhala ndi chiwerengero chochepa chamtengo wapatali chomwe mtengo wake umatanthauzidwa. Apo ayi, sikutheka kupanga tebulo lomwe limasungira zikhalidwe zake zonse, popeza sipangakhale tebulo lokhala ndi mizere yopanda malire.
Chitsanzo:
employeesCount βΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² Ρ Π·Π°ΡΠΏΠ»Π°ΡΠΎΠΉ > Nβ (Department d, NUMERIC[10,2] N) =
GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;
Ntchitoyi imatanthauzidwa ndi nambala yopanda malire ya N (mwachitsanzo, mtengo uliwonse woipa ndi woyenera). Chifukwa chake, simungayike MATERIALIZED pamenepo. Chifukwa chake ichi ndi malire omveka, osati aukadaulo (osati chifukwa sitinathe kuzikwaniritsa). Apo ayi, palibe zoletsa. Mutha kugwiritsa ntchito magulu, kusanja, NDI ndi OR, GAWO, kubwereza, ndi zina.
Mwachitsanzo, pavuto 2.2 la nkhani yapitayi, mutha kuyika MATERIALIZED pa ntchito zonse ziwiri:
bought 'ΠΡΠΏΠΈΠ»' (Customer c, Product p, INTEGER y) =
GROUP SUM sum(Detail d) IF
customer(order(d)) = c AND
product(d) = p AND
extractYear(date(order(d))) = y MATERIALIZED;
rating 'Π Π΅ΠΉΡΠΈΠ½Π³' (Customer c, Product p, INTEGER y) =
PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y MATERIALIZED;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;
Dongosolo lokha lidzapanga tebulo limodzi ndi makiyi amtundu kasitomala, mankhwala ΠΈ ZOCHITIKA, idzawonjezera magawo awiri kwa izo ndipo idzasintha magawo omwe ali nawo ndi kusintha kulikonse. Kuyitanira kwina kuzinthu izi kupangidwa, sikuwerengedwa, koma mfundo zake zimawerengedwa kuchokera m'magawo ofanana.
Pogwiritsa ntchito makinawa, mutha, mwachitsanzo, kuchotsa zobwerezabwereza (CTE) pamafunso. Makamaka, lingalirani magulu omwe amapanga mtengo pogwiritsa ntchito ubale wa mwana/makolo (gulu lililonse limakhala ndi ulalo kwa kholo lawo):
parent = DATA Group (Group);
Mu database yogwira ntchito, malingaliro obwereza amatha kufotokozedwa motere:
level (Group child, Group parent) = RECURSION 1l IF child IS Group AND parent == child
STEP 2l IF parent == parent($parent);
isParent (Group child, Group parent) = TRUE IF level(child, parent) MATERIALIZED;
Kuyambira kwa ntchito ndiParent yalembedwa MATERIALIZED, ndiye tebulo lomwe lili ndi makiyi awiri (magulu) lidzapangidwira, momwe gawolo ndiParent zidzakhala zoona kokha ngati kiyi yoyamba ili mwana wachiwiri. Chiwerengero cha zolemba mu tebulo ili chidzakhala chofanana ndi chiwerengero cha magulu ochulukitsa ndi kuzama kwa mtengo. Ngati mukufuna, mwachitsanzo, kuwerengera kuchuluka kwa mbadwa za gulu linalake, mutha kugwiritsa ntchito izi:
childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);
Sipadzakhala CTE pafunso la SQL. M'malo mwake padzakhala gulu losavuta la GROUP BY.
CLASS Order 'ΠΠ°ΠΊΠ°Π·';
date 'ΠΠ°ΡΠ°' = DATA DATE (Order);
CLASS OrderDetail 'Π‘ΡΡΠΎΠΊΠ° Π·Π°ΠΊΠ°Π·Π°';
order 'ΠΠ°ΠΊΠ°Π·' = DATA Order (OrderDetail);
date 'ΠΠ°ΡΠ°' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;
Pamene kuyitana ntchito tsiku kwa mzere wa dongosolo, gawo lomwe pali index lidzawerengedwa kuchokera patebulo ndi mizere ya dongosolo. Tsiku la dongosolo likasintha, dongosolo lokhalo lidzawerengeranso tsiku losasinthika pamzere.
ubwino
Kodi njira yonseyi ndi yotani? M'ma DBMS akale, osalembanso mafunso, wopanga mapulogalamu kapena DBA amatha kungosintha ma index, kudziwa ziwerengero ndikuwuza wokonza mafunso momwe angawachitire (ndipo ma HINTs amapezeka mu DBMS zamalonda). Ngakhale atayesetsa bwanji, sangathe kumaliza funso loyamba m'nkhaniyo O (chiwerengero cha madipatimenti) popanda kusintha mafunso kapena kuwonjezera zoyambitsa. Muchiwembu chomwe chaperekedwa, pagawo lachitukuko simuyenera kuganizira za momwe mungasungire deta komanso magulu oti mugwiritse ntchito. Zonsezi zikhoza kusinthidwa mosavuta pa ntchentche, mwachindunji ntchito.
Pochita zimawoneka chonchi. Anthu ena amapanga logic mwachindunji malinga ndi ntchito yomwe ali nayo. Samvetsetsa ma algorithms ndi zovuta zawo, mapulani akupha, mitundu yolumikizirana, kapena gawo lina lililonse laukadaulo. Anthu awa ndi akatswiri azamalonda kuposa omanga. Ndiye, zonsezi zimalowa mu kuyesa kapena ntchito. Imathandizira kutsitsa mafunso kwanthawi yayitali. Funso lalitali likapezeka, ndiye anthu ena (zaukadaulo kwambiri - makamaka DBA) amasankha kuyatsa MATERIALIZED pa ntchito ina yapakatikati. Izi zimachepetsa kujambula pang'ono (popeza zimafuna kukonzanso gawo lina muzochitikazo). Komabe, sikuti funsoli limafulumizitsa kwambiri, komanso ena onse omwe amagwiritsa ntchito ntchitoyi. Panthawi imodzimodziyo, kusankha ntchito yoti mukhale ndi thupi kumakhala kosavuta. Zigawo ziwiri zazikulu: kuchuluka kwa zomwe zotheka zolowera (umu ndi kuchuluka kwa zolemba zomwe zidzakhale patebulo lofananira), komanso kangati zomwe zimagwiritsidwa ntchito pazinthu zina.
Malemba
Ma DBMS amakono amalonda ali ndi njira zofanana: MATERIALIZED VIEW yokhala ndi FAST REFRESH (Oracle) ndi INDEXED VIEW (Microsoft SQL Server). Mu PostgreSQL, MATERIALIZED VIEW sikungasinthidwe pakugulitsa, koma pokhapokha popempha (komanso ndi zoletsa zokhwima), kotero sitiziganizira. Koma ali ndi zovuta zingapo zomwe zimalepheretsa kugwiritsa ntchito kwawo.
If VARIANCE(expr) or STDDEV(expr) zimanenedwa, COUNT(expr) ndi SUM(expr) ziyenera kufotokozedwa. Oracle amalimbikitsa zimenezo SUM(expr *expr) kutchulidwa.
The SELECT Mzere mufunso lofotokozera singakhale mawu ovuta omwe ali ndi mizati kuchokera kumagulu angapo apansi. Njira yothanirana ndi izi ndikugwiritsa ntchito mawonekedwe opangidwa ndi zisa.
The SELECT list iyenera kukhala ndi zonse GROUPBY mzati.
Maonekedwe opangidwa ndi thupi sachokera pa tebulo limodzi kapena angapo akutali.
Ngati mugwiritsa ntchito CHAR mtundu wa data muzosefera za chipika chowoneka bwino, ma seti amtundu wa tsamba la masters ndi mawonekedwe owoneka bwino ayenera kukhala ofanana.
Ngati mawonekedwe opangidwa ndi thupi ali ndi chimodzi mwa izi, ndiye kuti kutsitsimutsa mwachangu kumathandizidwa pokhapokha pazoyika za DML ndi katundu wachindunji.
Mawonedwe akuthupi ndi MIN or MAX magulu
Mawonekedwe akuthupi omwe ali nawo SUM(expr) koma ayi COUNT(expr)
Mawonekedwe akuthupi popanda COUNT(*)
Kaonedwe ka thupi kotereku kakutchedwa kuti kawonedwe ka thupi kamene kamayika.
Mawonekedwe opangidwa ndi thupi MAX or MIN imatsitsimutsidwa mwachangu pambuyo pochotsa kapena kusakaniza mawu a DML ngati ilibe a WHERE mawu.
Kutsitsimutsa kwapamwamba kwambiri/mphindi mukatha kufufuta kapena kusakanikirana kwa DML sikukhala ndi machitidwe ofanana ndi oyika-pokha. Imachotsa ndikuwerengeranso kuchuluka kwa max/min pamagulu omwe akhudzidwa. Muyenera kudziwa zotsatira zake.
Mawonedwe opangidwa ndi mawonedwe otchulidwa kapena ma subqueries mu FROM chiganizochi chikhoza kutsitsimutsidwa mwamsanga pokhapokha malingaliro atha kuphatikizidwa. Kuti mumve zambiri momwe mawonedwe angaphatikizidwe, onani Oracle Database SQL Language Reference.
Ngati palibe majowina akunja, mutha kukhala ndi zosankha mosasamala ndikujowina WHERE mawu.
Kwa mawonedwe opangidwa ndi thupi ndi CUBE, ROLLUP, magulu amagulu, kapena kuphatikizika kwawo, zoletsa zotsatirazi zikugwira ntchito:
The SELECT list ikhale ndi chosiyanitsa chamagulu chomwe chingakhale a GROUPING_ID ntchito pa zonse GROUPBY mawu kapena GROUPING ntchito imodzi kwa aliyense GROUPBY mawu. Mwachitsanzo, ngati GROUPBY chiganizo cha mawonekedwe a thupi ndi "GROUPBYCUBE(a, b)", ndiye SELECT list iyenera kukhala ndi "GROUPING_ID(a, b)"kapena"GROUPING(a)ANDGROUPING(b)Β»kuti mawonekedwe owoneka bwino akhale otsitsimula mwachangu.
GROUPBY zisapangitse magulu obwerezabwereza. Mwachitsanzo, "GROUP BY a, ROLLUP(a, b)"sikutsitsimutsidwa mwachangu chifukwa zimabweretsa magulu obwereza "(a), (a, b), AND (a)".
5.3.8.7 Zoletsa pa Kutsitsimutsa Mwachangu pa Mawonedwe Opangidwa ndi UNION ONSE
Mawonekedwe akuthupi ndi UNIONALL set operator thandizo ndi REFRESHFAST njira ngati zotsatirazi zikwaniritsidwa:
Funso lofotokozera liyenera kukhala ndi UNIONALL woyendetsa pa mlingo wapamwamba.
The UNIONALL woyendetsa sangathe kuphatikizidwa mkati mwa subquery, kupatulapo chimodzi: The UNIONALL akhoza kukhala mu subquery mu FROM chigamulo chimapereka funso lofotokozera ndi mawonekedwe SELECT * FROM (onani kapena fufuzani ndi UNIONALL) monga mu chitsanzo chotsatirachi:
PANGANI KUONA view_with_unionall AS
(SANKANI c.rowid crid, c.cust_id, 2 umaki
KWA makasitomala c KUMENE c.cust_last_name = 'Smith'
UNION ONSE
SANKANI c.rowid crid, c.cust_id, 3 umaki
KUCHOKERA kwa makasitomala c KUMENE c.cust_last_name = 'Jones');
PANGANI MAwonedwe OTHANDIZA unionall_inside_view_mv
ONANI ZONSE POFUNIKA MONGA
SANKHANI * KUCHOKERA view_with_unionall;
Funso lirilonse mu block UNIONALL funso liyenera kukwaniritsa zofunikira za mawonekedwe osinthika osinthika mwachangu ndi ma aggregates kapena mawonekedwe osinthika mwachangu ndi majoin.
Zolemba zowoneka bwino zowoneka bwino ziyenera kupangidwa pamatebulo momwe zimafunikira kuti pakhale mawonekedwe owoneka bwino otsitsimutsa.
Zindikirani kuti Oracle Database imalolanso kuti pakhale mawonekedwe apadera a tebulo limodzi lokhala ndi zolumikizira pokhapokha ROWID column yaphatikizidwa mu SELECT list ndi mu chipika chowoneka bwino. Izi zikuwonetsedwa mu funso lofotokozera la mawonekedwe view_with_unionall.
The SELECT mndandanda wafunso lililonse uyenera kukhala ndi a UNIONALL marker, ndi UNIONALL Mzere uyenera kukhala ndi manambala osasinthasintha kapena mtengo wa chingwe pagawo lililonse UNIONALL nthambi. Kupitilira apo, gawo la chikhomo liyenera kuwoneka m'malo omwewo a ordinal mu SELECT mndandanda wamafunso aliwonse. Onani "UNION ALL Marker ndi Kulembanso MafunsoΒ»kuti mumve zambiri UNIONALL zolembera.
Matebulo ayenera kutchulidwa ndi mayina a magawo awiri, schema.tablename m'mawonedwe ofotokozera.
Ntchito zomwe zimatanthauzidwa ndi ogwiritsa ntchito zomwe zikufotokozedwa muzowona ziyenera kupangidwa pogwiritsa ntchito ma WITH SCHEMABINDING mwina.
Ntchito zilizonse zomwe zimatanthauzidwa ndi ogwiritsa ntchito zomwe zatchulidwa m'mawonedwewo ziyenera kutchulidwa ndi mayina a magawo awiri, ..
Malo ofikira deta a ntchito yofotokozedwa ndi wogwiritsa ntchito ayenera kukhala NO SQL, ndi katundu wolowera kunja ayenera kukhala NO.
Ntchito za Common Language Runtime (CLR) zitha kuwoneka pamndandanda wosankhidwa wamawonedwe, koma sizingakhale gawo la tanthauzo la kiyi ya clustered index. Ntchito za CLR sizingawonekere mu KULI ndime yowonera kapena ON clause ya JOIN yowonera.
Ntchito za CLR ndi njira za mitundu yofotokozedwa ndi ogwiritsa ntchito ya CLR yomwe imagwiritsidwa ntchito pakutanthauzira kowonera ziyenera kukhala ndi zinthu zomwe zikuwonetsedwa patebulo lotsatirali.
katundu
Zindikirani
DETERMINISTIC = ZOONA
Ayenera kulengezedwa momveka bwino ngati mawonekedwe a Microsoft .NET Framework njira.
DATA ACCESS = NO SQL
Zimatsimikiziridwa pokhazikitsa mawonekedwe a DataAccess ku DataAccessKind.None ndi SystemDataAccess yogwirizana ndi SystemDataAccessKind.None.
KUPEZEKA KWAKHALIDWE = NO
Katunduyu amasinthidwa kukhala NO pamayendedwe a CLR.
Chiwonetserocho chiyenera kupangidwa pogwiritsa ntchito mawonekedwe WITH SCHEMABINDING mwina.
Mawonedwewo akuyenera kutchula ma tebulo oyambira okha omwe ali mu database yofanana ndi mawonekedwe. Mawonedwe sangathe kufotokoza malingaliro ena.
Mawu a SELECT mu tanthauzo la mawonedwe sikuyenera kukhala ndi zinthu zotsatirazi za Transact-SQL:
Gome lotengedwa (lotanthauziridwa pofotokoza a SELECT statement mu FROM mawu)
Zodziphatikiza
Kutchula mizati pogwiritsa ntchito SELECT * or SELECT <table_name>.*
DISTINCT STDEV, STDEVP, VAR, VARPkapena AVG
Common table expression (CTE)
Mawu oyambira (CONTAINS, FREETEXT) SUM ntchito yomwe imatchula mawu osasinthika ORDER BY
CLR yotanthauzidwa ndi ogwiritsa ntchito aggregate TOP CUBE, ROLLUPkapena GROUPING SETS ntchito
MIN, MAX UNION, EXCEPTkapena INTERSECT ntchito TABLESAMPLE
Zosintha patebulo OUTER APPLY or CROSS APPLY PIVOT, UNPIVOT
Magawo ochepa
Inline (TVF) kapena multi-statement table-valued function (MSTVF) OFFSET
CHECKSUM_AGG
1 Mawonedwe a indexed akhoza kukhala sungunulani mizati; komabe, zigawo zotere sizingaphatikizidwe mu kiyi ya clustered index.
If GROUP BY ilipo, tanthauzo la VIEW liyenera kukhala COUNT_BIG(*) ndipo sichiyenera kukhala HAVING. Izi GROUP BY zoletsa zimagwira ntchito pa tanthauzo lolozera. Funso litha kugwiritsa ntchito mawonekedwe a indexed mu dongosolo lake lokonzekera ngakhale silikukwaniritsa izi GROUP BY zoletsedwa.
Ngati tanthauzo la mawonedwe lili ndi a GROUP BY clause, chinsinsi cha index clustered chapadera chingathe kutchula zigawo zomwe zafotokozedwa mu GROUP BY mawu.
Zikuwonekeratu apa kuti amwenye sanatenge nawo mbali, popeza adaganiza zochita molingana ndi dongosololi "tichita pang'ono, koma bwino." Ndiko kuti, ali ndi migodi yambiri pamunda, koma malo awo ndi owonekera. Chokhumudwitsa kwambiri ndi ichi:
Mawonedwewo akuyenera kutchula ma tebulo oyambira okha omwe ali mu database yofanana ndi mawonekedwe. Mawonedwe sangathe kufotokoza malingaliro ena.
Gome lotengedwa (lotanthauziridwa pofotokoza a SELECT statement mu FROM mawu)
Zodziphatikiza
Kutchula mizati pogwiritsa ntchito SELECT * or SELECT <table_name>.*
DISTINCT STDEV, STDEVP, VAR, VARPkapena AVG
Common table expression (CTE)
Mawu oyambira (CONTAINS, FREETEXT) SUM ntchito yomwe imatchula mawu osasinthika ORDER BY
CLR yotanthauzidwa ndi ogwiritsa ntchito aggregate TOP CUBE, ROLLUPkapena GROUPING SETS ntchito
MIN, MAX UNION, EXCEPTkapena INTERSECT ntchito TABLESAMPLE
Zosintha patebulo OUTER APPLY or CROSS APPLY PIVOT, UNPIVOT
Magawo ochepa
Inline (TVF) kapena multi-statement table-valued function (MSTVF) OFFSET
CHECKSUM_AGG
OUTER JOINS, UNION, ORDER BY ndi ena ndizoletsedwa. Zikanakhala zosavuta kutchula zomwe zingagwiritsidwe ntchito kusiyana ndi zomwe sizingagwiritsidwe ntchito. Mndandandawo ungakhale wocheperapo.