Er du klar til at begynde at oprette databaser og tabeller med Struktureret forespørgselssprog? I denne artikel udforsker vi processen med at oprette tabeller manuelt med kommandoerne CREATE DATABASE og CREATE TABLE. Hvis du er ny i SQL, kan du muligvis gennemgå nogle Grundlæggende om SQL først.
Forretningskrav
Før vi sætter os ned ved tastaturet, skal vi sikre os, at vi har en solid forståelse af kundens krav. Hvad er den bedste måde at få denne indsigt på? At tale med kunden, selvfølgelig! Efter at have siddet med XYZs Human Resources Director har vi lært, at de er et widget-salgsselskab og primært er interesseret i at spore information om deres salgspersonale.
XYZ Corporation opdeler sin salgsstyrke i østlige og vestlige regioner, som hver især er opdelt i mange områder, der er dækket af individuelle salgsrepræsentanter. HR-afdelingen vil gerne spore det område, der er omfattet af hver medarbejder, samt hver medarbejders lønoplysninger og tilsynsstruktur. For at imødekomme disse krav har vi designet en database bestående af tre tabeller vist i
Enheds-forhold diagram på denne side.Valg af en databaseplatform
Vi har besluttet at bruge en database management system (eller DBMS) der er bygget på Structured Query Language (SQL). Derfor skal alle vores kommandoer til database- og tabeloprettelse skrives med standard ANSI SQL i tankerne.
Som en ekstra fordel vil brug af ANSI-kompatibel SQL sikre, at disse kommandoer fungerer på ethvert DBMS, der understøtter SQL-standarden, inklusive Oracle og Microsoft SQL Server. Hvis du endnu ikke har valgt en platform til din database, fører Database Software Options dig gennem udvælgelsesprocessen.
Oprettelse af databasen
Vores første skridt er at oprette selve databasen. Mange databasestyringssystemer 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 vil du muligvis konsultere dokumentationen til dit DBMS for at afgøre, om avancerede parametre, der understøttes af dit specifikke system, opfylder dine behov. Lad os bruge kommandoen CREATE DATABASE til at opsætte vores database:
OPRET DATABASE-personale
Vær særlig opmærksom på brugen af store og små bogstaver i eksemplet ovenfor. Det er almindelig praksis blandt SQL-programmører at bruge alle store bogstaver til SQL-nøgleord såsom "CREATE" og "DATABASE", mens du bruger alle små bogstaver til brugerdefinerede navne som "personale" -databasen navn. Disse konventioner giver nem læsbarhed.
Nu hvor vi har designet og oprettet vores database, er vi klar til at begynde at oprette de tre tabeller, der bruges til at gemme XYZ Corporations personaledata.
Oprettelse af vores første bord
Vores første tabel består af personlige data for hver medarbejder i vores virksomhed. Vi skal medtage hver medarbejders navn, løn, id og leder. Det er god designpraksis at adskille efter- og fornavne i separate felter for at forenkle datasøgning og sortering i fremtiden. Vi holder også styr på hver medarbejders leder ved at indsætte en henvisning til lederens medarbejder-id i hver medarbejderjournal. Lad os først se på det ønskede medarbejderbord.
Attributten ReportsTo gemmer manager-id'et for hver medarbejder. Fra de viste eksempler kan vi fastslå, at Sue Scampi er manager for både Tom Kendall og John Smith. Der er dog ingen oplysninger i databasen om Sue's manager som angivet af NULL-posten i hendes 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 "DATABASE-personale;" kommando ville udføre den samme funktion. Nu kan vi se på den SQL-kommando, der bruges til at oprette vores medarbejderes tabel:
OPRET TABEL medarbejdere
(medarbejder INTEGER IKKE NULL,
efternavn VARCHAR (25) IKKE NULL,
fornavn VARCHAR (25) IKKE NULL,
rapporter til INTEGER NULL);
Som med ovenstående eksempel skal du bemærke, at programmeringskonventionen dikterer, at vi bruger alle store bogstaver til SQL-nøgleord og små bogstaver til brugernavnede kolonner og tabeller. Kommandoen ovenfor kan virke forvirrende i starten, men der er faktisk en simpel struktur bag den. Her er en generel visning, der måske rydder op i tingene:
Opret TABEL tabelnavn
(attribut_name datatypeindstillinger,
...,
attribut_name datatypeindstillinger);
Attributter og datatyper
I det foregående eksempel er tabelnavnet medarbejdere, og vi inkluderer fire egenskaber: medarbejder-id, efternavn, fornavn og rapport til. Datatypen angiver den type information, vi ønsker at gemme i hvert felt. Medarbejder-id'et er et simpelt heltal, så vi bruger INTEGER-datatypen til både medarbejder-id-feltet og rapporten til-feltet. Medarbejdernavne vil være tegnstrenge med variabel længde, og vi forventer ikke, at nogen medarbejdere har et for- eller efternavn, der er længere end 25 tegn. Derfor bruger vi typen VARCHAR (25) til disse felter.
NULL-værdier
Vi kan også angive enten NULL eller IKKE NULL i valgfeltet i CREATE-sætningen. Dette fortæller simpelthen 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 der lagres et medarbejder-id og komplet navn for hver medarbejder. Imidlertid har ikke alle medarbejdere en leder (administrerende direktør rapporterer til ingen!), Så vi tillader NULL-poster i dette felt. Bemærk, at NULL er standardværdien, og at udelade denne indstilling tillader implicit NULL-værdier for en attribut.
Opbygning af de resterende borde
Lad os nu se på territorietabellen. Fra et hurtigt kig på disse data ser det ud til, at vi skal gemme et heltal og to strenge med variabel længde. Som med vores tidligere eksempel forventer vi ikke, at region-id'et bruger mere end 25 tegn. Nogle af vores territorier har dog længere navne, så vi udvider den tilladte længde af denne attribut til 40 tegn.
Lad os se på den tilsvarende SQL:
Opret TABEL-områder
(territoriumid INTEGER IKKE NULL,
område Beskrivelse VARCHAR (40) IKKE NULL,
regionid VARCHAR (25) IKKE NULL);
Endelig bruger vi tabellen EmployeeTerritories til at gemme forholdet mellem medarbejdere og territorier. Detaljerede oplysninger om hver medarbejder og område er gemt i vores to foregående tabeller. Derfor behøver vi kun at gemme de to heltal identifikationsnumre i denne tabel. Hvis vi har brug for at udvide disse oplysninger, kan vi bruge en JOIN i vores dataudvælgelseskommandoer til at få information fra flere tabeller.
Denne metode til lagring af data reducerer redundansen i vores database og sikrer optimal udnyttelse af pladsen på vores lagerdrev. Vi dækker JOIN-kommandoen i dybden i en fremtidig tutorial. Her er SQL-koden til implementering af vores endelige tabel:
Opret TABEL medarbejderstuer
(medarbejder INTEGER IKKE NULL,
territoriumid INTEGER IKKE NULL);
Mekanismen SQL giver mulighed for at ændre strukturen i en database efter oprettelsen
Hvis du er særlig klog i dag, har du måske bemærket, at vi "ved et uheld" udelod et af designkravene, når vi implementerede vores databasetabeller. XYZ Corporations HR-direktør anmodede om, at databasen spore medarbejderlønningsoplysninger, og vi forsømte at give dette i de databasetabeller, vi oprettede.
Imidlertid er alt ikke tabt. Vi kan bruge ALTER TABLE-kommandoen til at føje denne attribut til vores eksisterende database. Vi ønsker at gemme lønnen som et heltal. Syntaksen svarer meget til kommandoen CREATE TABLE, her er den:
ALTER TABLE medarbejdere
TILFØJ løn INTEGER NULL;
Bemærk, at vi specificerede, 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 indtastning til denne attribut. Derfor indsætter DBMS automatisk en NULL-værdi for at udfylde tomrummet.