Jump to content
IGNORED

Database


Skyhighatrist

Recommended Posts

Još se rvemo, ali shvatio sam da ne mogu sve da nakrljam u jednu tabelu u momentu kad sam dobio poruku "property value is too large" :isuse: Onda sam izdelio (još delim) sve u onih pominjanih osam tabela, čini mi se da sam (za sad) uspešno napravio relaciju one to many sa ID-jem, i tako...Kad napucam sve u tabele, onda ću da mozgam o query-jima, i već osećam blagu nervozu :lol:

Link to comment
  • Replies 68
  • Created
  • Last Reply

Top Posters In This Topic

  • Skyhighatrist

    30

  • radisa

    15

  • JozoMujica

    5

  • salerokada

    5

Top Posters In This Topic

Posted Images

Dobro izmodelirana baza štedi mnogo muke kod upita. A ako si došao do poruke o višku polja to ne zvuči dobro.Onaj opis što si dao deluje poprilično komplikovano.Palo mi je na pamet jedno rešenje, ne znam da li baš odgovara poslovnom procesu:Imaš tabelu lice, sa polima lice_id, ime, prezime...Šifarnike tabele test1. Polja test1_id, odgovor test2. Polja test2_id, odgovor test3. Polja test3_id, odgovorI tabelu testiranje sa poljima: testiranje_id, lice_id, datum, test1_id, test2_id,..., test25_id, napomena

Link to comment

Tabele u bazi obicno sadrze nekoliko, do par desetina polja (kolona). U protivnom najcesce nesto nije u redu sa modelom.Evo kako bi model mogao da izgleda. Ako ovde ima eksperata za baze, verovatno ce mi zameriti sto ovaj model nije normalizovan - cini mi se da je ovakav (nenormalizvan) laksi za implementaciju u access-u.Plave tabele sa duplim okvirom najcesce se implementiraju tako da nemaju svoj id, neho im se primarni kljuc sastoji od kluceva tabela na koje se referisu. Recimo PK za uradjen_test je (lice_id, test_id). Ovo su zapravo agregacije kojima se realizuju relacije vise-u-vise (namerno nisam koristio simbol za agregacije da ne bih komplikovao).

post-391-13272263892178.jpg

Link to comment

So far so good.Noćas ću da završim sa pravljenjem tabela i formova, pa ću da unesem desetak recorda, i da vidim kako se sve ponaša.Accessov database checker za sad kaže da nema primedbi. :)

Link to comment
Za svakog čoveka unosim SVE parametre, razlikuju se rezultati, otud one drop down liste.Pošto se testovi ne rade u isto vreme, kad neko od njih kasnije uradi još neki od testova, uneće se još rezultata.Recimo, imam mogućnost da osoba radi 25 kratkih testova u jednom danu (mada se uglavnom radi do 8), i svaki test ima 10 rezultata, koji se biraju iz drop down listi od ukupno 50 mogućih varijacija. Sve to valja pomnožiti sa 8 dana testiranja. (Meni) to izgleda kao gomila podataka, a možda je to za database zmajeve sitnina, ne znam.Jašta, bataljujem i ja za danas, jutro podne je pametnije od večeri...
Ako sam dobro razumeo... (ovako bih ja uradio u db2 ali pretpostavljam da je slicno i u accessu)jedna tabela za ljude sa poljima za razne podatke i ID poljem (npr. ID_ispitanik)druga tabela sa testove (razna polja za pitanja i jedno ID) (npr. ID_test)treca tabela koja povezuje ljude i testove koje su primenili, zavisno od SQL upita mozda i ne mora imati ID (primarni kljuc se sastoji od ID_test, ID_ispitanik), ostala polja su odgovori tog konkretnog ispitanika. Ako ti treba i kog dana je primenjen test na tom ispitaniku onda dodas polje i za broj dana. SQL upit bi trebao iz tabele testova da random bira 10 od 50 pitanja (ako sam dobro razumeo). Sad, mozes imati i u okviru sql upita uslove koji proveravaju da li je taj ispitanik tog dana vec imao testova (ili koliko je imao pa izbacuje broj) itd... Budi do kraja precizan pa cemo da napravimo resenje ;) Sto rece sale, koliko vas je dbovaca, majkumu...
Link to comment

U nekom sam velikom poslu, pa na brzinu preleteh pitanje i odgovore...Koliko sam shvatio, tebi će biti dovoljne tri tabele:Ispitanik1. ID Ispitanika (primarni ključ)2. Ime i prezime3. JMBG4. Adresa...Test1. ID Testa 2. Naziv testaRezultati1. ID (ja uvek stavljam ID, i obično ga postavim da bude AutoNumber, osim ako zbog nečega ne moram da ga koristim kao redni broj, u tom slučaju ne stavljam AutoNumber zboh obrisanih recorda)2. ID_Ispitanika3. ID_Testa4. OcenaE, sad, ako barataš bar malo sa Access-ovim VBA, ja bih ti preporučio da izbegneš povezivanje polja na formi i tabela, već da sve radiš slanjem SQL upita iz VBA Accessovom engineu, tako mnogo više stvari imaš pod kontrolom... Opet, to je stvar ukusa, meni više leži programiranje od, hm, makroovanja. :)

Link to comment
  • 2 weeks later...

Ne znam da li je bas odgovarajuca tema, ali potrebna mi je mala pomoc oko upita, ako bi neko bio voljan da pogleda problem.Treba da proverim da li neke tabele imaju primarne i foreign kljuceve, i u SQLu sve ide glatko, koristim IF NOT EXISTS i ALTER TABLE ADD CONSTRAINT blanpr

if not exists (
SELECT f.name AS ForeignKey
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
WHERE OBJECT_NAME(f.parent_object_id) LIKE 'PDBT_Project'
	AND COL_NAME(fc.parent_object_id, fc.parent_column_id) LIKE 'P_DevGroupClassID')
)
BEGIN	
	ALTER TABLE PDBT_Project ADD 
		CONSTRAINT FK_PDBT_Project_SDBT_DeviceGroup_Class_Profiles FOREIGN KEY (P_DevGroupClassID) 
		REFERENCES SDBT_DeviceGroup_Class_Profiles (ProfileID)	
END	

problem nastaje kada hocu da napravim MS ACCESS dvojnika, ne ide nikako. probala sam nesto ovakvo

ALTER TABLE PDBT_Project ADD 
CONSTRAINT FK_PDBT_Project_SDBT_DeviceGroup_Class_Profiles FOREIGN KEY (P_DevGroupClassID) 
REFERENCES SDBT_DeviceGroup_Class_Profiles (ProfileID)	
when not exists (  
select * from MSysRelationships 
where szObject = 'PDBT_Project' and szColumn = 'P_DevGroupClassID' 
and szReferencedColumn = 'ProfileID' and szReferencedObject = 'SDBT_DeviceGroup_Class_Profiles')

jer bi trbalo da WHEN NOT EXISTS zameni IF NOT EXISTS iz T-Sqla, ali se buni kao da je sintaksna greka u ALTER TABLEprobala sam jos neke varijacije, nista nije bilo uspesno.(sto se tice primarnog kljuca, posto nikako nisam uspela shvatiti u kojoj tabeli u MSA se to i nalazi, uradila sam taj deo kroz kod)mozda je neko imao susrete sa ovim pa bi mogao dati koji savet..pretrazila sam moja uobicajena mesta za pomoc, Code Guru izmedju ostalog, ali izgleda da ne mogu lepo da ubodem kako da pretrazim problem.

Link to comment
Ne znam dal' će ti nešto značiti, SQL formatter za Access prijavljuje:
ALTER(1,1) expected token:; ( SELECT INSERT DELETE UPDATE CREATE DROP 

nije to, obelezi mi WHEN, ocito da nece tako a ja nemam ideja vise kako da ga zaskocim. moram na neki nacin proveriti da li kljuc vec postoji.
Link to comment
nije to, obelezi mi WHEN, ocito da nece tako a ja nemam ideja vise kako da ga zaskocim. moram na neki nacin proveriti da li kljuc vec postoji.
Napišeš u VBA rutinu(ili funkciju, ako ti je bitno šta se desilo), u njoj uradiš count po tom ključu i onda, ako je count 0, uradiš alter... Rutinu pozoveš, odakle ti već treba...Ovo pišem iz glave, pa će verovatno biti grešaka, ali se malo pomuuči... :) NIsam davno pisao ništa u Accessovom VBA, pa sam možda nešto pobrljavio...
Private function Check_FK() as boolean

Dim string_SQL As String 
Dim string_SQL2 as String

string_SQL = "select count(*) from MSysRelationships 
where szObject = 'PDBT_Project' and szColumn = 'P_DevGroupClassID' 
and szReferencedColumn = 'ProfileID' and szReferencedObject = 'SDBT_DeviceGroup_Class_Profiles'"


With CurrentDb.OpenRecordset(string_SQL)
If .Fields(0) = 0 Then

string_SQL2="ALTER TABLE PDBT_Project ADD 
CONSTRAINT FK_PDBT_Project_SDBT_DeviceGroup_Class_Profiles FOREIGN KEY (P_DevGroupClassID) 
REFERENCES SDBT_DeviceGroup_Class_Profiles (ProfileID) "

DoCmd.RunSQL string_SQL2
Check_FK=true
else 

Check_FK=false 
End If
End With

End Sub

Edited by radisa
Link to comment
@radisamislim da nesto tog tipa ne mogu zvati iz programa? (trebalo bi da se izvrsi u pozadini kada korisnik startuje nas program)
Čekaj bre, u čemu ti pišeš to? Jel' ti sve u Accesu, ili imaš program u C#, VBu ili tako nečemu, a samo baza u accessu?Ako je ovo drugo, primeni istu logiku, samo za odgovarajući programski jezik...A ako ti je sve u Accessu, tek onda nema problema...
Link to comment

Kod programa mi je u C++u, i radimo tako da napisemo .sql upite i njih pozivamo po potrebi u kodu, odvojeno za SQL i MSAccess korisnike, posto su oni koji koriste MSA nazalost u vecini. Nije meni uopste problem da ja napisem u kodu sve ovo - nego je fora sto imam da odradim za 20-30 tabela pa ce to biti smaranje, htela sam da vezem sve u jedan upit i da vozim - kao sto je slucaj sa SQLom. Zakljucujem da nema druge nego kroz kod - i to je za ljude.svakako - radisa, historian - hvala ;]

Edited by I'm with the pilots
Link to comment
Kod programa mi je u C++u, i radimo tako da napisemo .sql upite i njih pozivamo po potrebi u kodu, odvojeno za SQL i MSAccess korisnike, posto su oni koji koriste MSA nazalost u vecini. Nije meni uopste problem da ja napisem u kodu sve ovo - nego je fora sto imam da odradim za 20-30 tabela pa ce to biti smaranje, htela sam da vezem sve u jedan upit i da vozim - kao sto je slucaj sa SQLom. Zakljucujem da nema druge nego kroz kod - i to je za ljude.svakako - radisa, historian - hvala ;]
Acess, koliko znam, stvarno dugo, dugo nisam radio u njemu, ne podržava takvu sintaksu, kakvu bi ti želela u sql kodu...Možeš ti napisati subroutine u Accessu(kao ono moje gore) pa je pozivati iz C++(definišeš Acces objekat, otvoriš ga i pozoveš rutinu) ili napisati u finkciju u C++ koja radi to isto... To već znaš, nije lepo, ali će poslužiti... I ovo drugo je, po meni, bolje...
Link to comment

Glupo (pretpostavljam) pitanje:Imam 10 tabela, 10 odgovarajućih formova, svi spakovani zajedno u Navigation form.Prvi form su ime, prezime, adresa, etc, ostalih devet su nekakvi rezultati.Kako da kažem Accessu da kad dodam prvi record (ime, prezime...), doda prazne recorde i u ostalih 9 tabela, bez obzira da li ću ih unositi odmah, kasnije ili nikad?Moram da dodajem kontrole, jel? (jer očigledno kad na status baru čuknem New (blank) record, on dodaje record samo za prvu tabelu, a ne i za ostale)Sve tabele su povezane one-to-one relacijom preko ID fielda.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...