Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  SQL kitsendus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele 1, 2  järgmine
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
multizync
HV kasutaja
multizync

liitunud: 23.05.2005




sõnum 01.04.2012 09:58:52 SQL kitsendus vasta tsitaadiga

Nii, selline lugu, et kuidas saab teha kitsenduse ühele SQL andmebaasi tabeli veerule, et mida saab ühe päeva jooksul muuta ainult ühel korral.
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
Sold OUT
no credit
Sold OUT

liitunud: 30.07.2002



Autoriseeritud ID-kaardiga

sõnum 01.04.2012 10:52:29 vasta tsitaadiga

Tulistan puusalt, pole andmebaasidega süvitsi tegelenud rohkem kui baasi installimine ja tabelite loomine, täitmine, lugemine koolitöö tarbeks, aga: lisaväli ajahetkega kui veerus on andmed uuendatud, kui järgmine kord sinna vaja kirjutada, siis applikatsiooni poolt miskine kontrollskript, mis võtab lisaveeru väärtuse, kontrollib kas praeguse hetke ja kirjasoleva vahele jääb 24h ning kui saab positiivse vastuse, kirjutab veergu uue väärtuse ning fikseerib uue ajahetke. kui saab negatiivse tulemuse, siis väljastab veateate kasutajale (või on üldse vait) ning aja muutujat ei uuendata ning andmeid ka ei kirjuta tabelisse. Andmebaasides pole mõtet andmeid muuta vaid ikka lisada, terviklikkuse põhimõtte tagamiseks.
_________________
People have been calling for a month and we've been sold out for a week or so.
Kommentaarid: 92 loe/lisa Kasutajad arvavad:  :: 5 :: 1 :: 79
tagasi üles
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 01.04.2012 13:12:35 vasta tsitaadiga

Parem variant on progeda vastav kontroll otse andmebaasi trigeri abil.
Et siis teed veel ühe veeru juurde, kus hoitakse aega ja iga kord, kui vastavat veergu uuendatase, läheb triger käima ja uuendab automaatselt aja kõrvalveerus ära või siis keeldub uuendamast, kui 24h pole möödas.

_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 01.04.2012 13:50:27 vasta tsitaadiga

carlking kirjutas:
Andmebaasides pole mõtet andmeid muuta vaid ikka lisada, terviklikkuse põhimõtte tagamiseks.
Wait.. wut? Kui andmed semantiliselt on muutuvat laadi, siis .. peaks neid ikka lisama .. ? Ei saa sellisest mõttekäigust küll nüüd aru.

Üldiselt eelpool soovitatud triggeri lahendus oleks ilmselt kõige mõistlikum, kui sinu valitud andmebaasi mootor võimaldab triggereid kasutada.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
multizync
HV kasutaja
multizync

liitunud: 23.05.2005




sõnum 01.04.2012 14:05:45 vasta tsitaadiga

Hmm, mul ongi kaks andmebaasisüsteemi. Nagu, et mõlemas pean sama asja tegema. Ühe ja sama andmebaasi disainin Rel'is ja sama teen ka PostgreSQL's, postgresis on võimalik triggereid teha, aga Rel'is minu teada pole.
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 01.04.2012 15:03:21 vasta tsitaadiga

Aga milleks sul kaks andmebaasi, mis praegu sinu kirjelduse järgi teineteist dubleerivad? icon_smile.gif
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
multizync
HV kasutaja
multizync

liitunud: 23.05.2005




sõnum 01.04.2012 15:25:54 vasta tsitaadiga

Mu ülesanne näeb seda ette. Ma disainin kahes erinevas andmebaasisüsteemis projekti valmis ja siis pean võrdlema neid..
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 03.04.2012 15:52:43 vasta tsitaadiga

Kui tegemist multimootori toega lahendusega, siis on mõistlik äriloogika baasidest väljaspool hoida. Ehk triggerid on paha mõte (pead tõenäoliselt igas mootoris eraldi kirjutama, iga muudatuse puhul jälle sama jama).
Tabelis olgu veerg tähendusega "viimase_muutmise_aeg", äriloogika kihis pärid selle väärtuse, teostad kontrolli ja vastavalt tulemusele toimetad edasi.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 03.04.2012 16:36:41 vasta tsitaadiga

Kui inimene eelpool viitas, et tegemist on (kooli?)ülesandega, kus sama andmemudel tuleb realiseerida kahes erinevas andmebaasisüsteemis, siis ilmselt ei ole ärikihis tal võimalik ega lubatud neid muresid lahendada.
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 04.04.2012 14:37:34 vasta tsitaadiga

Kui see tõesti nii on, siis ma kirjutaks ikkagi ülesande lahenduse juurde "* Päris elus hoitakse sellisel juhul äriloogika ärikihis." Kui põhjendus ka juures, siis viisakas õppejõud võiks selle eest lisapunkti anda.
Loomulikult saab probleemi triggeri/protseduuri vms abil ka baasis lahendada aga mõistlikuks ma seda ei pea.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiinanina
HV kasutaja

liitunud: 27.02.2003




sõnum 04.04.2012 17:36:22 vasta tsitaadiga

2korda2 kirjutas:
Kui see tõesti nii on, siis ma kirjutaks ikkagi ülesande lahenduse juurde "* Päris elus hoitakse sellisel juhul äriloogika ärikihis." Kui põhjendus ka juures, siis viisakas õppejõud võiks selle eest lisapunkti anda.
Loomulikult saab probleemi triggeri/protseduuri vms abil ka baasis lahendada aga mõistlikuks ma seda ei pea.



Päris elus tekib sageli situatsioon, kui kliendi juures on adminni õigustega huvilisi, kes püüavad omalt poolt aidata raamatupidajatel, klienditeenindajatel jne teha selliseid asju mida programmiga ei saa või ei tohi.
Ja kui midagi olulist on kirjutatud programmi aga mitte trigerisse siis võib tekkida situatsioon kui süsteem enam ei toimi.

On tähelepanuväärne, et kohalikud adminnid trigerite ja protseduuride kallale tavaliselt ei lähe. Samas pole neil mingi probleem ilma südametunnistust kaasamata tabelites ükskõik milliseid muutusi teha.

Pärast süsteemi seisakut võid ju kliendile seletada, et Ta ise süüdi.
Aga oli juba jama ja järgmist süsteemi ei pruugita sinult enam tellida.

Kui oled kindel, et keegi peale sinu programmi ei pääse sql-i kasutades andmebaasi ligi võid teha mida tahad.
Kui aga on õhkõrn võimalus vastupidiseks, tuleks kõik lubatu ja lubamatu kirjutada trigeritesse, väljamaskidesse jne jne jne

Endal samuti lihtsam viis aastat hiljem muudatusi sisse viia. Kui baas ei luba teha seda mis vahepeal ununenud.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 04.04.2012 20:26:01 vasta tsitaadiga

wiinanina,
ma ei saa sellest seletusest aru.
1. Kliendi adminil pole DBA ligipääsu, mis võimaldaks andmete/struktuuri muutust. Kui seda nõutakse, siis ühtlasi läheb lepingusse ka punkt, et vastutus läheb ka vastava admini õlule. Nii lihtne see ongi. Hoolduslepingud on päris ranged ses osas. Igasugu "huvilised" võivad äärmisel juhul saada select õiguse piiratud hulgale tabelitele/view-dele.
2. Eeldus, et DBA ei lähe triggeri/protseduuri kallale aga andmeid muudab mõnuga, on paremal juhul lihtsameelne. "Tavaliselt" = 50:60 = BS. Sellise asja peale lihtsalt ei tohi lootma jääda.

See, et mingeid funktsionaalseid muudatusi on baasi tasemel LIVE-s oleva rakenduse korral lihtsam/kiirem teha, kui rakenduses oleva loogika korral, on juba hoopis teine küsimus ja ei käi kindlasti selle teema alla.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiinanina
HV kasutaja

liitunud: 27.02.2003




sõnum 05.04.2012 00:23:22 vasta tsitaadiga

2korda2 kirjutas:
....1. Kliendi adminil pole DBA ligipääsu, mis võimaldaks andmete/struktuuri muutust. ....



See tegelikult väikefirmade probleem.
Aga Eestis suurfirmasid praktiliselt pole.

Tuleb palju vaeva näha ja selgitada, et
... kliendi jaoks ei juhtu midagi kui juhtub auto/lennuki/laeva õnnetus kus osalised mõned itfirma võtmeisikud (aga tegelikult tahaks ju väljasõidu või suvepäevad või ekskursiooni korraldada)
... kliendi jaoks ei juhtu midagi, kui lennuk lendab keset tööpäeva itfirma tööruumidesse ja plahvatab
jne jne jne
Kindlustus kliendi rahulolu antud situatsioonides ei taga.


Lubades kliendil teatud tasemel ligipääsu on need riskid kliendi jaoks märkimisväärselt väiksemad.
Lubades kliendil juurdepääsu kaob selle üle kontroll.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 05.04.2012 10:57:29 vasta tsitaadiga

Siin on üks "aga". Kui mingi piirang on realiseeritud äriloogikas, siis sellest möödahiilimiseks ei olegi ilmtingimata DBA õigust vaja kuna sigadusi saab teha ka selle äriloogika kihi kasutaja alt ja selle kasutaja kättesaamise võib teha küll keeruliseks, aga mitte võimatuks.
Samuti on kliendil suhteliselt palju võimalusi asja kangutama hakata, kui tal andmebaasiserverile füüsiline ligipääs on. Ehk siis lolluste välistamiseks võib kliendi serveris või töökoha arvutis olla vaid presentatsiooni osa, ärioogika ja salvestuskihile ei tohiks klient füüsilist ligipääsu omada, kui eesmärk on välistada otse andmebaasi torkimine.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
multizync
HV kasutaja
multizync

liitunud: 23.05.2005




sõnum 05.04.2012 14:26:15 vasta tsitaadiga

Tänud vastuste ja arutelu eest..

Mul oleks ühe asja kohta veel üks küsimus. Kui ma lisan tabelitele CHECK kitsendusi, siis kuidas oleks mõistlik teha. Kui mul on näiteks toa hinnale pandud kitsendus, et "Toa hind on alati positiivne arv". Siis CHECK kitsenduse puhul oleks korrektne panna, et "hind >= 0", kuna 0 on positiivne arv, aga reaalsuses, näiteks ma ei suuda kuidagi välja mõelda kuidas saaks Hotellis toa hind olla kunagi 0.
Samas võiks panna kitsenduse, et toa hind on suurem kui 0., CHECK kitsendus oleks siis (hind > 0), aga siis see on ju ka selge, et reaalsuses toa hind ei ole kunagi ka 0.5 euri või 1 eur vms. Mingit sümboolset nr nagu ei hakkaks ka ennustama, et alla selle hinna hotellis tube ei ole.

On keegi sellise asjaga kokku puutunud ja võiks öelda, kuidas oleks mõistlik selline kitsendus kirja panna. Või kui jääkski, et hind on alati positiivne, siis ära seletada, et millal võiks hind olla 0 euri näiteks..icon_biggrin.gif Ma hetkel ei suuda seda välja mõelda..icon_smile.gif

Tänud ette..
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 05.04.2012 14:39:48 vasta tsitaadiga

Kui ülesandes on öeldud, et olgu positiivne, siis >0 ja kõik ju. icon_smile.gif
Sa ei pea andmebaasi pool muretsema selle pärast, et hind ei ole 0.5 euri. Aga mis siis, kui kunagi tuleb kampaania ja andmebaas ei luba kampaaniat läbi viia?
Ehk siis >0 kitsendus on mõeldud pigem selle pärast, et kogemata sattunud negatiivne arv kuskil süsteemis mingit kaost ei tekitaks.

_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 05.04.2012 14:41:02 vasta tsitaadiga

Hind võib ju teatud juhul 0 olla, näiteks mõne VIP majutamise puhul, kui tema hotellis viibimise fakt on juba ise piisavalt hea reklaam, samuti võib see teatud kampaaniate puhul 0 olla(näiteks ostad mingi muu toote/teenuse, saad majutuse tasuta). Kindlasti võib neid näiteid veel tuua.
Kui hinnapoliitika väga jäigalt paigas on, siis põhimõtteliselt saad ka foreign key teha, mis hinnakirjast kontrollib, aga mina jätaks pigem >=0


viimati muutis napoleon 05.04.2012 14:41:41, muudetud 1 kord
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 05.04.2012 14:41:57 vasta tsitaadiga

Alustuseks - matemaatiliselt ei ole null ei positiivne ega negatiivne arv. icon_smile.gif

Rääkides aga andmebaasidest ja infosüsteemidest - kui nõuetesse on kirjutatud, et "toa hind on alati positiivne arv", siis panedki tingimuseks hind > 0 .. pole sinu asi üldiselt sel kohal enam mõtlema hakata, et kas äkki peaks 0 asemel 1 või 5 vms. panema, sest 0.01 on sinu arvates ebatõenäoline. icon_smile.gif Arendaja üldiselt peaks tegema asju spetsifikatsiooni järgi .. kui spekk tundub kahtlane, siis tuleb sellest analüütiku või tellijaga rääkida ning koos üle täpsustada detailid. Omalooming ei ole siinkohal kindlasti asjakohane. icon_smile.gif

Ja millal on hind 0? Siis kui on vaja kliendile mett moka peale määrida .. mingit eelnevat äpardust heastada järgmisel külastusel tasuta toa pakkumisega? icon_smile.gif

edit: ja ette jõuti minust.. icon_smile.gif

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 05.04.2012 14:48:14 vasta tsitaadiga

Toa hind võib väga vabalt 0 olla:
a) kampaania korras loositi tuba välja,
b) tegemist on hotelliomaniku isikliku sviidiga,
c) tuba on tasuta juhul, kui kasutatakse piisaval hulgal muid hotelli teenuseid (kasiinodes VIP-d näiteks)
jne.
Päris elus on tüüpiliselt 101 erandit igale esialgu loogilisena tunduvale piirangule. Ka sellise piirangu seaksin mina äriloogika kihti.

[tähenärin]
0 pole positiivne arv. Pole ka negatiivne. Check ">=0" tähendab, et väärtus peab olema mittenegatiivne.
[/tähenärin]
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
serk
HV kasutaja

liitunud: 24.05.2003




sõnum 06.04.2012 21:28:11 vasta tsitaadiga

wiinanina kirjutas:

Päris elus tekib sageli situatsioon, kui kliendi juures on adminni õigustega huvilisi, kes püüavad omalt poolt aidata raamatupidajatel, klienditeenindajatel jne teha selliseid asju mida programmiga ei saa või ei tohi.
Ja kui midagi olulist on kirjutatud programmi aga mitte trigerisse siis võib tekkida situatsioon kui süsteem enam ei toimi.
On tähelepanuväärne, et kohalikud adminnid trigerite ja protseduuride kallale tavaliselt ei lähe. Samas pole neil mingi probleem ilma südametunnistust kaasamata tabelites ükskõik milliseid muutusi teha.


Appi! Selle peale ütleks küll ainult, et vaesed programmeerijad ja analüütikud, kes hiljem seda saasta parandama peavad. See on täiesti ebanormaalne, et rakenduse ärikasutaja pöördub otse DBA poole andmetes muudatuste tegemiseks. Igasugused kitsendused tarkvaras on põhjendusega seal. Olukordades kus on vaja muuta otse andmeid andmebaasis pöördutakse esmalt arendusosakonda, kus valmistatakse vajalikud scriptid mis installeeritakse läbi DBA. DBA ei tunne äriloogikat ja enamjaolt ei tea ka andmemudelit.

Triggeris äriloogika hoidmine on väga halb praktika.
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 06.04.2012 22:46:24 vasta tsitaadiga

serk kirjutas:
Triggeris äriloogika hoidmine on väga halb praktika.


Ehk põhjendad seda väidet pisut? Trigger on üks koht, mis garanteeritult käivitub olenemata sellest kust ja kuidas selle tegevuseni jõuti. Ainuke viga on see, et teoorias ei tohiks äriloogika selles kihis olla, samas reaalses elus on vähe lahendusi, kus need kolm kihti ka reaalselt täiesti lahku on löödud.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
serk
HV kasutaja

liitunud: 24.05.2003




sõnum 06.04.2012 23:08:32 vasta tsitaadiga

napoleon kirjutas:
serk kirjutas:
Triggeris äriloogika hoidmine on väga halb praktika.


Ehk põhjendad seda väidet pisut? Trigger on üks koht, mis garanteeritult käivitub olenemata sellest kust ja kuidas selle tegevuseni jõuti. Ainuke viga on see, et teoorias ei tohiks äriloogika selles kihis olla, samas reaalses elus on vähe lahendusi, kus need kolm kihti ka reaalselt täiesti lahku on löödud.


Nagu ka Tom ütleb, triggerid on aeglased, haldamatud ja sageli valesti implementeeritud. Lugege ise, väga hea artikkel. Ma olen korduvalt olnud olukorras, kus operatsioonis osaleb kümneid tabeleid ja ühel on trigger peal äriloogikaga. Ja proovi sa kurat aru saada kus andmete manipulatsioon toimub, kui ka PL/SQLi on tuhandeid ridu kõrval.

http://www.oracle.com/technetwork/issue-archive/2008/08-sep/o58asktom-101055.html

Mina kasutan triggereid ainult üheks ja see on setup tabelite logimine.
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiinanina
HV kasutaja

liitunud: 27.02.2003




sõnum 06.04.2012 23:38:15 vasta tsitaadiga

serk kirjutas:
.... See on täiesti ebanormaalne, et rakenduse ärikasutaja pöördub otse DBA poole andmetes muudatuste tegemiseks. Igasugused kitsendused tarkvaras on põhjendusega seal. Olukordades kus on vaja muuta otse andmeid andmebaasis pöördutakse esmalt arendusosakonda, kus valmistatakse vajalikud scriptid mis installeeritakse läbi DBA. .....



Kui midagi ei tööta, siis pöördutakse adminnide poole.
See ju normaalne.
Lõppkasutaja ei pruugi teada, kas netiühendus kadunud, server maas, või probleemid andmebaasiga.
Ei pöörduta arendusosakonda. Võib-olla adminnid suunavad edasi sinna.
Kui selline osakond olemas.
Kui selline osakond olemas ja hästirahvastatud siis võib esmane pöördumine muidugi sinna minna, kust hakatakse otsima põhjust, miks kokkuvõttes netiühendus või elektrivool puudu.
Ja sealt pöördutakse edasi kas dba-de või nende kodanike poole, kes peaksid asja hooldama/arendama.
See võtab aega.
Kuid maksuametile tuleb midagi saata 10 kuupäevaks ja midagi 20 kuupäevaks.

dba on ju tubli ja teeb kõike firma hüvanguks. Ning kiiresti.
Väline arendaja muudab asju vastavalt lepingus toodud tähtaegadele. Üldiselt n-nädalat alates arendusosakonna poolt antud ülesandest, millele lisandub töömahus ja hinnas kokkuleppimise protsess.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
multizync
HV kasutaja
multizync

liitunud: 23.05.2005




sõnum 10.04.2012 02:22:51 vasta tsitaadiga

Tekkis veel üks mure. Mul on 2 tabelit,
Hinnaklass(hinnaklass_id SMALLINT, korruse_vahemiku_algus SMALLINT, korruse_vahemiku_lopp SMALLINT), milles on primary key hinnaklass_id
Tuba (nr INTEGER, hinnaklass_id SMALLINT, korrus SMALLINT), milles on primary key'ks nr ja foreign key'ks on hinnaklass_id

Hinnaklass tabel on mul valmis tehtud, ses suhtes, et mul on väärtused seal sees olemas. On 4 klassi hetkel.
Hinnaklass tabel

Nüüd on sellist asja vaja, et kui tabelisse Tuba lisada ridu, siis korrus peab jääma alati Hinnaklassi tabelis olevate korruse vahemiku alguse ja lõpu vahele. Proovisin selleks teha triggeri funktsiooni,(ühendades Tuba ja Hinnaklass tabelid JOIN'iga kokku) et enne Tuba tabelisse ridade lisamist käivitatakse funktsioon, midagi üritasin teha, aga ei tööta, või on midagi hoopis valesti


Spoiler Spoiler Spoiler
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 10.04.2012 09:41:50 vasta tsitaadiga

Ma ei loe küll postgreSQL süntaksit päris vabalt, aga hetkel tundub, et kontrollid kas tabelis Tuba on vähemalt üks kirje, millel korruste vahemik korrektne on. Õige oleks tõenäoliselt midagi sellist:
PERFORM Tuba.hinnaklass_id, korrus, korruse_vahemiku_algus, korruse_vahemiku_lopp
FROM NEW INNER JOIN Hinnaklass ON Tuba.hinnaklass_id = Hinnaklass.hinnaklass_id
WHERE korrus BETWEEN korruse_vahemiku_algus AND korruse_vahemiku_lopp;

Võimalik, et seda NEW-d peab ka kuidagi teistmoodi käsitlema(ei viitsi hetkel pgSQL manuali lugema hakata) näiteks:
PERFORM Hinnaklass.hinnaklass_id
FROM Hinnaklass
WHERE NEW.korrus BETWEEN Hinnaklass.korruse_vahemiku_algus AND Hinnaklass.korruse_vahemiku_lopp
AND NEW.hinnaklass_id = Hinnaklass.hinnaklass_id;

Teine viga on selles, et minu arusaamist mööda on sul kontroll tagurpidi ehk peaks olema midagi sellist
IF NOT FOUND THEN
RAISE EXCEPTION 'Korrus peab jääma korruse vahemiku alguse ja korruse vahemiku lõpp vahele!';
ELSE
RETURN NEW;
END IF;
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  SQL kitsendus mine lehele 1, 2  järgmine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.