Viss databashantering applikationer hanterar hierarkisk information, såsom stater som består av länen som i sin tur innehåller städerna . Du kanske frestas att organisera denna information i separata tabeller i DBMS - en för varje nivå i hierarkin - men en mer elegant lösning använder en självrefererande bord , vilket är lättare att hantera och rymmer en större mängd data. Självrefererande tabell
vill skapa en självrefererande tabell , börjar du med två fält , ett ID-nummer och en förälder ID-nummer. Till dessa områden , kan du lägga till några andra lämpliga för tillämpningen , såsom namn , beskrivning , plats eller befolkning . För enkelhetens skull kan du ställa in ID-nummer till en autonumrering fälttyp så databasen automatiskt tal nya posterna i stigande ordning . De överordnade ID- referenser ID-numret för den överordnade posten i hierarkin , om posten inte har någon förälder , kan du ställa in det här fältet till noll . Till exempel har rekordet för Kalifornien en ID av en och en förälder ID noll . Rekordet för San Francisco County har ett ID på två och en förälder ID av en. Varje barn post i tabellen referenser överordnade poster i samma tabell , . Tabellen är självrefererande
Konsolidering
En effekt av självrefererande tabeller är en konsolidering av flera tabeller i en enda tabell . Med färre tabeller förenklar databasen och underlättar dess underhåll . Moderna databassystem rymma lätt miljontals poster per tabell , så att hålla alla en hierarki s dataelement i en enda tabell är inte ett problem . Genom att ställa in ID- fältet till en primärnyckel och den förälder ID till ett index , kan du enkelt hitta alla poster längs någon gren av hierarkin .
Flexibilitet
en databas som har en tabell för varje nivå i en hierarki fungerar bra tills en ny nivå visas , eftersom du måste då lägga till ett nytt bord för att rymma förändringen och ändra alla program som använder databasen . Däremot rymmer en självrefererande tabell valfritt antal hierarkiska nivåer . Den överordnade ID- fältet pekar alltid till nästa nivå upp i hierarkin , så de register bildar en enhetlig kedja . Antalet nivåer i hierarkin kan vara samma för alla överordnade poster eller det kan variera , den självrefererande tabell hanterar båda fallen
Kaskad Radera
När . en självrefererande tabell innehåller många dataposter , kanske du undrar vad du ska göra när du tar bort en överordnad post . Såvida du också bort alla underordnade poster , riskerar du att skapa " föräldralösa ", eller poster med ogiltiga förälder ID . Lyckligtvis finns en mekanism för att hantera denna situation automatiskt. När du skapar fältet överordnade ID , kan du ange att den har en främmande nyckel fält , och använda ID- fältet som tabellens huvudnyckeln . När du har gjort detta kan du lägga till tvång , " ON DELETE CASCADE " till fältet . Med tvång och utländska viktiga inställningar på plats , kommer databasen att radera alla tillhörande underordnade poster när du raderar en överordnad post .