Er du klar til å begynne å lage databaser og tabeller med Structured Query Language? I denne artikkelen undersøker vi prosessen med å lage tabeller manuelt med kommandoen CREATE DATABASE og CREATE TABLE. Hvis du er ny i SQL, kan du kanskje vurdere noen SQL-grunnleggende først.
Virksomhetskrav
Før vi setter oss på tastaturet, må vi sikre at vi har en solid forståelse av kundens krav. Hva er den beste måten å få dette innsiktet på? Snakker med kunden selvfølgelig! Etter å ha blitt sittende hos XYZs Human Resources Director, har vi lært at de er et widget-salgsselskap og er primært interessert i å spore informasjon om deres salgspersonell.
XYZ Corporation deler sin salgsstyrke i østlige og vestlige regioner, som hver er delt inn i mange territorier dekket av enkelte salgsrepresentanter. HR-avdelingen ønsker å spore territoriet dekket av hver ansatt, samt hver ansattes lønninformasjon og tilsynsstruktur. For å oppfylle disse kravene har vi laget en database bestående av tre tabeller, vist i Entity-Relationship-diagrammet på denne siden.
Velge en databaseplatform
Vi har bestemt oss for å bruke et databasebehandlingssystem (eller DBMS) som er bygget på Strukturert Query Language (SQL). Derfor bør alle våre database- og tabellkommandokommandoer skrives med standard ANSI SQL i tankene.
Som en ekstra fordel, vil bruk av ANSI-kompatibel SQL sikre at disse kommandoene vil fungere på alle DBMS som støtter SQL-standarden, inkludert Oracle og Microsoft SQL Server. Hvis du ikke har valgt en plattform for databasen din, går Database Software Options deg gjennom valgprosessen.
Opprette databasen
Vårt første skritt er å lage selve databasen. Mange databasehåndteringssystemer tilbyr en rekke alternativer for å tilpasse databaseparametere på dette trinnet, men vår database tillater bare den enkle opprettelsen av en database. Som med alle våre kommandoer, kan det være lurt å konsultere dokumentasjonen for DBMS for å avgjøre om noen avanserte parametere som støttes av ditt spesifikke system, oppfyller dine behov. La oss bruke kommandoen CREATE DATABASE til å sette opp vår database:
CREATE DATABASE personell
Vær spesielt oppmerksom på kapitaliseringen som brukes i eksemplet ovenfor. Det er vanlig praksis blant SQL-programmerere å bruke alle store bokstaver for SQL-søkeord som "CREATE" og "DATABASE" mens du bruker alle små bokstaver for brukerdefinerte navn som "personell" -databasenavnet. Disse konvensjonene sørger for enkel lesbarhet. Nå som vi har designet og opprettet vår database, er vi klare til å begynne å lage de tre tabellene som brukes til å lagre XYZ Corporations personaldata. Vårt første bord består av personopplysninger for hver ansatt i vårt firma. Vi må inkludere hver ansattes navn, lønn, ID og leder. Det er god designpraksis å skille sist og første navn i separate felt for å forenkle datasøk og sortering i fremtiden. Vi holder også oversikt over hver ansattes leder ved å legge inn en referanse til lederens ansattes ID i hver ansattspost. La oss først ta en titt på ønsket arbeidstabell. RapporteneTil attributtet lagrer manageren ID for hver ansatt. Fra utvalgte eksemplarer, kan vi avgjøre at Sue Scampi er leder av både Tom Kendall og John Smith. Det er imidlertid ingen informasjon i databasen på Sue's manager, som angitt av NULL-oppføringen i hennes rad. Nå kan vi bruke SQL til å lage bordet i vår personaldatabase. Før vi gjør det, la oss sikre at vi er i riktig database ved å utstede en USE-kommando: Bruk personell;
Alternativt, "DATABASE personell;" kommandoen ville utføre den samme funksjonen. Nå kan vi se på SQL-kommandoen som brukes til å lage vårt medarbeiderbord: CREATE TABLE ansatte (employeeid INTEGER IKKE NULL, etternavn VARCHAR (25) IKKE NULL, fornavn VARCHAR (25) IKKE NULL, reportto INTEGER NULL);
Som med eksemplet ovenfor, merk at programmeringskonvensjonen dikterer at vi bruker alle store bokstaver for SQL-søkeord og små bokstaver for brukernavngitte kolonner og tabeller. Kommandoen ovenfor kan virke forvirrende først, men det er faktisk en enkel struktur bak den. Her er en generalisert visning som kan fjerne ting litt: CREATE TABLE table_name (attributtnavn navn datatype alternativer, …, attributtetavn datatypealternativer); I forrige eksempel er tabellnavnet ansatte og vi inkluderer fire attributter: ansatt, etternavn, fornavn og reporto. Datatypen angir hvilken type informasjon vi ønsker å lagre i hvert felt. Medarbeids-IDen er et enkelt heltallnummer, så vi bruker INTEGER datatypen for både employeeid-feltet og feltet Reportsto. Medarbeidsnavnene vil være tegnstrenge av variabel lengde, og vi forventer ikke at noen medarbeider har et fornavn eller etternavn som er lengre enn 25 tegn. Derfor bruker vi VARCHAR-typen (25) for disse feltene. Vi kan også angi enten NULL eller NOT NULL i alternativfeltet i CREATE-setningen. Dette forteller bare databasen om NULL (eller tomme) verdier er tillatt for det attributtet når du legger til rader i databasen. I vårt eksempel krever HR-avdelingen at en ansatt-ID og et fullstendig navn skal lagres for hver ansatt. Men ikke alle ansatte har en leder (administrerende direktør rapporterer til ingen!), Slik at vi tillater NULL-oppføringer i det feltet.Vær oppmerksom på at NULL er standardverdien, og unnlatelse av dette alternativet vil implisitt tillate NULL-verdier for et attributt. La oss nå ta en titt på territoriet tabellen. Fra en rask titt på disse dataene ser det ut til at vi trenger å lagre et heltall og to variabellengder. Som med vårt forrige eksempel, forventer vi ikke at region-ID forbruker mer enn 25 tegn. Noen av våre territorier har imidlertid lengre navn, så vi vil utvide den tillatte lengden på det attributtet til 40 tegn. La oss se på den tilsvarende SQL: CREATE TABLE territorier (territoryid INTEGER IKKE NULL, territorium Beskrivelse VARCHAR (40) IKKE NULL, regionid VARCHAR (25) IKKE NULL);
Til slutt bruker vi EmployeeTerritories-tabellen for å lagre forholdet mellom ansatte og territorier. Detaljert informasjon om hver ansatt og territorium er lagret i de to foregående tabellene. Derfor trenger vi bare å lagre de to integeridentifikasjonsnumrene i denne tabellen. Hvis vi trenger å utvide denne informasjonen, kan vi bruke et JOIN i våre kommandoer for datavalg for å få informasjon fra flere tabeller. Denne metoden for lagring av data reduserer redundans i databasen og sikrer optimal utnyttelse av plass på lagringsdiskene. Vi vil dekke JOIN-kommandoen i dybde i en fremtidig veiledning. Her er SQL-koden for å implementere vårt endelige bord: CREATE TABLE employeeterritories (employeeid INTEGER IKKE NULL, territoryid INTEGER IKKE NULL); Hvis du er spesielt sparsom i dag, har du kanskje lagt merke til at vi ved et uhell utelatt et av designkravene når vi implementerte databasetabellene våre. XYZ Corporations HR-direktør ba om at databasen spores ansattes lønnsinformasjon, og vi forsømte å sørge for dette i databasetabellene vi opprettet. Men alt er ikke tapt. Vi kan bruke kommandoen ALTER TABLE for å legge til dette attributtet til vår eksisterende database. Vi ønsker å lagre lønnen som et heltall. Syntaxen er ganske lik den i CREATE TABLE-kommandoen, her er det: ALTER TABLE ansatte ADD lønn INTEGER NULL;
Legg merke til at vi angav at NULL-verdier er tillatt for dette attributtet. I de fleste tilfeller er det ikke noe alternativ når du legger til en kolonne i et eksisterende bord. Dette skyldes at tabellen allerede inneholder rader uten oppføring for dette attributtet. Derfor legger DBMS automatisk inn en NULL-verdi for å fylle tomrummet. Opprette vår første tabell
Attributter og datatyper
NULL verdier
Bygg de resterende tabeller
Mekanismen SQL gir til å endre strukturen til en database etter opprettelsen