Er du klar til at begynde at oprette databaser og tabeller med det strukturerede forespørgselssprog? I denne artikel undersøger vi processen med at oprette tabeller manuelt med kommandoen CREATE DATABASE og CREATE TABLE. Hvis du er ny til SQL, kan du måske først gennemgå nogle SQL-basics.
Virksomhedskrav
Før vi sætter os på tastaturet, skal vi sikre, at vi har en solid forståelse af kundens krav. Hvad er den bedste måde at opnå denne indsigt på? Taler til kunden selvfølgelig! Efter at have sat sig sammen med XYZ's Human Resources Director, har vi lært, at de er et widget salgsfirma og primært er interesseret i at spore oplysninger om deres salgspersonale.
XYZ Corporation opdeler deres salgsstyrke i østlige og vestlige regioner, som hver er opdelt i mange områder, der er omfattet af individuelle salgsrepræsentanter. HR-afdelingen vil gerne spore det område, som hver medarbejder dækker, samt hver medarbejders lønoplysninger og tilsynsstruktur. For at opfylde disse krav har vi designet en database bestående af tre tabeller vist i Entity-Relationship diagrammet på denne side.
Valg af en databaseplatform
Vi har besluttet at bruge et databasebehandlingssystem (eller DBMS), der er bygget på det strukturerede forespørgselssprog (SQL). Derfor skal alle vores database- og tabellen oprettelseskommandoer skrives med standard ANSI SQL i tankerne.
Som en ekstra fordel vil anvendelse af ANSI-kompatibel SQL sikre, at disse kommandoer vil fungere på ethvert DBMS, der understøtter SQL-standarden, herunder Oracle og Microsoft SQL Server. Hvis du ikke har valgt en platform til din database, går Database Software Options dig igennem udvælgelsesprocessen.
Oprettelse af databasen
Vores første skridt er at oprette databasen selv. Mange databasehåndteringssystemer tilbyder en række muligheder for at tilpasse databaseparametre på dette trin, men vores database tillader kun den enkle oprettelse af en database. Som med alle vores kommandoer, kan du ønske at konsultere dokumentationen til dit DBMS for at afgøre, om nogen avancerede parametre, der understøttes af dit specifikke system, opfylder dine behov. Lad os bruge kommandoen CREATE DATABASE til at oprette vores database:
CREATE DATABASE personale
Vær særlig opmærksom på den kapitalisering, der anvendes i eksemplet ovenfor. Det er almindelig praksis blandt SQL-programmører at bruge alle store bogstaver til SQL-søgeord som "CREATE" og "DATABASE", mens du bruger alle små bogstaver til brugerdefinerede navne som "personal" -databasenavnet. Disse konventioner giver mulighed for nem læsbarhed. Nu hvor vi har designet og skabt vores database, er vi klar til at begynde at oprette de tre tabeller, der bruges til at gemme XYZ Corporation's personaldata. Vores første tabel består af personoplysninger for hver medarbejder i vores firma. Vi skal inkludere hver medarbejders navn, løn, ID og leder. Det er en god designpraksis at adskille de sidste og fornavne i separate felter for at forenkle datasøgning og sortering i fremtiden. Vi holder også styr på hver medarbejders manager ved at indsætte en henvisning til lederens medarbejder-id i hver medarbejderpost. Lad os først se på det ønskede medarbejderbord. ReportsTo attributen lagrer manager ID for hver medarbejder. Fra de viste eksempler er det muligt at bestemme, at Sue Scampi er leder af både Tom Kendall og John Smith. Der er dog ingen oplysninger i databasen på Sue's manager, som angivet ved NULL-posten i sin række. Nu kan vi bruge SQL til at oprette tabellen i vores personaledatabase. Før vi gør det, lad os sikre os, at vi er i den korrekte database ved at udstede en USE-kommando: USE personale;
Alternativt kan "DATABASE personale" kommandoen ville udføre den samme funktion. Nu kan vi se på den SQL-kommando, der bruges til at oprette vores medarbejderbord: CREATE TABLE medarbejdere (employeeid INTEGER IKKE NULL, efternavn VARCHAR (25) IKKE NULL, fornavn VARCHAR (25) IKKE NULL, reportto INTEGER NULL);
Som med ovenstående eksempel bemærk at programmeringskonventionen dikterer, at vi bruger alle store bogstaver til SQL-søgeord og små bogstaver til brugernavngivne kolonner og tabeller. Kommandoen ovenfor kan virke forvirrende i starten, men der er faktisk en simpel struktur bag den. Her er en generaliseret visning, der kan rydde tingene lidt op: CREATE TABLE table_name (attribut_name datatype indstillinger, …, attribut_name datatype indstillinger); I det foregående eksempel er tabelnavnet medarbejdere, og vi omfatter fire attributter: medarbejderid, efternavn, fornavn og reporto. Datatypen angiver den type information, vi ønsker at gemme i hvert felt. Medarbejder-id er et simpelt heltal, så vi bruger INTEGER datatypen til både medarbejderfeltet og feltet Reportto. Medarbejdernavne er tegnstrenge af variabel længde, og vi forventer ikke, at en medarbejder har et for- eller efternavn længere end 25 tegn. Derfor bruger vi VARCHAR-typen (25) til disse felter. Vi kan også angive enten NULL eller NOT NULL i valgfeltet i CREATE-sætningen. Dette fortæller blot databasen, om NULL (eller tomme) værdier er tilladt for den attribut, når der tilføjes rækker til databasen. I vores eksempel kræver HR-afdelingen, at en medarbejder-id og et komplet navn skal opbevares for hver medarbejder. Men hver medarbejder har ikke en leder (den administrerende direktør rapporterer til ingen!), Så vi tillader NULL-poster på dette område.Bemærk at NULL er standardværdien, og udeladelse af denne indstilling tillader implicit NULL-værdier for en attribut. Lad os nu se på bordet territorier. Fra et hurtigt kig på disse data ser det ud til, at vi skal opbevare et helt tal og to variable længde strenge. Som med vores tidligere eksempel, forventer vi ikke, at region-id'et forbruges mere end 25 tegn. Nogle af vores territorier har dog længere navne, så vi udvider den tilladte længde af attributten til 40 tegn. Lad os se på den tilsvarende SQL: CREATE TABLE områder (territoryid INTEGER IKKE NULL, område Beskrivelse VARCHAR (40) IKKE NULL, regionid VARCHAR (25) IKKE NULL);
Endelig bruger vi EmployeeTerritories-tabellen til at gemme relationerne mellem medarbejdere og territorier. Detaljerede oplysninger om hver medarbejder og område er gemt i vores tidligere to tabeller. Derfor behøver vi kun at gemme de to integeridentifikationsnumre i denne tabel. Hvis vi skal udvide disse oplysninger, kan vi bruge et JOIN i vores kommandoer til valg af data til at hente oplysninger fra flere tabeller. Denne metode til lagring af data reducerer redundans i vores database og sikrer optimal udnyttelse af plads på vores lagringsdrev. Vi dækker JOIN-kommandoen dybtgående i en fremtidig vejledning. Her er SQL-koden til at gennemføre vores finalebord: CREATE TABLE employeeterritories (employeeid INTEGER IKKE NULL, territoryid INTEGER IKKE NULL); Hvis du er særlig sparsom i dag, har du måske bemærket, at vi ved et uheld udeladte et af designkravene, når vi gennemførte vores databasetabeller. XYZ Corporation's HR-direktør anmodede om, at databasen sporer medarbejderlønoplysninger og vi forsømte at sørge for dette i de databasetabeller, vi oprettede. Men alt er ikke tabt. Vi kan bruge kommandoen ALTER TABLE for at tilføje denne attribut til vores eksisterende database. Vi ønsker at opbevare lønnen som et heltal. Syntaxen svarer meget til kommandoen CREATE TABLE, her er det: ALTER TABLE medarbejdere ADD løn INTEGER NULL;
Bemærk, at vi har angivet, at NULL-værdier er tilladt for denne attribut. I de fleste tilfælde er der ingen mulighed, når du tilføjer en kolonne til en eksisterende tabel. Dette skyldes, at tabellen allerede indeholder rækker uden post for denne attribut. Derfor indsætter DBMS automatisk en NULL-værdi for at fylde tomrummet. Oprettelse af vores første tabel
Attributter og datatyper
NULL værdier
Opbygning af de resterende tabeller
Mekanismen SQL giver mulighed for at ændre strukturen i en database efter oprettelsen