01. december 2004 - 10:44Der er
8 kommentarer og 1 løsning
Find ledigt nr.
Jeg har en database med en nummerisk primær nøgle der IKKE bare er fortløbende, det skyldes at de enkelte poster bl.a. grupperes på de to første cifre i nummeret. Når man så i en formular skal tilføje en post, så vælger man først hvilken gruppe, altså hvilke to start-cifre der skal bruges - dernæst skal systemet helst selv komme med et bud på hvad den endelige primære nøgle skal være, den skal altså finde et ledigt nummer inden for gruppen. Vælger man således f.eks. gruppe 17, så skulle den gerne foreslå 170005, hvis numrene 170001 - 170004 er indtil nu er registreret. Den skal også helst forslå numre som er "huller". Altså hvis vi bruger eksemplet fra før, så skal den stadigvæk foreslå nummer 170005 hvis 170006 er registreret...
Er det muligt? og kan man få nogle bud på hvordan man kunne gribe det an?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Løsningen med at prøve sig frem er ikke god. Givet "17", så laver vi en select med "170001", og så "170002" osv. indtil der er et hul. Tænk på hvor lang tid det vil tage hvis der er 500 eller 5000 fortløbende numre.
Du kan nemmest droppe tanken om at fylde huller ud. Så kan du have en tabel ved siden af hvor der står "17","500" hvis "500" er det maksimale nummer. Bruger du "501", opdateres denne tabel til "17","501" - dette vil tage lige lang tid uanset hvor store numrene er.
Er det reelt et krav om at huller skal fyldes ud, kan du lave en tabel ved siden af, hvor de ledige numre står, og også een hvor maksimum står. Her vil du ved passende indexering kunne finde hullerne tilstrækkeligt hurtigt.
I mine to forslag skal du opdatere de ekstra tabeller ved ændringer i din normale tabel. Og husk at pakke det ind i transaktioner, hvis du har flere brugere på databasen.
Jeg har netop ikke endeligt gang i noget endnu, netop fordi jeg ikke kunne se andet end problemerne i det :-) Problemet er at vi har et meget stort behov for at kunne fylde hullerne ud, da der er numre fra f.eks. 170001 og op til 179899 ca. og alligevel dækker det kun over ca. 500 poster...så hvis vi bare starter fra max, så tømmer vi lynhurtigt gruppen for mulige numre...
Hvis du ved der er ca. 500 ud af 10.000 så kan du tage chanchen ;)
Vælg et tilfældigt tal mellem 0 og 9999 og søg derfra med select sætninger. Så rammer du sandsynligvis ikke en stor blok, og du vil heller ikke efterlade en stor blok. Det går nok - afhængigt af andre krav, naturligvis ;)
Hmm...svarer lige selv også :-) hvad nu hvis man starter med at lave en søgning der laver en tabel med 500 frie numre i hver gruppe og så bare bruger løs af dem...det var jo en mulighed...så har man en tabel med frie numre, hvor man sletter et nummer når man har brugt det...så er vi ude i at den enkelte bruger kun skal lave én forespørgsel...
Det er også en mulighed - man skal netop overveje om man har brug for andre oplysninger (andre tabeller), end hvad man lige står med. De skal selvfølgelig vedligeholdes.
Det er så ganske fair :-) Jeg takker endnu engang for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.