Web-apps kunnen worden opgesplitst in twee hoofdcomponenten: een front-end die informatie weergeeft en verzamelt, en een back-end voor het opslaan van de informatie. In dit artikel laat ik zien wat een relationele database is en hoe je je database op de juiste manier kunt ontwerpen om de informatie van je app op te slaan.
Een database slaat gegevens op een georganiseerde manier op zodat deze later kan worden doorzocht en opgehaald. Het moet een of meer tabellen bevatten. Een tabel lijkt veel op een spreadsheet, omdat deze bestaat uit rijen en kolommen. Alle rijen hebben dezelfde kolommen en elke kolom bevat de gegevens zelf. Als het helpt, denk dan aan uw tabellen op dezelfde manier als een tabel in Excel.
figuur 1
Gegevens kunnen worden ingevoegd, opgehaald, bijgewerkt en verwijderd uit een tabel. Het woord, aangemaakt, wordt over het algemeen gebruikt in plaats van ingevoegd, dus collectief worden deze vier functies liefdevol afgekort tot CRUD.
Een relationele database is een type database die gegevens in tabellen organiseert en koppelt, op basis van gedefinieerde relaties. Met deze relaties kunt u gegevens uit een of meer tabellen ophalen en combineren met een enkele query.
Maar dat waren maar een paar woorden. Om een relationele database echt te begrijpen, moet u er zelf een maken. Laten we beginnen door echte gegevens te verzamelen waarmee we kunnen werken.
In de geest van de Nettuts + Twitter-kloonartikelen (PHP, Ruby on Rails, Django), laten we wat Twitter-gegevens bekijken. Ik zocht Twitter naar "#databases" en nam het volgende voorbeeld van tien tweets:
tafel 1
voor-en achternaam | gebruikersnaam | tekst | gemaakt bij | following_username |
---|---|---|---|---|
"Boris Hadjur" | "_DreamLead" | "Wat vind je van #emailing #campaigns #traffic in #USA? Is het tegenwoordig een goede markt? Heb je #databases?" | "Tue, 12 Feb 2013 08:43:09 +0000" | "Scootmedia", "MetiersInternet" |
"Gunnar Svalander" | "GunnarSvalander" | "Bill Gates praat over databases, gratis software op Reddit http://t.co/ShX4hZlA #billgates #databases" | "Tue, 12 Feb 2013 07:31:06 +0000" | "klout", "zillow" |
"GE Software" | "GEsoftware" | "RT @KirkDBorne: Lezingen in #Databases: uitstekende leeslijst, vele categorieën: http://t.co/S6RBUNxq via @rxin Fascinerend." | "Tue, 12 Feb 2013 07:30:24 +0000" | "DayJobDoc", "byosko" |
"Adrian Burch" | "Adrianburch" | "RT @tisakovich: @NimbusData op de @Barclays Big Data-conferentie in San Francisco vandaag, met #virtualisatie, #databases en #flash-geheugen." | "Tue, 12 Feb 2013 06:58:22 +0000" | "CindyCrawford", "Arjantim" |
"Andy Ryder" | "AndyRyder5" | "http://t.co/D3KOJIvF artikel over Madden 2013 met AI om de super bowl #databases # bus311 te prodicteren" | "Tue, 12 Feb 2013 05:29:41 +0000" | "MichaelDell", "Yahoo" |
"Andy Ryder" | "AndyRyder5" | "http://t.co/rBhBXjma een artikel over privacy-instellingen en facebook #databases # bus311" | "Tue, 12 Feb 2013 05:24:17 +0000" | "MichaelDell", "Yahoo" |
"Brett Englebert" | "Brett_Englebert" | "# BUS311 NCFPD van de Universiteit van Minnesota maakt #databases om" voedselfraude "te voorkomen. Http://t.co/0LsAbKqJ" | "Tue, 12 Feb 2013 01:49:19 +0000" | "RealSkipBayless", "stephenasmith" |
Brett Englebert | "Brett_Englebert" | "# BUS311-bedrijven beschermen mogelijk hun productie #databases, maar hoe zit het met hun back-upbestanden? Http://t.co/okJjV3Bm" | "Tue, 12 Feb 2013 01:31:52 +0000" | "RealSkipBayless", "stephenasmith" |
"Nimbus Data Systems" | "NimbusData" | "@NimbusData CEO @tisakovich @BarclaysOnline Big Data-conferentie vandaag in San Francisco, met #virtualisatie, # databases, & #flash-geheugen" | "Maa, 11 feb 2013 23:15:05 +0000" | "dellock6", "rohitkilam" |
"SSWUG.ORG" | "SSWUGorg" | "Vergeet niet om je aan te melden voor onze GRATIS expo aanstaande vrijdag: #Databases, #BI en #Sharepoint: Wat je moet weten! Http://t.co/Ijrqrz29" | "Maa, 11 feb 2013 22:15:37 +0000" | "drsql", "steam_games" |
Dit is wat elke kolomnaam betekent:
MySQL wordt gebruikt bij zowat elk internetbedrijf waarvan je hebt gehoord.
Dit zijn allemaal echte gegevens; je kunt op Twitter zoeken en deze tweets vinden.
Dit is goed. De gegevens bevinden zich allemaal op één plaats; dus het is gemakkelijk te vinden, toch? Niet precies. Er zijn een paar problemen met deze tabel. Ten eerste zijn er repetitieve gegevens over kolommen. De kolommen "gebruikersnaam" en "volgende_gebruikersnaam" zijn repetitief, omdat beide hetzelfde type gegevens bevatten - Twitter-handles. Er is een andere vorm van herhaling binnen de kolom "following_username". Velden mogen slechts één waarde bevatten, maar elk van de velden "following_username" bevat twee.
Ten tweede zijn er herhaalde gegevens over rijen.
@ AndyRyder5 en @Brett_Englebert hebben elk tweemaal getweet, dus de rest van hun informatie is gedupliceerd.
Duplicaten zijn problematisch omdat het de CRUD-bewerkingen uitdagender maakt. Het zou bijvoorbeeld langer duren om gegevens op te halen, omdat tijd zou worden verspild door dubbele rijen te doorlopen. Ook zou het bijwerken van gegevens een probleem zijn; als een gebruiker zijn Twitter-ingang wijzigt, moeten we elk duplicaat vinden en bijwerken.
Repetitieve gegevens vormen een probleem. We kunnen dit probleem oplossen door te splitsen tafel 1 in afzonderlijke tabellen. Laten we verder gaan met het eerst oplossen van de herhaling van kolommen probleem.
Zoals hierboven vermeld, de kolommen "gebruikersnaam" en "volgende_gebruikersnaam" in tafel 1 zijn repetitief. Deze herhaling vond plaats omdat ik de volgrelatie tussen gebruikers probeerde uit te drukken. Laten we verbeteren tafel 1het ontwerp door het op te splitsen in twee tabellen: een alleen voor de volgende relaties en een voor de rest van de informatie.
Figuur 2
Omdat @Brett_Englebert @RealSkipBayless volgt, is het volgend op tabel geeft die relatie weer door @Brett_Englebert op te slaan als "from_user" en @RealSkipBayless als de "to_user". Laten we doorgaan en splitsen tafel 1 in deze twee tabellen:
Tabel 2: De volgend op tafel
FROM_USER | naar gebruiker |
---|---|
_DreamLead | Scootmedia |
_DreamLead | MetiersInternet |
GunnarSvalander | Klout |
GunnarSvalander | Zillow |
GEsoftware | DayJobDoc |
GEsoftware | byosko |
adrianburch | Cindy Crawford |
adrianburch | Arjantim |
AndyRyder | MichaelDell |
AndyRyder | Yahoo |
Brett_Englebert | RealSkipBayless |
Brett_Englebert | stephenasmith |
NimbusData | dellock6 |
NimbusData | rohitkilam |
SSWUGorg | drsql |
SSWUGorg | steam_games |
Tabel 3: De gebruikers tafel
voor-en achternaam | gebruikersnaam | tekst | gemaakt bij |
---|---|---|---|
"Boris Hadjur" | "_DreamLead" | "Wat vind je van #emailing #campaigns #traffic in #USA? Is het tegenwoordig een goede markt? Heb je #databases?" | "Tue, 12 Feb 2013 08:43:09 +0000" |
"Gunnar Svalander" | "GunnarSvalander" | "Bill Gates praat over databases, gratis software op Reddit http://t.co/ShX4hZlA #billgates #databases" | "Tue, 12 Feb 2013 07:31:06 +0000" |
"GE Software" | "GEsoftware" | "RT @KirkDBorne: Lezingen in #Databases: uitstekende leeslijst, vele categorieën: http://t.co/S6RBUNxq via @rxin Fascinerend." | "Tue, 12 Feb 2013 07:30:24 +0000" |
"Adrian Burch" | "Adrianburch" | "RT @tisakovich: @NimbusData op de @Barclays Big Data-conferentie in San Francisco vandaag, met #virtualisatie, #databases en #flash-geheugen." | "Tue, 12 Feb 2013 06:58:22 +0000" |
"Andy Ryder" | "AndyRyder5" | "http://t.co/D3KOJIvF artikel over Madden 2013 met AI om de super bowl #databases # bus311 te prodicteren" | "Tue, 12 Feb 2013 05:29:41 +0000" |
"Andy Ryder" | "AndyRyder5" | "http://t.co/rBhBXjma een artikel over privacy-instellingen en facebook #databases # bus311" | "Tue, 12 Feb 2013 05:24:17 +0000" |
"Brett Englebert" | "Brett_Englebert" | "# BUS311 NCFPD van de Universiteit van Minnesota maakt #databases om" voedselfraude "te voorkomen. Http://t.co/0LsAbKqJ" | "Tue, 12 Feb 2013 01:49:19 +0000" |
Brett Englebert | "Brett_Englebert" | "# BUS311-bedrijven beschermen mogelijk hun productie #databases, maar hoe zit het met hun back-upbestanden? Http://t.co/okJjV3Bm" | "Tue, 12 Feb 2013 01:31:52 +0000" |
"Nimbus Data Systems" | "NimbusData" | "@NimbusData CEO @tisakovich @BarclaysOnline Big Data-conferentie vandaag in San Francisco, met #virtualisatie, # databases, & #flash-geheugen" | "Maa, 11 feb 2013 23:15:05 +0000" |
"SSWUG.ORG" | "SSWUGorg" | "Vergeet niet om je aan te melden voor onze GRATIS expo aanstaande vrijdag: #Databases, #BI en #Sharepoint: Wat je moet weten! Http://t.co/Ijrqrz29" | "Maa, 11 feb 2013 22:15:37 +0000" |
Dit ziet er beter uit. Nu in de gebruikers tafel (tafel 3), er is slechts één kolom met Twitter-handles. In de volgend op tafel (tafel 2), is het slechts één Twitter-handle per veld in de kolom "to_user".
Edgar F. Codd, de computerwetenschapper die de theoretische basis legde van relationele databases, noemde deze stap van het verwijderen van herhalende gegevens over kolommen de eerste normale vorm (1NF).
Nu we herhalingen in kolommen hebben opgelost, moeten herhalingen in rijen worden hersteld. Omdat de gebruikers @ AndyRyder5 en @Brett_Englebert elk twee keer hebben getweet, wordt hun informatie gedupliceerd in de gebruikers tafel (tafel 3). Dit geeft aan dat we de tweets moeten verwijderen en deze in hun eigen tabel moeten plaatsen.
Fig. 3
Zoals eerder slaat 'tekst' de tweet zelf op. Omdat de kolom "created_at" de tijdstempel van de tweet opslaat, is het ook logisch om deze in deze tabel te plaatsen. Ik voeg ook een verwijzing naar de kolom 'gebruikersnaam' toe zodat we weten wie de tweet heeft gepubliceerd. Dit is het resultaat van het plaatsen van de tweets in hun eigen tabel:
Tabel 4: De tweets tafel
tekst | gemaakt bij | gebruikersnaam |
---|---|---|
"Wat vind je van #emailing #campaigns #traffic in #USA? Is het tegenwoordig een goede markt? Heb je #databases?" | "Tue, 12 Feb 2013 08:43:09 +0000" | "_DreamLead" |
"Bill Gates praat over databases, gratis software op Reddit http://t.co/ShX4hZlA #billgates #databases" | "Tue, 12 Feb 2013 07:31:06 +0000" | "GunnarSvalander" |
"RT @KirkDBorne: Lezingen in #Databases: uitstekende leeslijst, vele categorieën: http://t.co/S6RBUNxq via @rxin Fascinerend." | "Tue, 12 Feb 2013 07:30:24 +0000" | "GEsoftware" |
"RT @tisakovich: @NimbusData op de @Barclays Big Data-conferentie in San Francisco vandaag, met #virtualisatie, #databases en #flash-geheugen." | "Tue, 12 Feb 2013 06:58:22 +0000" | "Adrianburch" |
"http://t.co/D3KOJIvF artikel over Madden 2013 met AI om de super bowl #databases # bus311 te prodicteren" | "Tue, 12 Feb 2013 05:29:41 +0000" | "AndyRyder5" |
"http://t.co/rBhBXjma een artikel over privacy-instellingen en facebook #databases # bus311" | "Tue, 12 Feb 2013 05:24:17 +0000" | "AndyRyder5" |
"# BUS311 NCFPD van de Universiteit van Minnesota maakt #databases om" voedselfraude "te voorkomen. Http://t.co/0LsAbKqJ" | "Tue, 12 Feb 2013 01:49:19 +0000" | "Brett_Englebert" |
"# BUS311-bedrijven beschermen mogelijk hun productie #databases, maar hoe zit het met hun back-upbestanden? Http://t.co/okJjV3Bm" | "Tue, 12 Feb 2013 01:31:52 +0000" | "Brett_Englebert" |
"@NimbusData CEO @tisakovich @BarclaysOnline Big Data-conferentie vandaag in San Francisco, met #virtualisatie, # databases, & #flash-geheugen" | "Maa, 11 feb 2013 23:15:05 +0000" | "NimbusData" |
"Vergeet niet om je aan te melden voor onze GRATIS expo aanstaande vrijdag: #Databases, #BI en #Sharepoint: Wat je moet weten! Http://t.co/Ijrqrz29" | "Maa, 11 feb 2013 22:15:37 +0000" | "SSWUGorg" |
Tabel 5: De gebruikers tafel
voor-en achternaam | gebruikersnaam |
---|---|
"Boris Hadjur" | "_DreamLead" |
"Gunnar Svalander" | "GunnarSvalander" |
"GE Software" | "GEsoftware" |
"Adrian Burch" | "Adrianburch" |
"Andy Ryder" | "AndyRyder5" |
"Brett Englebert" | "Brett_Englebert" |
"Nimbus Data Systems" | "NimbusData" |
"SSWUG.ORG" | "SSWUGorg" |
Na de splitsing, de gebruikers tafel (Tabel 5) heeft unieke rijen voor gebruikers en hun Twitter-handles.
Edgar F. Codd noemt deze stap van het verwijderen van herhalende gegevens in rijen de tweede normale vorm (1NF).
Gegevens kunnen worden ingevoegd, opgehaald, bijgewerkt en verwijderd uit een tabel.
Tot dusver, tafel 1 is opgesplitst in drie nieuwe tabellen: volgend op (tafel 2), tweets (Tabel 4), en gebruikers (Tabel 5). Maar hoe is dit nuttig? Herhaalde gegevens zijn verwijderd, maar nu zijn de gegevens verdeeld over drie onafhankelijke tabellen. Om de gegevens op te halen, moeten we zinvolle koppelingen tussen de tabellen maken. Op deze manier kunnen we zoekopdrachten zoals "wat een gebruiker heeft getweet en die een gebruiker volgt" uitdrukken.
De manier om koppelingen tussen tabellen te maken is om eerst elke rij in een tabel een unieke ID te geven, een primaire sleutel genoemd, en vervolgens te verwijzen naar die primaire sleutel in de andere tabel waaraan u een koppeling wilt maken..
We hebben dit al gedaan gebruikers (Tabel 5) en tweets (Tabel 4). In gebruikers, de primaire sleutel is de kolom 'gebruikersnaam' omdat geen twee gebruikers dezelfde Twitter-ingang hebben. In tweets, we verwijzen naar deze sleutel in de kolom 'gebruikersnaam' zodat we weten wie wat heeft getweet. Aangezien het een verwijzing is, de kolom "gebruikersnaam" in tweets wordt een externe sleutel genoemd. Op deze manier koppelt de "gebruikersnaam" -toets de gebruikers en tweets tafels samen.
Is de kolom "gebruikersnaam" het beste idee voor een primaire sleutel voor de gebruikers tafel?
Aan de ene kant is het een natuurlijke sleutel - het is logisch om te zoeken met een Twitter-hendel in plaats van elke gebruiker een numerieke ID toe te kennen en daarnaar te zoeken. Aan de andere kant, wat als een gebruiker zijn Twitter-ingang wil veranderen? Dat kan fouten veroorzaken als de primaire sleutel en alle verwijzingen naar externe sleutels niet nauwkeurig worden bijgewerkt, fouten die kunnen worden vermeden als een constante numerieke ID werd gebruikt. Uiteindelijk hangt de keuze af van je systeem. Als u uw gebruikers de mogelijkheid wilt geven om hun gebruikersnaam te wijzigen, is het beter om een numerieke kolom voor automatisch verhogen met "id" toe te voegen aan gebruikers en gebruik dat als de primaire sleutel. Anders zou "gebruikersnaam" het prima doen. Ik blijf "gebruikersnaam" gebruiken als de primaire sleutel voor gebruikers
Laten we verder gaan tweets (Tabel 4). Een primaire sleutel moet elke rij op unieke wijze identificeren, dus wat moet de primaire sleutel hier zijn? Het veld "created_at" zal niet werken, want als twee gebruikers op hetzelfde moment tweeten, zouden hun tweets een identieke tijdstempel hebben. De "tekst" heeft hetzelfde probleem, namelijk dat als twee gebruikers allebei "Hallo wereld" tweeten, we geen onderscheid konden maken tussen de rijen. De kolom "gebruikersnaam" is de externe sleutel die de link met de gebruikers dus laten we daar niet mee rotzooien. Omdat de andere kolommen geen goede kandidaten zijn, is het logisch hier een numerieke auto-verhogende "id" kolom toe te voegen en die als de primaire sleutel te gebruiken.
Tabel 6: De tweets tabel met een "id" kolom
ID kaart | tekst | gemaakt bij | gebruikersnaam |
---|---|---|---|
1 | "Wat vind je van #emailing #campaigns #traffic in #USA? Is het tegenwoordig een goede markt? Heb je #databases?" | "Tue, 12 Feb 2013 08:43:09 +0000" | "_DreamLead" |
2 | "Bill Gates praat over databases, gratis software op Reddit http://t.co/ShX4hZlA #billgates #databases" | "Tue, 12 Feb 2013 07:31:06 +0000" | "GunnarSvalander" |
3 | "RT @KirkDBorne: Lezingen in #Databases: uitstekende leeslijst, vele categorieën: http://t.co/S6RBUNxq via @rxin Fascinerend." | "Tue, 12 Feb 2013 07:30:24 +0000" | "GEsoftware" |
4 | "RT @tisakovich: @NimbusData op de @Barclays Big Data-conferentie in San Francisco vandaag, met #virtualisatie, #databases en #flash-geheugen." | "Tue, 12 Feb 2013 06:58:22 +0000" | "Adrianburch" |
5 | "http://t.co/D3KOJIvF artikel over Madden 2013 met AI om de super bowl #databases # bus311 te prodicteren" | "Tue, 12 Feb 2013 05:29:41 +0000" | "AndyRyder5" |
6 | "http://t.co/rBhBXjma een artikel over privacy-instellingen en facebook #databases # bus311" | "Tue, 12 Feb 2013 05:24:17 +0000" | "AndyRyder5" |
7 | "# BUS311 NCFPD van de Universiteit van Minnesota maakt #databases om" voedselfraude "te voorkomen. Http://t.co/0LsAbKqJ" | "Tue, 12 Feb 2013 01:49:19 +0000" | "Brett_Englebert" |
8 | "# BUS311-bedrijven beschermen mogelijk hun productie #databases, maar hoe zit het met hun back-upbestanden? Http://t.co/okJjV3Bm" | "Tue, 12 Feb 2013 01:31:52 +0000" | "Brett_Englebert" |
9 | "@NimbusData CEO @tisakovich @BarclaysOnline Big Data-conferentie vandaag in San Francisco, met #virtualisatie, # databases, & #flash-geheugen" | "Maa, 11 feb 2013 23:15:05 +0000" | "NimbusData" |
10 | "Vergeet niet om je aan te melden voor onze GRATIS expo aanstaande vrijdag: #Databases, #BI en #Sharepoint: Wat je moet weten! Http://t.co/Ijrqrz29" | "Maa, 11 feb 2013 22:15:37 +0000" | "SSWUGorg" |
Laten we tot slot een primaire sleutel toevoegen aan de volgend op tafel. In deze tabel identificeert noch de kolom "from_user" noch de kolom "to_user" op unieke wijze elke rij afzonderlijk. Nochtans "from_user" en "to_user" samen, omdat ze een enkele relatie vertegenwoordigen. Een primaire sleutel kan in meer dan één kolom worden gedefinieerd, dus we gebruiken beide kolommen als de primaire sleutel voor de volgend op tafel.
Voor de foreign key zijn "from_user" en "to_user" elk foreign keys omdat ze kunnen worden gebruikt om een link met de gebruikers tafel. Als we vragen om een handle van Twitter in de kolom 'from_user', krijgen we alle gebruikers die hij volgt. Dienovereenkomstig, als we vragen om een Twitter-handle in de kolom "to_user", krijgen we alle gebruikers die hem volgen.
We hebben tot nu toe veel bereikt. We hebben herhalingen over kolommen en rijen verwijderd door gegevens in drie verschillende tabellen te scheiden en vervolgens hebben we voor primaire tabellen gekozen om de tabellen aan elkaar te koppelen. Dit hele proces wordt normalisatie genoemd en de uitvoer ervan bestaat uit gegevens die netjes zijn georganiseerd volgens het relationele model. Het gevolg van deze organisatie is dat rijen slechts eenmaal in de database verschijnen, waardoor de CRUD-bewerkingen eenvoudiger worden.
Fig. 4 diagrammen het definitieve databaseschema. De drie tabellen zijn aan elkaar gekoppeld en de primaire toetsen zijn gemarkeerd.
Fig. 4
Er zijn kleine variaties in SQL tussen elke RDBMS-leverancier, SQL-dialecten.
Nu we weten hoe we een relationele database moeten ontwerpen, hoe kunnen we die dan daadwerkelijk implementeren? Relationele databasebeheersystemen (RDBMS) zijn software waarmee u relationele databases kunt maken en gebruiken. Er zijn verschillende commerciële en opensource-leveranciers om uit te kiezen. Commercieel gezien zijn Oracle Database, IBM DB2 en Microsoft SQL Server drie bekende oplossingen. Aan de vrije en open source kant zijn MySQL, SQLite en PostgreSQL drie veelgebruikte oplossingen.
MySQL wordt gebruikt bij zowat elk internetbedrijf waarvan je hebt gehoord. In de context van dit artikel gebruikt Twitter MySQL om de tweets van hun gebruikers op te slaan.
SQLite is gebruikelijk in embedded systemen. iOS en Android lieten ontwikkelaars SQLite gebruiken om de privédatabase van hun app te beheren. Google Chrome gebruikt SQLite om uw browsegeschiedenis, cookies en uw miniaturen op te slaan op de pagina 'Meest bezocht'.
PostgreSQL is ook een veelgebruikt RDBMS. De PostGIS-extensie vult PostgreSQL aan met georuimtelijke functies die het bruikbaar maken voor kaarttoepassingen. Een opmerkelijke gebruiker van PostgreSQL is OpenStreetMap.
Nadat u een RDBMS op uw systeem hebt gedownload en ingesteld, is de volgende stap om een database en tabellen in de database te maken om uw relationele gegevens in te voegen en te beheren. De manier waarop u dit doet, is met Structured Query Language (SQL), de standaardtaal voor het werken met RDBMSs.
Hier volgt een kort overzicht van veel voorkomende SQL-instructies die relevant zijn voor het bovenstaande voorbeeld van Twitter. Ik raad u aan het SQL Cookbook te raadplegen voor een vollediger, toepassingsgestuurde lijst met SQL-query's.
CREATE DATABASE-ontwikkeling;
MAAK TABLE gebruikers (volledige naam VARCHAR (100), gebruikersnaam VARCHAR (100));
RDBMS's vereisen dat aan elke kolom in een tabel een gegevenstype wordt gegeven. Hier heb ik de gegevenstype de kolommen "volledige naam" en "gebruikersnaam" toegewezen VARCHAR
welke een reeks is die in breedte kan variëren. Ik heb willekeurig een maximale lengte van 100 ingesteld. Een volledige lijst met gegevenstypen is hier te vinden.
INSERT INTO gebruikers (volledige naam, gebruikersnaam) VALUES ("Boris Hadjur", "_DreamLead");
SELECT text, created_at FROM tweets WHERE gebruikersnaam = "_ DreamLead";
UPDATE gebruikers SET full_name = "Boris H" WHERE gebruikersnaam = "_ DreamLead";
DELETE FROM users WHERE gebruikersnaam = "_ DreamLead";
SQL lijkt veel op gewone Engelse zinnen. Er zijn kleine variaties in SQL tussen elke RDBMS-leverancier, SQL-dialecten genoemd, maar de verschillen zijn niet dramatisch genoeg, zodat u uw SQL-kennis niet eenvoudig van de ene naar de andere kunt overbrengen..
In dit artikel hebben we geleerd hoe een relationele database te ontwerpen. We hebben een verzameling gegevens verzameld en deze in aanverwante tabellen verwerkt. We hebben ook kort gekeken naar RDBMS-oplossingen en SQL. Dus begin met het downloaden van een RDBMS en het normaliseren van sommige van uw gegevens in een relationele database van vandaag.
Voorbeeldafbeelding Bron: FindIcons.com/Barry Mieny