16. maj 2003 - 12:42Der er
39 kommentarer og 1 løsning
MSQL: er der nogen der kan hjælpe med brugen af idx VS nøgler
jeg er ved at oprette en db men mangler en forståelse for brugen af idx. Jeg har en rimelig forståelse for databaser generalt men da jeg fandt ud af at msql havde fjernet primærnøgler og erstattet dem med idx blev jeg forviret. Hvis jeg kigger i manualen står der en rimmelig beskrivelse af idx som primærnøgle men intet om fremmednøgler. Mit spørgsmål er: jeg har en tabel1 hvor jeg har oprette et idx1 på et felt i tabelen,dette felts indhold,skal overføres til min tabel2 som "fremmednøgle".kan man det og eller er det måden at gøre det på? Det ville være en stor hjælp hvis der var en det kunne forklare mig brugen af idx VS nøgler evt. et eksempel på en simpel sammensætning af minimum to tabeller. evt. en god hjemmeside med tips og trix //ikke hughes egen side
Grundliggende gar nøgler og index ikke meget med hinanden at gøre.
En primær-nøgle er et felt (eller flere felter) som giver en unik identifikation af en række.
En fremmed-nøgle er et felt (eller flere felter) som peger på en række i en anden tabel (via dens primær-nøgle).
Det har noget med data at gøre og hvordan man kan join etabeller.
Index har noget at gøre med performance.
Hvis database serveren skal finde en værdi i et felt som ikke er indekseret er den nødt til at løbe samtlige rækker igennem.
Et index er en lille data struktur der gør at database serveren kan slå værdier op uden at løbe alle rækker igennem.
Ligesom i en database bog hvor der bagerst kan være et index som siger "3. normal form - side 127", så man slipper for at læse 400 sider for at finde 3. normal form.
Der bliver normalt (altid ?) lavet et index for en primær-nøgle.
Det er næsten altid en god ide at lave et index på fremmed-nøgler, fordi de værdier skal ofte slåe sop i.f.m. JOIN.
Det er også en god ide at have index på felter som man søger meget i.
Og husk at index gør søgning mange gange hurtigere men koster en lilel smule i insert (og i database plads).
vil det sige at jeg f.eks laver en tabel bruger med et idx1 og en tabel data med idx2.? ideen jeg ville frem til var noget i stil med: bruger tabel( idx1 int //primær fornavn char[30] efternavn char[30])
data tabel( idx1 int //fremmed idx2 int //primær datating char [50])
er det måden at joine disse tabeller eller????? PLEASE jeg kunne virkelig godt bruge et eksempel evt. ved hjælp af ovenstående tabeller.
ahhhhhhhh nu begynder det at give mening. og ja du har evigt ret med hensyn til datatyperne//fandt bare hurtigt på noget for at komme igang. et lille bi spørgsmål. når brugerID er fremmednøgle i datatabellen vil den indsatte værdien fra brugerID i brugertabellen automatisk blive overført som værdi?????
Når du joiner med bruger.brugerID=data.brugerID så kobler du bare de rækker der hører sammen i en forespørgsel - du indsætter ikke noget.
Hvis du er klærer data.brugerID til at være en fremmed nøgle som peger på bruger brugerID, så vil databasen forhindre dig i at indsætte brugerID i data tabellen som ikke er i bruger tabellen.
/*RESPECT der skulle være flere som dig*/ ok jeg er også blevet lidt forvirret, fordi jeg bruger msql og i denne såkalte database har de erstattet brugen af primærnøgler med idx og i manuallen skriver de lidt om brugen af disse men intet om "fremmed idx" giver det mening?
dataID - int - wannabe primær nøgle - data_idx brugerID - int - fremmed nøgle -?????????????????? datating - varchar(50)
CREATE UNIQUE INDEX bruger_idx ON bruger (brugerID) CREATE UNIQUE INDEX data_idx ON bruger (dataID)
skal jeg evt. droppe "fremmed_idx" og joine de to primær_idx....er det måden.? det skulle gerne munde ud i at hver bruger skal kunne havde et vilkårligt antal rækker i datatabelen.
hvis jeg igen nøgler har og ikke "skal" bruge idx hva så. jeg fatter igen ting.........hvordan kan jeg få to tabeler til at hænge sammen uden brug af noget?
SELECT * FROM bruger,data WHERE bruger.brugerID=data.brugerID;
virker uanset om der er nøgler eller index.
Så forespørgsler er ikke et problem.
Ved indsæt skal du holde tungen lig i munden fordi databasen ikke sikrer din referentielle integritet. Men det må du bare slev sørge for så i din applikation.
hej Arne =) dine eksempler gav mig god inspiration, er det sådan at du også lige har et eksempel på hvordan man indsætter (se kl.21:29:41) jeg er ikke så god til at holde tungen lige i munden. det jeg har problemmer med er at få brugerID ind i data.
der se ud til at virke men aligevel ikke. Hvis jeg køre en strace på mit api, kan jeg se at jeg for en forkert størrelse af 'emne', jeg har prøvet at gøre mit felt i databesen unødvendigt stort men for stadig fejlen. Hvis problemmet bliver løst, gå til spørgsmål 354605 der ligger 100 point.
1) Er emne blevet erklæret CHAR(n) istedetfor VARCHAR(n) ?
2) Indeholder emne noget suspekt ?
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.