Treba mi mala pomoc oko planiranja baze

Treba mi mala pomoc oko planiranja baze

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Treba mi pomoc jer nemam bas nekog iskustva sa bazama.

Opis problema:
Radi se o testiranju anti-virus programa. Svaki program moze da napravi log-fajl za koje vec imam parsere koji kao izlaz daju koja je infekcija detektovana na kom fajlu.

Treba mi da napravim program koji bi kao izlaz dao tabelu oblika (kolone):

| ime fajla ( ili ID) | datum | velicina | infekcija 1 | infekcija 2 | ... | infekcija n |

gde je "infekcija 1" ono sto je prvi AV prijavio, "infekcija 2" ono sto je drugi program prijavio itd.
Vazno mi je da tih programa mogu kasnije da dodajem za kako koji napisem parser i uradim test.

Da li je bolje da za svaki program radim posebnu tabelu ( | ime fajla | infekcija Smajli, ili je moguce u nekoj postojecoj tabeli dodavati kolone po potrebi?

Najverovatnije cu koristiti dBase ili slicnu bazu kod kojih je moguce engine baze integrisati u moj program (bez da posebno instaliram bazu i njen daemon/servis)



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 18 Apr 2003
  • Poruke: 1819
  • Gde živiš: Beograd

ne razumem se mnogo u te antiviruse, ali moj predlog oko projektovanja baze bi bio da napravis jednu tabelu kao sifarnik tih infekcija i jednu tabelu sa fajlovima koje zelis da testiras, a i rezultate da smestis u trecu tabelu...
eto predloga, a ako ti se dopadne,moze to da se razdradi jos.



offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Bojim se da me nisi razumela.

Da li je bolja ovakva konstrukcija:
- rezultati testa jednog AV programa u jednu tabelu formata |ime fajla(ID)| infekcija|

- ukupne (uporedne) rezultate prikazati pomocu queryja koji ce biti join tabela po ID-u.

Ili:
Jedna jedina tabela, pa dodavati kolone kada dodajes novi antivirus koji si testirao.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

pa ne ide bas tako Bobby... treba ti vise tabela, od kojih ce ti glavna tabela biti

Tabela:

MainTests
MNT_CdiMainTest, MNT_DssFileName, MNT_DssInfection, MNT_DtdTestDate

Sad, treba da pogledas rezultat fajl, i vidis koliko ima stavki. Recimo da ima, vreme za testiranje, ime virusa, duzina u bajtovima, pocetna adresa (sve ces to morati da isparsiras), pa onda punis tabelu ovako

TestResults
TRL_CdiTestResult, TRL_CdiMainTest, TRL_HrdTimeProcessed, TRL_DssVirusName,TRL_NuiLength, TRL_NuiStartAddress

itd..

PS. samo da razumes moju nomenklaturu... prvo ide prefix tabele od 3 slova. Posle tip od 3 slova, gde su prva 2 naziv a treci tip
Cdi = Code Integer
Dss = Desctiption String
Nui = Number Integer
Dtd = Date Date
Hrd = Hour Date
itd...

Ako su ti prefiksi razliciti, izbeci ces aliase u stilu

select TRL_DssVirusName,MNT_DssFileName from TestResults
inner join MainTests on (TRL_CdiMainTest=MNT_CdiMainTest)

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

@beli

TestDate mi nije bitan. Mislim da opet nisam objasnio kako valja.

- Antivirus program napravi log-fajl onoga sto je skenirao.
- Moj program koji vec postoji (LogAnalyzer) od toga napravi standardan CSV fajl sa sledecim kolonama:
 | ime skeniranog fajla | tip arhive | exe-packer | detektovan je kao... |

Za svaki AV program napravim po jedan CSV fajl, i uvek se skenira ista kolekcija fajlova na disku tako da je kolona |ime skeniranog fajla| ista u svim CSV fajlovima (teoretski, posto nece svaki AV da prepozna sve inficirane fajlove).

Sa ovim sto do sada imam, uporednu tabelu mogu da napravim samo kombinovanjem informacija iz tih CSV fajlova. Bitne kolone su prva i zadnja.
Uporedna tabela bi bila oblika:
 | ime skeniranog fajla | KAV je detektovao... | Norton je detektovao ... | AVG je detektovao... |

Ideja mi je da izbegnem te CSV fajlove, i da koristim bazu.
Da li da pravim posebne tabele za svaki AV, analogno ovome sto vec radim sa CSV fajlovima, pa da na kraju uporednu tabelu pravim citanjem iz baze, ili da odmah trpam sve u jednu tabelu (tu uporednu) bez pravljenja posebnih tabela.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

pa naravno da je to ideja. Mora da ima jedna tabela za te CSV fajlove, sa zajednickim informacijama.

Takodje, moras i da imas glavnu tabelu jer tako je bolje organizovati kad je radjen koji test i dodatne informacije o testu. Rezultate ubacujes u drugui tabelu sa FK te glavne tabele (to su oni tvoji CSV).

Sto se tice "KAV je detektovao", ja bih napravio jos jednu tabelu i jedno polje... polje je XYZ_OplDetektovano (0 ili 1), i onda ID sledece tabele:

AVProgrami:
AVP_CdiAvProgram, AVP_DssAvProgram

zasto to? zato sto ces lakse praviti filtere po integer poljima nego po string poljima, omogucice ti statistiku, operacije kao sto su COUNT, SUM i ostalo, jer mozes da sortiras po programima itd.



Ja bih tvoje CSV prebacio u sledecu tabelu. (predhodno onu main test tabelu, gde je datum, i jos neke korisne informacije ako ih ima).

Evo kako bih ja sve uradio..

MainTests:
TST_CdiMainTest
TST_DssMainTest
TST_DtdDate
.... dodatna polja ako je potrebno, sto je vezano za test

AvPrograms
AVP_CdiAvProgram
AVP_DssAvProgram

ActionsTaken
ACT_CdiActionTaken
ACT_DssActionTaken

TestResults
RSL_CdiTestRezult
RSL_CdiMainTest
RSL_DssFileName
RSL_OplInfected
RSL_CdiAvProgram
RSL_CdiActionTaken
RSL_DsbLogFile (BLOB)
.... dodatna polja


Mislim, ovako bih ja organizovao tabele. Tako bi SQL sintakse bile ciste, brze, uz mogucnost kreiranja statistike

Ovo sto sam napravio je bazirano na informacijama koje si mi dao i koje mislim da bi trebalo da ima. Sto vise informacija, to bolje.

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Datum testa nije relevantan jer svi testovi, da bi bili validni, moraju biti radjeni istovremeno, ili da postoji update freeze za sve programe (svim programima se istovremeno radi update i blokira se dalja mogucnost updatea).
To u sustini nije ni toliko bitno za resenje ove price Smile

Nisam davio sa detaljima za koje sam mislio da su nebitni, ali cu sada biti detaljan.

Log fajlovi raznih Antivirus programa imaju razlicite formate, razlicito prijavljuju ukoliko su pri skeniranju usli u neku arhivu, neki su Unicode itd itd. Ja sve te razlicite formate parsujem u CSV koji izgleda tacno ovako:
 file_path\file_name;archiver;packer;infection;target_folder\file;process_results
Zadnje dva polja su nebitna za bazu. U LogAnalyzeru ja detektovane fajlove skupljam u drugi folder i menjam im imena (to stoji u predzadnjem polju) i zapisujem da li je Move uspeo (ima slucajeva gde se ne moze izbrisati source file).

Posto ne prijavljuju svi AV programi tipove upotrebljenih arhiva ili packera, u nekim CSV izvestajima su ta polja prazna. KAV 5.0 je po ovom pitanju najbolji, i on sluzi kao referenca za detekciju packera i archivera.
Relevantni podaci su mi jos i datum kreiranja fajla, velicina i MD5 hash.

Jedan izvestaj (ono sto citaoc treba da vidi) bi trebao da sadrzi u jednom row-u u tabeli:
ime_fajla datum_kreiranja arhiver packer infekcija (kako ju je prijavio program 1) . . infekcija (kako ju je prijavio program n)

Filtriranje izvestaja treba da bude omoguceno:
- datum kreiranja fajla (recimo zelim da vidim rezultate samo za viruse nastale u zadnja dva meseca)
- arhiver (zelim da vidim koji AV program je u stanju da udje u RAR i tamo nadje virus)
- packer (isto kao za arhiver)

Bitna stvar za celu bazu: treba da se moze lako dodati rezultati skeniranja za neki AV program koji nije bio predvidjen pri kreiranju baze (nov program na trzistu).
Iz ovog zadnjeg me interesuje da li je bolje da za svaki AV program imam tabelu tipa:
MD5 fajla (kao ID/kljuc) ime_nadjene_infekcije
+ propratna tabela sa imenima AV programa + ona tabela u kojoj je ime, datum, velicina i MD5 fajla. Iz ovoga bih izvestaj pravio kroz JOIN po MD5 + filter.

ili da u bazi imam samo jednu tabelu, onakvu kako sam gore napisao da mi treba za izvestaj?

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Suma sumarum; pitao si, rekao sam.
Onako kako sam ti rekao da treba, neces imati ne predvidjenih stvari

Ko je trenutno na forumu
 

Ukupno su 1140 korisnika na forumu :: 52 registrovanih, 6 sakrivenih i 1082 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Acivi, Alibaba1981, Andrija357, babaroga, bato, Bluper, Bobrock1, Bokiboks, BORUTUS, cavatina, comi_pfc, darcaud, debeli, deimos25, djboj, Djokkinen, DonRumataEstorski, Dorcolac, DrugiREI, dule10savic, Gargantua, Georgius, Gosha101980, ikan, Kibice, Klecaviks, kobaja77, kokodakalo, Komentator, Kubovac, Lieutenant, mgolub, mile23, milenko crazy north, Oscar, Parker, Rakenica, RJ, S2M, slonic_tonic, SR-3m, Srki94, Srle993, stagezin, Stoilkovic, suton, uruk, vathra, Vladko, wizzardone, wolverined4, YugoSlav