27. januar 2004 - 19:28Der er
11 kommentarer og 1 løsning
Kan man bruge en sql database til at søge efter dokumenter i?
Jeg har nogenlunde styr på alm. databaser. data indsættelse i selve databasen men ville gerne vide om man kan oprette en database for søgning af dokumenter? hvodan den laves og hvodan man via databasen åbner dokumentet
what programming langauge are you using? Normally you would place a document on a file server and only store the file name and path to the document in the datbase. Its then much easier to open the document in the associated program. This is very easy in Visuasl Basic using the ShellExecute API!
Du skal lagre dine dokumenter i blob-felter i databasen. Et blob felt er et "Binary Large OBject" - f.eks. TEXT eller IMAGE. Det er den sidste datatype du skal anvende.
Dit klientprogram skal så blot lagre dokumentet som en række bytes via en "normal" INSERT, gemme dokumentændringer via en UPDATE og naturligvis trække dokumentet ud via en SELECT. Altså helt almindelige SQL operationer.
Typisk vil du nok vælge, at klientprogrammet opretter en temporær fil udfra de læste binære data og så kalder ShellExecute() på filen. Evt. kan du vælge at åbne fx Word som et COM objekt og have redigeringensfaciliteterne direkte i dit eget program.
Du er nød til at have alle informationer du ønsker søgbare i normale tekst felter (varchar) - binære data er ikke forståelige med SQL syntaks.
Hvor titel, author, created, updated er rimelig oplagt, filetype er så fx DOC, PDF, WPD, etc - man skal jo have information om hvad type program der skal bruges til selve fortolkningen. Summary er en kort tekst der summer dokumentindholdet op - og document_data er det binære dokument image.
Har du behov for auditlog etc på data ændringerne? Så er der nemlig nogle småting der skal tilføjes...
You can still search after documentes if you keep the actual file in a folder. Same table layout as trer gives but instead of document_data image you have document_pathFileName and then you wouldnt need filetype
Løsningen på din forespørgsel er ganske simpel. Du bruger MS Indexing service sammen med SQL-server til at søge efter dokumenter på din filserver fx.! Det er ganske let at sætte op, kræver få ressourcer og det performer ganske hurtigt! Fordelen er jo at du principielt kan lave en freetext search i et af dig foruddefineret catalog indeholdende de dokumenter du har "vinget" af skal indgå i cataloget!!!
Hvis det har interesse kan jeg hjælpe yderligere med selve den tekniske opsætning via dette fabelagtige site ;-)
Terrys forslag minsker belastningen på serveren og giver dermed mindre overhead end ved at embedde dokumentet i sql serveren. Det er også den løsning der benyttes i mange dokumentstyringsprogrammer - fx OpenDocs og Documentum.
Eneste problem ved løsningen er, at du ikke i nuværende versioner kan synkronisere online backup af filer med backup af databasen. Dermed bliver restore noget snavs at komme ud i. En nem løsning er naturligvis at man lukker databasen og tager en offline backup af det hele.
Mht sammenhæng mellem dokument og database - samt i forbindelse med audittrail, hvis det har interesse: Løsningen er, at du i din applikation laver en MD5 hash af dokumentet. Den værdi gemmer du i databasen (fylder 32 tegn).
Nu kan du ret nemt kontrollere om et dokument er blevet ændret udenfor dit system og om det er den rigtige dokumentversion efter en restore.
Tilsvarende er det MD5 hashen du skal bruge i et evt. audittrail (du har nemlig ikke lyst til at håndtere blob-felter i et audittrail :-)
Et minus "mere" ved at have dokumenter udenfor databasen er, at dokumentet er nemmere at redigere udenom systemet - det er jo trods alt blot en fil på en filserver. Embedder man dokumentet i et blobfelt, så er det kun via applikationen man kan få adgang til dokumentet (omend man aldrig kan beskytte sig rigtigt mod en administrator).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.