>> Selvä.
Joten, pitemmittä puheitta, SQL, Structured Query Language.
Joten, olet todennäköisesti käyttänyt tätä osoitteessa ainakin CS50, ehkä CS165,
ehkä omassa henkilökohtaisia ​​projekteja.
Ja mitä SQL voit tehdä, SQL Server yleisemmin?
Yeah?
[Inaudible Huom!]
OK, joka oli hyvin turvattu tapa sanoa se.
Kyllä. Joten se mahdollistaa voit tallentaa tietoja
ja vielä tärkeämpää mahdollistaa voit kyselyn tietojen.
Ja tämä on askel eteenpäin
käyttämästä jotain yksinkertaisempi kuin CSV, oikea.
Pilkulla erotettuna muuttujat.
Samanlaiset arvot.
Samoin voit tallentaa tietoa yksi rivi
tekstitiedosto.
Mutta mitä haittapuoli CSV-tiedosto tallentamiseen tietoja,
vaikka tehokkaasti saada rivit ja sarakkeet siitä?
Joo.
>> Sinulla ei "ole sama organisaatio
tehokkuutta [äänetön].
>> Sinulla ei ole sama organisaation tehokkuutta.
Mitä tarkoitat?
>> No, kuten [äänetön] on kuin ensisijainen [kuultavissa].
>> OK. Joo.
>> Se on relaatiotietokanta sinulla voi olla useita tietokantoja
liitetty toisiinsa aivan erityisillä tavoilla.
>> OK. Hyvä.
>> Se [kuultavissa] asettaa CSV.
>> Ja haluan nipistää hieman terminologiaa.
Joten useita taulukoita Tietokannassa varma,
ja joka menee pidemmälle kuin voit tehdä vain yhden CSV.
Mutta oikeasti rajoitus CSV Väitän on
että tehottomuus kaiken.
Se on erittäin helppo layout.
Mutta jos haluat tehdä kyselyn, mitä ajoaika
minkään Hakukyselyn on CSV-tiedosto?
Siis se on iso vanha [kuultavissa] oikea, koska pahimmassa tapauksessa
he nousivat alareunassa.
Vaikka olisit lajitellaan koko CSV-tiedosto, jos et tiedä
että etukäteen hyvin, olet vielä menossa on
etsiä koko juttu.
Joten, joukossa asioita aiomme saada
käyttämästä todellinen tietokantaan kieli
kuten SQL on, voimme kysyä sen ja voimme etukäteen
Tietokanta suunnittelijat määritellä, mitä ovat kentät
jotka todennäköisesti olemaan kysymyksiä niin, että ihmiset
klo MySQL tai Microsoft tai Oracle,
kuka on tehnyt tietokanta käytät tehdä kaikki
kovan työn mietitään, OK,
antanut miljoonaa näistä IDS.
Miten voimme layout - ne muistiin?
Jonkinlainen puu jäsentää ehkä
niin, että kun teet tosiasiallisesti suorittaa Select,
se on jotain, joka on logaritminen tai logaritminen
logaritminen ajassa melko kuin todellisuudessa taantunut
joksikin lineaarinen.
Joten saimme paljon suorituskykyä niin.
Ja voimme myös tallentaa paljon enemmän tiedot helpommin "aiheuttaa SQL
Palvelin on tyypillisesti tallennettu RAM vaikka osat
se voi olla tallennettu levylle ja varmaan tiedätkin nyt
että RAM on yleensä nopeammin kuin levyjä,
niin se on hyvä asia.
Ja voimme myös käsitellä samanaikaisuuden paljon parempi.
Jos olet ottanut 165 tai 161, tiedät, että jos kaksi ihmistä yrittää
tehdä sama asia kerralla järjestelmä,
pahoja asioita voi yleensä tapahtua.
Joten joukossa muita ominaisuuksia meidän voi saada, jos me suunnittelemme pöydät
oikealla tavalla on parempi tuki ja turva
kun se tulee samanaikaisuuden.
Niin, kaksi ihmistä kahdessa osassa
maailman käyttäen samaa sivuilla, jos he molemmat yrittävät
ostaa jotain samaan aikaa, että järjestys ei tule
mennä samanaikaisesti.
Jotenkin he olisivat sarjoittaa joku muu kuin oma -
joku muu kuin itseämme.
Tietokanta tehdä meille.
Joten kun se on yksinkertaisin muoto,
SQL antaa meille kysely relaatiotietokanta.
Relaatiotietokannan on yksi, joka on yksi
tai useamman taulukoita se yleensä.
Ja jos tämä on hieman tuntemattomia,
voit todella vain ajatella Tämän Excel-tai numeroiden
tai Google taulukoita.
Se vain on rivejä ja sarakkeita ja tyypillisesti päällekkäin
Näiden rivien on nimi.
Joten tämä voisi olla tunnus sarakkeen nimi sarakkeessa
osoite sarake ja niin edelleen.
Ja sitten sinulla voi olla useita tällaisia ​​taulukoita, jos haluat
aloittaa säätävä erityyppisiä tietoja.
Mutta ehkä muistatte ainakin alkaen CS50 että yritimme
antaa sinulle GUI-pohjainen työkalun [äänetön]
tietokannan hallinnan.
Se oli nimeltään phpMyAdmin.
Joten se on vain sattumaa, että se oli kirjoitettu PHP, todella,
mutta se oli vain web-pohjainen etupää tietokantaan.
Ja kautta eri välilehtiä ja linkkejä, voisitko alkaa
määrittää tietokantaan itse.
Mutta hyvä työkalu alkaa saada hieman mukavampaa
kanssa on myös komentorivin client.
Joten, jos käytät CS50 Appliance tai oikeastaan ​​millä tahansa makro PC
että on komentoriviltä MySQL asiakas, voit myös tehdä se tavallaan
vanhan koulukunnan, kuten tämä.
Sivuhuomautuksena MySQL hankkeen ainakin avoimen lähdekoodin versio
se on nyt nimeltään MariaDB varten eri syistä voit lukea
Wikipediassa, mutta se on sama ohjelmisto,
se on sama syntaksi ja niin edelleen,
melko paljon samaa koodia perusta.
Ja niin kun olen tässä kysyy Voin nyt vuorovaikutuksessa
minun tietokanta paljon käsin.
Joten asiassa, anna minun mennä eteenpäin
ja vain avata terminaali-ikkuna.
Satuin käyttää CS50 Appliance mutta voit tehdä tämän
useimmissa tahansa järjestelmän jonka sait oikean
ohjelmisto.
Ja aion tehdä MySQL-u Käyttäjätunnuksen John Harvard
tästä järjestelmästä,-p salasanaa että minä kirjoita
hieman enemmän turvallisesti lyömällä Enter.
Nyt olen pyydettäessä.
Aion kirjoittaa Crimson vuonna CS50 Appliance
ja nyt näen lähinnä että samassa näytössä.
Mutta on komentoja nyt että voimme aloittaa kirjoittamisen
kuten osoittavat tietokantoja ja että menee Näytä kaikki
Tietokantojen, että minulla on jo luotu järjestelmä,
melko sama lista näkisitte phpMyAdminissa.
Siellä pari muille vastaaville tiedot skeema ja testi,
jos te penkoa CS50 Appliance, me piilottaa joitakin
näistä alemman tason taulukot
mutta he ovat olleet siellä koko tämän ajan.
MySQL todella on alhainen ominaisuuksia, kuten käyttäjätunnuksia
ja salasanat tietokantaan itse, ei hakemuksesi
että saatat olla käynnissä sen päälle.
Joten etukäteen, tänään, olen loi pari tietokannat,
joista yksi on nimeltään courses50.
Kertoimet ovat jotkut teistä ovat käyttäneet CS50 ostoskeskuksista työkalu,
joka on iso käyttöliittymä rekisterinpitäjän kurssiluetteloon.
Ja tämä on todella mukava aineisto puhua koska,
yksi, olemme tavallaan kaikki ilmeisesti tuttuja kursseja
ja kouluttajille, ja kokous paikoissa ja kaikki lajitella
tavalliset asiat yliopisto,
mutta se on myös saanut joitakin mielenkiintoisia mahdollisuuksia
suunnitteluun.
Joten ajattelimme käyttää käsite kurssiluetteloon
ja ostokset työkalu Esimerkiksi koko tänään lajitella
runko joitakin suunnittelu päätöksiä meidän on tehtävä.
Joten aloitetaan siellä.
Oletetaan, että olen itse halusi edustamaan Super yksinkertaisin
tietenkin ostoksilla työkaluja.
Ja yksinkertaisin maailmassa Voin kuvitella, ja yksi on
jossa on kursseja ja on ohjaajia.
Ja nyt kai vuoksi keskustelu
että jokainen kurssi on ainakin nimi.
Joten alkaa hahmotella tätä.
Aion käyttää phpMyAdmin aivan kuten mukavuus,
joten meidän ei tarvitse kirjoittaa ulos kaikki kyselyt manuaalisesti.
Mutta täällä minä olen courses50 tietokantaan.
Jos tunne tätä, se tulee olla erittäin helppoa, kun sukeltaa
sisään oma projektisi jos haluat käyttää sitä.
Aion luoda taulukkoon nimeltä Kurssit
ja voin vain ajatella Yhden kentän
nyt, nimi tietenkin.
Aion mennä eteenpäin ja sananvaltaa anna minulle yksi sarake.
Nyt, kuten muistatte saat käyttöliittymä, joka on hieman
näin.
Ja muut ylösalaisin rehellisesti phpMyAdmin on, että se tavallaan
itsensä ohjeistuksesta ja että kautta dropdowns voit lajitella
ja katso, mitä mahdollisia suunnitteluun liittyviä päätöksiä ovat.
Joten aion antaa jokaisen kurssin nimi.
Se on nimi tämän sarakkeen.
Ja miten sen tietotyyppi?
Useimmat teistä olisi tiedettävä Ainakin osa näistä tietotyyppejä
alkaen aiempaa kokemusta.
Mikä on sopiva kurssille nimi?
Sharon?
>> Varchar.
>> OK, varchar joka vaihtelee Char.
Ja mitä se tarkoittaa teknisesti?
[Inaudible Huom!]
OK. Joten se on merkkijono.
Ja var näkökulma se merkitsee mitä?
Muuttuja. Mutta mitä se tarkoittaa?
Yeah?
[Inaudible Huom!]
Täsmälleen. Joten se muuttuja merkkimäärä
merkkijono ylös Joidenkin maksimi.
Joten tässä on meidän ensimmäinen suunnittelu päätös.
Me itse asiassa on päätettävä kuinka monta tavua maksimaalisesti
antaa jokaiselle tällaisia ​​merkkijono.
Yleisesti ottaen haluat tavallaan tee sitä liian pieni,
tee sitä liian iso "Aiheuttaa ilmeistä
jos liian pieni olet vain aikoo aloittaa truncating tiedot
ja menetät tietoja.
Ja jos se on liian iso, olet vain tavallaan kertoo tietokannan
edellyttää ja optimoida lisää tietoja
kuin se voisi itse koskaan saada.
Niin mitä kohtuullinen tunne numero nimi kurssin?
60? OK, niin 60.
Tämä tuntuu ihan kohtuullinen
kunhan ei ole mitään poikkeuksia tästä.
Ei todellakaan ole kova, nopea sääntö.
Ollakseni rehellinen, sillä historiallisista syistä paljon
ihmiset valitsevat 255 "Aiheuttavat jo vuosia, että oli tavallaan
oletuksena käytetään enintään 8 tavua - 8 bittiä kuin laskuri.
Olin enemmän [kuultavissa] voisi käyttää toimivaltaa 2
mutta se on tavallaan merkityksetön.
Joten voimme mennä 60.
Että tuntuu järkevältä niin kauan
kuten me lopulta kadu sitä Koska se on yläraja.
Nyt kai päinvastainen päätös oli tehty,
ole muuttuvia merkkiä, mutta vain char kenttään.
Joten toisin kuin C-ja C + +, nieriä ei tarkoita yhtä merkkiä
ja tietokantojen tarkoittaa yleensä kiinteä määrä
merkkien merkkijonon.
Mikä olisi ylösalaisin ja / tai haittapuoli minun valita 60
varten char kenttä, sen sijaan, että varchar?
Tämä on juuri ensimmäinen laatuaan Päätöksen sinun täytyy tehdä
tarkastaessaan [foneettinen] ulos Hankkeen kumppanien kanssa.
Joo, Sharon uudelleen.
[Inaudible Huom!]
Hyvä. Joten jos nimi on vähemmän
kuin 60 sitten tuhlaat mitä se delta on
60- todellinen pituus.
Niin että vain tuntuu tuhlaileva, enemmän tavuja kuin tarvitset.
Mutta miksi se on olemassa?
Varmasti on joitakin ylösalaisin.
Yeah?
[Inaudible Huom!]
Toki. Joten joskus ehkä tiedätte kiinteä määrä
merkkejä, kuten 10 numeroa puhelinnumeron esimerkiksi.
Mutta kuka välittää, kuten miksi vain sanoa 11 tapauksessa
tai miksei 60 muutenkin kanssa varchar?
Mitä hyötyä saamme tuntemalla ja suunnittelemalla
kiinteään lukumäärään merkkejä?
[Inaudible Huom!]
Olet oikealla tiellä.
Joten se on optimointi, mutta se on todella annettu - joo?
[Inaudible Huom!]
OK. Hyvä. Keskitytään siitä, että viimeinen osa.
Niin indeksointi.
Joten se kääntyy pois, jos tietää etukäteen, että kaikki
teidän kentät ovat menossa olla 60 merkkiä,
voit todella ajatella tätä sarakkeen Excel-tietokantaan
olevan hyvin suora, tasattu vasemmalle
ja tasattu oikealle reunat
koska jokainen sarake on 60 merkkiä leveä.
Tämä tarkoittaa, että tämän merkkijono on 60 merkkiä pois
Tämän string, 60 merkkiä pois tämä
ja tämä ja tämä.
Joten aivan kuten takaisin kun oppinut C, sinulla oli random access
maailmassa paneelit Sama ajatus täällä.
Jos sarake on edustettuna käyttämällä vain kiinteä pituus merkkiä,
voit tehokkaasti indeksi satunnaisesti 60 tai 120 tai 180
ja voit saada erikseen jouset paljon nopeammin.
Sitten jos sen sijaan, kolumniasi oli vasen suora reuna niin sanotusti
mutta hyvin karu oikeus reuna pylvääseen
sillä saatat on 10 merkkiä,
15 merkkiä, 5 merkkiä.
Joten tämäkin on kompromissi.
Ja joskus vain ja erehdyksen kautta
ja kokeilua Tajuatko
mitä todella oikea päätös on, mutta nämä ovat erilaisia
kysymyksiä, olisi menossa
kautta mielenne ja / tai taulukoita, kun on aika
suunnitella tietokantaan.
Joten, ei välttämättä oikea vastata, mutta sinun pitäisi
ainakin jonkin verran lause tai kaksi mielessä
varmuuskopioida mitä tahansa päätös jonka teet.
Selvä.
Joten pitää vieritys in ohjeita täällä
jotka ovat phpMyAdmin n UI.
Joten, oletusarvo nimi, minun pitäisi määritellä
että se olisi olla oletusarvo null?
Mitä mieltä olet?
Voi tietenkin null nimi?
Vain tuntuu oudolta, eikö?
En voi ajatella mitään nimeämätön kursseja Harvardin.
Ja ehkä on joitakin hämärä nurkka tapauksessa
jos kurssi on antanut useita
ja professori ei ole valittu nimi sitä, mutta -
Tarkoitan, pahus kanssa,
kuten älkäämme edes vaivaudu tukevat sitä.
Sanoisin edun mukava puhdas tietokantaan,
katsotaanpa määrittää, että et voi on oletusarvo null.
Vaihtoehtoisesti voisimme tehdä jotain nimetön kurssi
joka ei ole toisin kanssa Mac OS ja Windows do
kun luot kansioon esimerkiksi
mutta joka tekee hieman enemmän järkeä
niin että ihmisen nähdä jotain.
Puhumme back-end-tietokanta oletettavasti
kurssille luettelo.
Joten en todellakaan edes kuten ajatus antaa sille
in nimetön kurssi nimet
koska se ei oikeastaan auta ketään.
Joten se kannattaa jättää mitään, mikä tarkoittaa, että kun lisäät
tähän tietokantaan, sinulla on antaa jokaiselle kurssin nimi
joka tuntuu hieman siivooja minulle.
Selvä.
Joten vieritys edelleen, lajittelu.
Tämä vain on tekemistä merkistöjä ja vaikka mitä
jos olet koskaan nähnyt mainitsee Ruotsin
phpMyAdminissa se Koska ihmiset
joka kirjoitti phpMyAdmin ruotsalaisia.
On, että PHP vai onko se MySQL?
Yksi kaksi, I Unohdin suoralta kädeltä.
Mutta se on historiallisista syistä
mutta voit ilmaista välein merkki Englanti
että voisit Ruotsin joten se on suurelta osin ei-kysymys.
CS50 Appliance kuitenkin on käytetty - konfiguroida käyttämään UTF-8,
niin että yleensä tulisi olla ei pop up sinulle.
Ominaisuudet.
Joten mikään näistä ovat todella merkitystä tässä.
Näen Binary, Unsigned, Unsigned zerofill,
ja päivittää nykyisen aikaleima.
Tämä kenttä koskee vain joillekin numeerinen kenttä
tai jonkin ajan kentät.
Niin me ohittaa että kokonaan.
Null. Voiko tämä kenttä voi olla tyhjä?
Joten ei. Meillä on jo tällaista keskustelua.
Joten emme halua oletusarvo.
Emme halua sen olevan nolla.
Entä indeksi?
Siellä on neljä vaihtoehtoa täällä.
Mitä se tarkoittaa, jos me määrittää
että tämä rivi on menossa olla ensisijainen avain?
Muistelen CS50 tai CS165 jos olet ottanut sen.
[Inaudible Huom!]
Täsmälleen. Joten perusavain määritelmän on kenttä
joka yksilöi jokainen rivi tässä taulukossa.
Ja voit luottaa siihen tehdä että yksilöllinen tunniste.
Joten, mitä se tarkoittaa sitten vain olla ainutlaatuinen?
No, tavallaan nämä kaksi on eräänlainen
Alle vaikutukset alla huppu.
Mutta yleisesti, perusavain on eräänlainen sopimus teet
tietokantaan asia.
Kun teen kyselyt etsivät tietenkin
Aion käyttää tätä tietyllä alalla.
Ja tulemme takaisin miksi meillä olisi kaksi
tällaisia ​​valintoja täällä, ensisijainen tai ainutlaatuinen.
Ainutlaatuinen sanoo vain, tämä kenttä tulee olemaan ainutlaatuinen
mutta en ole oikeastaan ​​tehdä mitään Tällainen sanallista sitoutumista täällä
käyttää tällä alalla tehdä hauissa
syistä näytämme katso vain hetken.
Jos me määrittää sen sijaan indeksi, mitä se tarkoittaa täsmentää
että kentällä on indeksi sitä?
Yeah?
[Inaudible Huom!]
Täsmälleen. Se on ollut optimoitu kyselyn.
Joten te - tietokantapalvelimen, Oracle, MySQL, mitä tahansa,
yleensä työtä sen taika kulissien takana kun klikkaat
että vaihtoehto ja valitse sitten Tallenna ja se rakentaa
up tyypillisesti puurakenne, B-puita, jos olet nähnyt
tai kuullut pois, joka on Erittäin lyhyen näköinen puu
joka antaa sinulle erittäin mukava logaritminen ominaisuudet
kun hakuja tietoihin.
Jos et määritä hakemisto pellolla, missä mennään
olla käynnissä aika etsiä
mielivaltaisen [Foneettinen] kurssin nimi?
Mikä tuo on?
[Inaudible Huom!]
Oh, [äänetön], lineaarinen, eikö?
Jos se ei ole optimointeja saatiin tietokantaan
ja et ole ajatellut tietokanta millaisia
Tietojen odottaa.
Parasta mitä voi tehdä on tarkistaa kaiken, kun etsit
joillekin arvo, erityisesti jos siellä voisi
itse asiassa olla kopioita.
Koko teksti Otamme sillä välin aalto käsiimme nyt.
Mutta yleensä tämä on indeksin tyypistä, jonka avulla voit
optimoida avainsanan hakuja kenttään.
Joten tämä voisi olla hyvä ehdokas
samankaltaisten kurssin kuvaus jos saatat olla pari
kohdan ja saatat halua tehdä osamerkkijonoilla.
Koko teksti yleensä anna teet sen melko tehokkaasti.
AI, tämä on kamala eräänlainen selitystä mutta jos viet
sen yli näet Auto Increment.
Ei sovelleta niin täällä mutta auto lisäys on hyödyllinen
samankaltaisten int n alalla, koska tietokanta hoitaa
prosessin plus plusing sitä joka kerta et insertti.
Niin että vaikka kaksi ihmistä kirjaimellisesti valitse Lähetä
samaan aikaan ja yrittää luoda rivin jotenkin
tietokantaan, joka on yksi ne saavat numero I,
muut saavat numero I plus 1.
Sinun ei tarvitse huolehtia
noin kaksi ovat lukuja valittu identtisesti jos olisit
tehdä sitä itse koodissa.
Selvä.
Joten tavallaan pidän joissa meillä nimi olla.
Joten valitse Tallenna.
Onko tämä hyvä suunnittelu varten tietokannan taulun?
Ja syrjään, jos ruosteinen SQL tai voit lajitella
vain aina sulkea silmä, mitä oli tekeillä,
Olisin voinut kirjoittanut juuri sitä -
nämä kolme riviä tuohon mustavalkoinen ajallaan
komentoriville asiakkaan tai olisin voinut tehdä
että koodissa ohjelmallisesti.
Joten kaikki phpMyAdmin on tekemässä Minulle on vain säästää minua vaivaa
muistaa joskus syntaksin ja kirjoittamalla ulos
kuten ikävä komentoja.
Selvä.
Joten tämä ei tunnu paras design, yksi kenttä pöytä.
Nyt meillä voisi olla asioita, kuten professorit
ja sijainnit ja kuvaukset.
Mutta silloinkin, käyttäen vain nimellisesti
tunnistaa kursseja ei tunnu ihanteellinen.
Mitä yleensä olemme tehneet aikaisemmin
jos olet käyttänyt tietokantoja yksilöllisesti rivit?
Etkö käytä varchars tyypillisesti.
Yeah?
[Inaudible Huom!]
Joo. Joten tyypillisesti kurssin tunnus.
Niin, yleisin lähestyä tänne erityisesti
käytettäessä puitteet on oikeastaan ​​vain
käyttää useissa kuin kokonaisluku.
Joten anna minun mennä eteenpäin ja tehdä tämän.
Ja voimme tehdä tämän muutaman tavoilla, mutta ilmoitus jos olen zoomata
vuonna pohjassa täällä.
Aion sanoa vielä yhden sarakkeita taulukon loppuun,
yleensä vain visuaalinen mukavuutta laitat tunnukset
alussa taulukon vaikka tämä ei ole todellista
toiminnallisia vaikutuksia.
Joten aion sanoa lisätä yhden sarakkeen
alussa pöydän.
Aion napsauta Siirry, että antaa minulle takaisin tämän UI täällä.
Kutsukaamme tätä tunnus.
Jos ajattelemme aiomme olla enää tehnyt 4000000 kursseja
int n kenttä on hieno.
Voisimme jopa kutistua alas
mutta tila on halpaa niin kuka todella välittää.
Mutta me yritämme kirjoittaa Facebook nyt
ehkä ole huono asia ennakoida iso ints
joka antaisi meille 64-bittinen ints
mutta niin olet kirjaimellisesti määrä kaksinkertaistui bittien
että käytät, niin vähäinen, kompromissi
mutta jotain harkita.
Nyt tämä on hämmentävää perintö asia.
Saatatte muistaa käyttämästä MySQL
että milloin julistaa int kenttä näet usein numero
sen vieressä kuin numero 10.
Sillä ei ole mitään tekemistä sen kanssa koko määrän
tai bittien määrä.
Että on tekemistä numero merkkejä, joita käytetään
visuaalisesti näyttö että int kenttä
käytettäessä pääteikkuna.
Jotta voimme nähdä, että hetki.
Joten, älä johtaa harhaan kirjoittamalla numerot
siellä vaikka se on tehokkaasti pyytävät meitä
yhden täällä.
Tänne, aion mennä eteenpäin ja sanoa allekirjoittamaton.
Ei ole mitään syytä jätteet Kaikki negatiiviset luvut
koska tietokantaa on yleensä menossa
olettaa positiivinen arvojen tai null.
ID varmasti ei pitäisi olla nolla.
Ja mitä mieltä olet indeksin tämän ID-kenttä?
Tehdään se ensisijainen.
Joten, mitä jos, vaikka, kuten voin vain ajatella yksi CS164 tietenkin
Harvardin ja vain yksi CS50 tietenkin Harvardin
Ja se on aika paljon tosi yleistä
että siellä on ehkä poikkeuksia [Äänetön] sekä lukukautta
tai jotain outoa sellaista.
Mutta myös ennen kaikkea, miksi se on parempi
käyttää numeerista olennainen tunnuksen yksilöivät kurssit pikemminkin
kuin vain ainutlaatuinen merkkijono?
Yeah?
[Inaudible Huom!]
OK, mielenkiintoinen.
Joten jos meillä olisi jonkinlainen rajat listattu kursseja.
Niin se on hyvä esimerkki.
En ole varma, että haluan ratkaista, että vaikka
antamalla heille samat ID-numero, jos se on
missä olit menossa sen kanssa.
Ei? OK. Mutta varmasti corner tapauksessa harkita.
Jos on tavallaan - tarvitsemme jonkinlaista
aliasing mahdollisesti.
[Inaudible Huom!]
Toki.
[Inaudible Huom!]
Se on hyvä esimerkki.
Nimi saattaa muuttua aikaa, täysin kohtuullinen.
Mitä muuta?
[Inaudible Huom!]
Anteeksi, sano uudelleen.
[Inaudible Huom!]
Joo, aivan.
Siis todella, se on todellinen ratkaiseva tekijä on
että käyttämällä 32-bittinen int on luultavasti olemaan nopeampi
kuin jotkut muuttuja pituus char kenttään.
Ensimmäisessä tapauksessa, tölkin kirjaimellisesti sovi rekisteriin,
puhumattakaan paljon pienempiä muistia.
Jälkimmäisessä tapauksessa olet menossa täytyy tehdä keinona [foneettisia]
string vertailuja, jotka itsessään lineaarisen
koossa string mahdollisesti.
Niin, se on vain mukava optimointi,
ja erityisesti se menee
to tehkäämme mitä kutsutaan Liitosten tehokkaammin
vain hetken.
Tehdäänpä että.
Me määrittää, että Tämä on ensisijainen
koska en ole erityisen halua välittää tai ajatella
mitä numero on tietenkin.
Anna heidän ottaa mitä arvoja he haluavat.
Aion sanoa auto lisäys joten en voi ulkoistaa, että yksityiskohtaisesti.
Kuten syrjään saatat tietää, että Harvard
ainakin ei ole ainutlaatuinen numerot kursseja.
Minulla ei ole muistikuvaa mitä tämä kursseja on.
Tiedän, että CS50: n luettelo numero on 4949,
täysin mielivaltaista.
Mutta on outoa corner tapauksia, että jopa
vuonna registrarial dump tietenkin luettelo tietojen,
joskus kursseja, vanha kursseja on useita, kuten 4.
Mutta teknisesti että kenttä on char kenttä
että yksinkertaisesti alkaa 0004.
Niin täälläkin, sinun täytyy olla varovainen erottaa
välillä asioita, kuten kurssiluetteloon numero
joka saattaa olla joitakin ihmisen käsitettä kiinteä pituus, 0004,
ja sinun ei pitäisi säilyttää että esimerkiksi ints.
Tällainen kentän pitäisi voida tallentaa muualle.
Joten Harvard, jos olisimme todella tehdä kurssin
ostos työkalu, se on todennäköisesti ei riitä
numeroon kursseja vain 1, 2, 3, 4.
Olemme luultavasti täytyy
on toinen kenttä nimeltään luettelo numero,
, joka on myös tarkoitus olla ainutlaatuinen Based
ihmisten yleissopimukset täällä mutta se ei ole paras valinta
varten yksilöllinen tunniste, koska se voi olla vaihteleva pituus.
Se ei ehkä neljä merkkiä, se voi olla viisi.
Itse olen sitä mieltä, muutama vuotta sitten ne liikkuvat
viisi merkkiä koska siellä oli yli 999 kurssia
yhteensä tai jotain että, tai 9999 kursseja.
Niin, että voisi olla esimerkki jos kenttä ei ole ensisijainen
mutta se olisi ainutlaatuinen.
Ja sähköpostiosoitteesi on toinen.
Saatat haluta sen olevan ainutlaatuinen
mutta ei välttämättä perusavain.
Selvä.
Saanen siis bang pois toisen pöytä paljon nopeammin kuin tämä yksi.
Joten aion kutsua tätä yksi Kouluttajat ja aion
antaa tälle yhteensä sarakkeiden lukumäärä on kaksi.
Aion oppia minun läksyn viime kerralla.
Aion soittaa ensimmäisessä sarakkeessa ID.
Aion soittaa Toisessa sarakkeessa nimi.
Olen myös aikoo tehdä Varchar.
Aion olettaa mitään professori on nimi pidempi
kuin 60 merkkiä, vaikka nyt tämä voitaisiin työntämällä sitä
joitakin pitkiä nimiä erityistä ihmiset toinen nimi.
Se on hyvä tänään.
Joten siirry tänne.
Tehdään tästä unsigned uudelleen.
Tehdään tästä ensisijainen.
Ja me salli samannimisiä
jos on kaksi John Smithin tai jotain.
Ja nyt meillä on kaksi pöytää.
Joten nyt tämä herättää kysymys, miten voin liittää
vuonna ohjaaja kurssin?
Minusta tuntuu sellainen sai ennen itseäni
koska jos ohjaaja opettaa tietysti
minun ensimmäinen vaisto olisi todella mennä takaisin
kurssien huomaan, että tämä ei ollut hyvä idea.
Saanen itse lisätä yhden sarakkeen lopussa taulukon
napsauta Siirry, ja minä kutsuvat tätä Ohjaaja.
Ja minä teen tämän varchar ja minä teen tämän 60.
Ja ehkä Jätän null nyt
jos kurssi ei ole on Allekirjoittamatta vuonna ohjaaja
joka joskus tapahtuu ennen lukukausi alkaa ja valitse Tallenna.
Mikä näistä malleja pidät eniten?
Ensimmäinen, jossa meillä on erillinen opettajan pöytä
tai toisella, jos me vain lisätä kentän kurssin?
Joten se on läheisemmin ohjaaja kurssi.
[Inaudible Huom!]
OK. Hyvä. Mutta haluan työntää takaisin.
Se on vain niin yksinkertaista kuin voin kirjoita vain henkilön nimi
tähän taulukkoon, kuten varmasti että on jotain arvoa tai -?
[Inaudible Huom!]
Selvä.
No, anna minun olla vaikeaa täällä.
Joten haluan sanoa, että tämä kurssi on CS51
ja tiedän, että se on opettanut tänä vuonna kaksi ihmistä.
Joten, Henry Leitner ja Jesse Tov mutta -
niin minä vain laittaa pilkku välillä, oikea.
Olen todella hyvä CSV menneiden.
[Inaudible Huom!]
Täsmälleen, oikea.
Heti kun turvautua jotain tällaista,
jotka saattavat tuntea kohtuullinen ja saatat tuntea
kuten tämä on tavallaan älykäs.
Olen tavallaan voi lainata ajatus, joka on toimivan hyvin,
lainata uusi idea ja tavallaan yhdistää ne.
Olet tavallaan täysin kukistamiseksi järkeä on käyttää tietokannan
ensinnäkin koska jos yksi arvoista
käyttää se on nopeampi haut koska eri indeksit
ja taulukoita, jotka voivat rakennettava sinulle
Tietokannan moottorin itse.
Nyt, jos haluat etsiä kaikkien kurssien
että Jesse opettaa, nyt sinulla on to do alimerkkijonona vastaavat kaikista
ohjaaja aloilla,
mikä käytännössä tarkoittaa lineaarista haku uudelleen koska olet
löytää tämä mielivaltainen kolme merkkiä tahansa
vuonna ohjaaja alalla edeltää
sisällä ehkä seuraa pilkulla.
Joten tämä varmasti ei lupaa hyvää.
Joten anna minun mennä takaisin pöytään.
Anna minun mennä eteenpäin kursseja, kumoa se.
Aion vain mennä eteenpäin ja pudota tällä alalla.
Ja jos haluat tehdä tämän manuaalisesti,
syntaksi on ALTER TABLE kurssit PUDOTA ohjaaja.
Joten mennään eteenpäin ja sanoa kyllä ​​että.
Ja palata tähän aiemmin ajatusta
jossa minulla on erillinen pöytä ohjaajia.
Mutta nyt tämä tuntuu hieman kuin voin laittaa kurssin
aikana pöytään ja ohjaaja
vuonna opettajan pöytä mutta minä jotenkin on yhdistää kaksi.
Ja miten sinä ehdottavat me sen teemme?
[Inaudible Huom!]
Hyvä. Tehdäänpä että.
Ja tätä voidaan kutsua pöytä teoriassa mitään.
Aion tietoisesti kutsua sitä mitä monet
puitteita olisi kutsuvat sitä, heidän joukossaan,
Laravel kuten näet nyt vähän.
Aion kutsua sitä tietenkin korostaa ohjaaja.
Käyttämällä ainutlaatuinen tässä tapauksessa kunkin sanojen
ja kaikki pienet uudelleen, ja myös -
sitten aakkosjärjestyksessä lajiteltu vasemmalta oikealle.
Tämä on täysin mielivaltainen, vaan se on yleensä yleissopimus
in paljon nämä kehykset PHP muilla kielillä.
Kuinka monta saraketta tarvitsen Tätäkö me kutsumme liittyä pöytä,
yhdistää kaksi muuta taulukoita yhdessä?
Kolme saraketta?
Kumpi - mitä ne olisivat?
[Inaudible Huom!]
OK. Hyvä. Joka toimii.
Ja voisimme teknisesti cut corner täällä, mutta paljon
kehysten erityisesti kuitenkin saisivat nämäkin rivit
yksilöllisiä tunnuksia vaikka semanttisesti rivi
että me oikeasti välitä tai sarakkeet, jotka todella välittävät
noin ovat kaksi viimeksi mainittua mitä sanoitte, kurssin tunnus
ja ohjaaja tunnus.
Joten tehdään tämä.
Soitan tämän rivin vain tunnus, aivan kuten teimme ennen.
Mutta tämä aion soittaa kurssin tunnus.
Tämä yksi aion soita ohjaaja tunnus.
Ja aion määrättävä, että kaikista
niistä ovat allekirjoittamattomia Koska haluan
maksimoida minun 4 miljardia int alue.
Yksikään niistä ei pitäisi olla tyhjä.
Aion täsmentää, että ID pitäisi silti olla ensisijainen.
Ja vielä, tämä on vain yleissopimus,
paljon kehysten vaikka et lajitella
perustaltaan tarvitsevat yksilöllinen tunniste rivin,
se kääntyy pois se on kätevä koodi, SQL että menee
olevan automaattisesti luotu meille.
Joten Jätän sen ensisijaisena.
Mutta nyt, olen sellainen on suunnittelu päätös,
Kurssin tunnus ja ohjaaja tunnus.
Mitä indeksit jos mitään heidän pitäisi saada?
Jos jätän mitään hakemistot, mitä vaikutuksia?
Mikä on seuraus?
Suorituskykyä kuin ennen, eikö?
Jos ei ole indeksi, parasta mitä voi tehdä on eräänlainen
of [äänetön] kautta Koko juttu etsivät numeroita.
Niin että ei tunnu fiksu.
Sen pitäisi olla ensisijainen?
Joten miksi ei?
Miksi ei ensisijainen?
[Inaudible Huom!]
Täydellinen. Joten me toimimme ulos [foneettinen] ensisijainen.
Olemme jo valitsivat sen.
Joten, jos se on ainutlaatuinen?
[Inaudible Huom!]
Hyvä. Joten, jos oletetaan yksi ohjaaja per kurssi,
täysin kunnossa.
Ja se on ehdottomasti yhteinen asia
mutta me jo laittaa pois yksi ehkä tuttu esimerkki.
CS51 sai kaksi ohjaajaa joten olemme eräänlainen
nyt ruuvattu tässä tapauksessa.
Jos emme salli vain yksi ohjaaja,
voisimme itse tehdä tavalla kanssa liittyä pöytä kokonaan,
palata aiemmin lähestymistavan
ja laita ole henkilön nimi ehkä mutta ohjaajan tunnus.
Jos tiedät jokaisen kurssin juuri yksi ohjaaja voit olla juuri
yksi sarake.
Mutta vaihtelu on mikä sai meidät vaikeuksiin.
Selvä.
Joten, jos se on ainutlaatuinen?
No Koko teksti ei tuntuu sovellettavissa.
Kuten olemme sanoneet aiemmin, että on
samankaltaisten alimerkkijono Matching kuvaukset.
Entä indeksi?
No, indeksi on luultavasti meidän paras ehdokas
joka kertoo MySQL optimoida hakuja tästä
tai Selitän, optimoida hakuja tai liittyy
kuten tulemme näkemään vain hetken
niin että he vähän tehokkaampi
kuin mitään puhtaasti lineaarinen.
Haluanko auto kasvattaa tällä alalla?
Joten ei, koska totta emoelementiltä olemassa
kursseille "pöytä.
Siellä se on menossa plus,
plus kun se on todella Lisätään.
Täällä tämä kaikki tulee manuaalisesti lisättävä
meille oletettavasti koodi.
Joten yksinkertaisesti määritellä että sekä tietenkin ID
ja ohjaaja ID on indeksit.
Nyt me menemme eteenpäin ja säästä.
Ja nyt vain näyttää voit kirjeenvaihto
välillä, mitä on kiva GUI käyttöliittymä
ja komentoriviltä.
Anna minun mennä eteenpäin ja tehdä Seuraavat tässä MySQL kuiskata.
Aion sanoa käyttöä courses50
joka on mielivaltainen nimi Annoin tähän tietokantaan.
Ja nyt, en edes muistaa, mitä teimme.
Joten haluan kirjoittaa esittävät taulukoita
ja yleensä puolipisteet on ystäväsi täällä
loppuun kyselyn.
Ja siinä se on.
Joten tässä on rivejä tai pikemminkin taulukot, että meillä on täällä.
Nyt unohdan mitä tietenkin näyttää,
joten anna minun tehdä kuvata kursseja ja nyt näen tavallaan ASCII
tai versio siitä, mitä phpMyAdmin oli tekemässä
ja näen, että tunnus on int.
On, että 10.
Mitä se tarkoittaa?
Tämä tarkoittaa vain sitä, että kun se on näkyy se vie
enintään 10 merkkiä terminaali-ikkuna.
Onko se nullable?
No Tämä on ensisijainen avain.
Se voi olla oletusarvo?
No Ja extra joka on erityinen liput kuten automaattinen lisäys.
Joten haluan vain tehdä pari nopeasti lisäyksiä täällä.
Aion mennä ylös to - haluan vain sanoa.
Vaihdetaan tilasta dia
jos minä tavallaan ennalta valmistautua Tämän.
Tämä tiedote on tiivistelmä sittemmin kaikki kolme näistä taulukoista.
Olen jo vain manuaalisesti kirjoitetaan ensimmäinen komento.
Ja tässä, menin eteenpäin ja kirjoita muut käyttäjät.
Tämä on vain tyylillinen juttu.
Yleensä paljon ihmisiä kirjoita SQL kokonaan isoilla kirjaimilla
ja sitten taulukoiden nimet ja kenttien nimet pienillä kirjaimilla
jos vain koska se sellainen seisoo
mitä sinun terminologiaa ja mitä tietokannan syntaksin.
Joten tässä meillä on kolme taulukoita, kurssit, opettajat,
ja kurssien ohjaajia.
Dia tein aiemmin, Minulla ei ollut ID-kenttä
mutta se ei ole oikeastaan huono asia ollenkaan.
Haluamme vain nähdä kolmas sarake siellä.
Olinko tehnyt sen täällä?
Joten nyt haluaisin ehdottaa, että teemme joukko lisäyksiä.
Joten tässä on joitakin tietoja, Minä zoomata sisään
Joten aion ehdottaa että kursseille,
me vain käsitellä kolme kurssia.
Ja päätin nämä kolme Koska ne ovat edustavia
ja muutamia kivoja - ne ovat muutamia kivoja ominaisuuksia.
CS1, CS50, CS51, ne on yhä tunnukset
mutta mitä ID on mitä ei ole mitään merkitystä.
Se on vain, missä järjestyksessä ne auto lisätty minua.
Entä ohjaajien?
Joten nyt, koska Henry Leitner opettaa sekä CS1 ja CS51,
tämä on tavallaan otollinen vaikutusta meidän suunnittelu.
Ja Jesse opettaa CS51 ja Malan opettaa CS50.
Joten nyt - tai pikemminkin nämä ovat vain ne ihmiset ainutlaatuinen tunnukset.
Ja kursseja ja ohjaajat, - kouluttajat, huomaa täällä.
Tietenkin ID1, joka on CS1 opetetaan
by ohjaaja ID1 kuka on Henry.
Tietenkin ID2, jonka minä ajatella on CS50 opetetaan
by ohjaaja ID2, joka on Malan.
Ja sitten lopuksi, CS51, ja huomaat meillä on kaksi riviä.
Ja nyt tämä on, miksi liittyä taulukko on voimakas opetetaan
Sekä Henry ja Jesse.
Joten tämä kaikki on hienoa ja hyvää,
mutta en voi tuskin Muistan päältä
pääni kuka on kuka täällä.
Kuinka voidaan käsitellä, että koodin,
ilman, että kova koodi asioita?
No, tämä on silloin SQL itse alkaa tulla ystävämme.
Ja aion ehdottaa, että voimme kirjoita seuraava.
Teen tämän milloin vuonna Varsinainen ajallaan.
Anna minun mennä eteenpäin ja aseta näitä asioita.
Joten, osaksi kurssit taulukko Tehdään mitä meillä oli
hetki sitten.
Aion eteenpäin ja sanoa, Katsotaanpa lisätä CS1 ja CS50.
Katsotaanpa lisätä muutama riviä kerralla, CS51.
Nyt haluan mennä eteenpäin ja säästä.
Okei, joten olen vain uudestaan ​​mahdollisimman nopeasti
kuin voin suhteita me vain näki ruudulla.
Ja niin tässä meillä on Leitner, tässä meillä on Malan.
Annetaan itsellemme toinen rivi, ja Tov.
Nyt haluaisin pelastaa tämän.
Ja olen tekemässä niitä tietoisesti osaksi samassa järjestyksessä.
En, unohdin antaa Tämä auto lisäys.
Haluan nopeasti korjata.
Laitan tämän online-koodia.
Että epäonnistuneet syrjään.
Se, että en voinut aseta Leitner ja Malan
ja Tov epäonnistui, koska en Määritä ID-numero, vaikka
se odottaa, ja olen unohdin tarkistaa auto lisäys,
mikä tarkoittaa, että ne olivat kaikki oletusarvoisesti saada nolla.
Mutta sitten on ristiriidassa joka ominaisuus, että olemme määritelty.
Perusavain on rikottu joten se ei edes anna minun tehdä sitä.
Joten haluan korjata.
Nyt haluan palata Lisää-välilehden täällä ja määritä
että haluan Leitner, Malan ja vielä yksi rivi, Tov.
Ja nyt lopuksi vain yksi, joka on hieman vaikea
muistaa on tietenkin ohjaaja.
Katsotaanpa lisätä nyt, että Tietenkin ID1 on ohjaaja ID1
niin se on CS1 ja Henry.
Kurssi ID2 on ohjaaja ID2 joka on CS50 ja Malan.
Ja sitten viimeiset meillä murehtia on tietenkin ID3
joka on CS51, opetetaan
kurssin ohjaaja 1, joka on Henry.
Ja kolme on myös opettanut 3, joka on Tov.
Joten toivottavasti nyt olemme rekonstruoida tämän -
Hitto, tein saman asian.
Kurssin ohjaaja tarvitsee auto lisäys.
Selvä.
Teen tätä nopeammin tällä kertaa, Kurssi 1, Kurssi 1, 2, 2.
Ja nyt lopuksi, teemme CS51 joka on tietenkin ID3 ja Henry.
Ja tietenkin ID3 ja Jesse.
Se näyttää hyvältä.
OK. Joten nyt mennään takaisin terminaalin ikkunaan.
Jos siis kuvailla kurssit näemme tämän.
Jos haluan nähdä kursseja voin nyt tehdä valitsemalla tähden kursseja,
puolipisteen, ja nyt näemme näitä arvoja.
Ja nyt, mitä muuta haluan tehdä?
Valitse tähti ohjaajien, se on kuin odotin,
ja valitse tähden kursseja - Tietenkin alaviiva ohjaaja.
Joten miten voin nyt liittyä Näissä taulukoissa?
Joten kauneus valinneensa ID-arvot tällä tavalla on
että jos ajattelee ottaen kurssin taulukko
ja ohjaaja pöytään ja sitten lisäämällä
välillä näiden kahden oman mielissä kurssin ohjaaja
taulukossa voit sellainen linja Niiden kaikkien ID sarakkeet
niin että voit yhdistää ne yksi massiivinen sarake, jossa on kaikki
tiedot välitämme.
SQL-syntaksi tähän ei ole välttämättä itsestään selvää,
mutta katsotaan jos voimme tehdä sen.
Joten valitse tähden kursseja,
ja siellä on muutama tapa kuin voimme tehdä tämän.
Aion lyödä Enter vain Tällainen muoto asioita hienosti,
mutta että nuoli on vain oire asiakkaan puolella työkalu,
sillä ei ole mitään tehdä SQL itse.
Joten valitse tähden kursseja.
Aion nyt liittyä kurssit taulukko
kurssin ohjaaja pöytä.
Miten? Kentällä kutsutaan courses.id verran kurssi
korostaa ohjaaja dot Mikä nimi
vastaavan alan täällä, että haluan pari.
Se ei ole tunnus.
Se on - mitä, anteeksi?
>> Course ID.
OK, haluan loitontaa.
Mutta en halua ottaa tämä askeleen pidemmälle.
Olen nyt tehnyt tätä pöytä ja tämä yksi.
Nyt haluan vetää tämä kaveri samoin.
Joten, haluan edelleen liittyä tähän koko juttu
on opettajan pöytä on mitä?
Tietenkin alaviiva instructor.instructor id
verran instructors.id.
Joten olisimme voineet kirjallisen Tämän kyselyn muutamia tapoja.
Järjestys, jossa tein tämän ei ole kovin tärkeää.
Olen juuri sellainen teki sen mieleni vasemmalta oikealle.
Olisimme voineet tehdä tämän vuonna muutamalla eri tavalla
mutta jos minulla on nyt puolipisteen ja paina Enter,
varoitusajalla palaan uuden tilapäinen taulukko, tulosjoukon
niin sanotusti tietokannassa puhua.
Ja mitä minulla on Tässä juttu?
Minulla on tunnus, nimi, toinen ID, joka on jotenkin hämmentävää
minulle tällä hetkellä, course ID,
ohjaaja tunnus, tunnus ja nimi.
Niin, lopussa päivä meillä on oikeus tietojen nyt.
Näen, että CS1 opetetaan by Leitner, CS51 opetetaan
by Leitner ja Tov ja CS50 on opettanut Malan.
Mutta olen hieman hermostunut Tämä epäselvyys Olen luonut.
Mikä on epäselvyyttä Olen viittasi?
Yeah?
[Inaudible Huom!]
On kolme ID saraketta.
Voimme siis itse korjata tämän ja aiomme todella menossa
lykätä meidän puitteet lopulta auttaa meitä tässä,
mutta käy ilmi, että on olemassa Hakusanalla SQL nimeltään S,
jossa voit määrittää alias, uusi nimi kenttään
jotta voimme välttää tämän epäselvyyttä kokonaan.
Mutta tajusi, että jos emme käsitellä sitä jotenkin kuin
että avainsanan tai puitteet,
siellä on mahdollisesti tämän epäselvyyttä, jos yrität
käyttää ID-kenttä koska selvästi on olemassa niitä
kanssa päällekkäisiä nimiä siellä.
Joten tämä on liittyä ja luulen sielusi silmin paras tapa
ajatella sitä todella on ottaa kaksi pöytää,
linja niitä ylös haluamallasi tavalla.
Ja tämä on niin kutsuttu sisäliitosta siinä mielessä
että olemme yhdistäminen taulukot tässä.
On olemassa muita liittyy, että voisimme kohdata
ajan mittaan, kuten ulkoliitoksissa,
mutta suurimmaksi osaksi tämä on todennäköisesti yleisin
rekonstruointimenetelmiä tietoja.
Mitä olemme tehneet nyt yleensä mitä kutsutaan
normalisoi tietosi, jotta ei ole päällekkäisyyksiä missään
taulukoiden.
Ja päällekkäisyyksiä, olisin tarkoittanut, että ensimmäinen lähestymistapa.
Jos olisimme mainittu Leitner ja Tov useassa paikassa
tietokannan, joka ei ole yleensä paras päätös
varsinkin jos niiden nimi olisi muuttaa ylitöitä tai, jos
avioliiton, tyttönimi voimin muuttaa itse haluat vain yhden
kanoninen paikka joidenkin data-arvo kuin nimi.
Selvä.
Joten, kertaus, meillä on ollut Muutaman suunnittelu päätöksiä tehdä
ja tärkeimmät vähentävät todennäköisesti jossain
näistä valinnoista indeksien.
Mutta haluaisin huomauttaa yhden asian samoin.
Jos menen takaisin phpMyAdmin,
yksi piirre et ehkä ovat kohdanneet ennen on
seuraavat.
Jos menen kurssin ohjaaja, Olen jo tehnyt täsmentää, että eräät
nämä asiat ovat indeksit.
Mutta anna minun mennä rakennetta välilehdellä kurssin ohjaaja.
Saanen klikkaa nyt hakemistot ja huomaa seuraavat.
Olen tässä määritetty, että on perusavain
pylvääseen kutsutaan tunnus.
Tämä on hieman monimutkainen tapa täsmennetään mahtavuus
ja niin edelleen viittaavan kentän koko tavuina.
Mutta nyt minulla on myös toinen kenttä, course ID, joka on -
course ID joka tehdään etukäteen ja ainutlaatuinen, OK.
Tein tämän yhden etukäteen meille.
Joten, miksi tämä - haluan pudota Tämän vuoksi keskustelun.
Tiedät, mitä tein?
OK. Niin, aikaisemmin, yksi vaarojen käyttäminen GUI työkalu
kuten tämä, kun olimme luomassa liittyä pöytä,
kurssin ohjaaja pöytä, Muistatte, että määritetty
että haluan indeksi tällä alalla
ja indeksin tästä muulla alalla.
Sivuvaikutus tarkkailun nämä molemmat laatikot
samalla näytöllä on, että phpMyAdmin päätellä, että
että haluan ole kahta erilliset hakemistot,
että haluan liittyä indeksi, joka on yleensä vain hyödyllistä
tai eniten hyötyä, kun olet hakuja ei yksi kenttä
mutta nämä molemmat kentät.
Ja siksi meillä oli niitä yhdistävän siellä
joten pudotin se syy, joka ei ollut mitä halusin.
Pikemminkin olen menossa redo tätä täällä.
Aion mennä kurssin tunnus
ja alle enemmän olen vain aikoo sanoa lisätä indeksiin.
Ja aion mennä mukaan ohjaaja tunnus ja sano lisätä indeksin.
Ja nyt jos me klikkaa tästä, varoitusajalla meillä on kolme hakemistot,
yksi ensisijainen ja minä jotka on tarkoitettu yksi kutakin
niiden ulkomaisten avaimet.
Ja pyydän sitä ulko koska Tietenkin ID tässä taulukossa kartat
johon kentän, vain olla tyhjentää, toisessa taulukossa.
Perusavain nimeltään ID, taulukossa nimeltään kursseja,
ja sama juttu toinen.
Mutta nyt on mielenkiintoinen huijata ja todella tekniikkaa.
Menin vain eteenpäin ja haluan tehdä hieman hitaammin.
Samassa näytössä, huomautus sanotaan Relaationäkymä täällä.
Olen napsauta tätä ja nyt huomaan saavat tehdä muutamia rajoituksia.
Niin, yksi upsides myös
paitsi käyttäen käsitteellisesti viiteavaimia ja muiden taulukoiden
kuten olemme juuri on että määrittämällä indeksin
niitä voi olla tietokanta auttaa vielä enemmän
eheyden varmistamiseksi tuota kenttää.
Erityisesti voin nyt määrittää tätä kautta lasku
säädetään, että kurssin ID-kenttä
tässä taulukossa tosiasiallisesti Mapsin courses.id.
Samoin ohjaaja alaviiva ID kartoitettu instructors.id.
Nyt, miksi tämä hyödyllinen?
No, huomaa, oikealla puolella, mikä näyttää nyt.
Voin nyt opettaa tietokanta, jos Henry
esimerkiksi koskaan eläkkeelle ja hänen rivi katoaa
alkaen opettajan pöytä yhteensä ollen siten
poistettu, voin tätä kautta CSS lähestymistavan varmistamiseksi
että kaikki kurssit hän opettaa ovat enää hänen kanssaan.
Voin opettaa tietokanta poistaa rivejä
Tämän ns liittyä taulukko automaattisesti, jos Henry tai jos jompikumpi
hänen kursseja katoaa.
Nyt, miksi tämä pakottavia?
Yeah?
[Inaudible Huom!]
Sinun tarvitsee vain tehdä sen kerran ja pitkällä aikavälillä, eikö?
Se on erittäin helppoa, jos sellainen ihmiset tulevat ja menevät, kurssit tulevat
ja mene, sinun tietokannan kanssa vain saada täynnä kursseja
ja tiedekunnan jotka eivät ole enää merkitystä tietojen käyttöä.
Ja tietosi alkaa saada hyvin sotkuinen ja likainen ja tunkkainen,
ja joten tässä voimme lajitella
of toimeen osa nämä rajoitteet.
Yeah?
[Inaudible Huom!]
Se tietää Poiketen tämän.
Tämä on näytön, jossa olemme täsmennetään sidos
välillä viiteavain ja perusavain.
Joten kaikki nimeäminen yleissopimusten viittasin
aiemmin ovat vain sopimuksia.
Ei ole luontaista merkitystä.
Tämä on näytön joka on vain hyödyllinen
kun olet määrittänyt indeksejä kukin näillä aloilla kuten teimme.
Ja tästä pudotusvalikosta meillä muutamia asioita esimerkiksi
jos kurssi on poistettu voit tosiasiallisesti estää, että poistetaan
tapahtumasta jos on rivi tässä taulukossa
vain sanomalla, rajoittaa.
Toisin sanoen Henry ei voi jäädä eläkkeelle
kunnes erottaa hänet alkaen CS51 ja CS1.
Niin se on hyvä asia.
Mutta se voi laukaista virheitä koodissa
jos et ennakoida, että tai voimme olla putouksen
Cascade samanlainen like css
ja CSS putous tarkoittaa, että jos -
jos Henry eläkkeelle niin - saamalla poistettu
niin tulee hänen rivi täällä saa poistaa.
Mitään toimia ei tarkoita mitään tai null on tavallaan hyödyllinen, jos sellainen
ja haluavat joitakin historiallisia ennätys Henry ottaa opetti CS51,
mutta haluat vain, että kentän olla tyhjä, jotta rivit siellä
mutta se ei ole enää hänen kanssaan.
Joten nämä ovat hyvin voimakkaita tekniikoita, joita voit
ja pitäisi käyttää vaikka Korkojen erityisesti
säästää sinut itsesi.
Joten haluan tehdä maininta pari viimeisiä yksityiskohtia täällä,
ainesosia, joiden kanssa että voisi olla hyödyllistä
kun suunnittelemme tietokannan suunnitteluun.
Voit myös valita yli tietokanta moottori
että käytät koodissa.
Jos olet perehtynyt ja CS161 saatat -
tai jopa 61, saatat yleensä tunnettava tiedostojärjestelmää.
Ja siellä on asioita kuten, NTFS ja HFS +
ja X2FS4 [foneettisia] ja 3 ja niin edelleen.
On erilaisia ​​tapoja tallentaa tietoja desk.
Samoin on olemassa eri tavoin datan tallentamiseksi
tietokantaan oletuksena ainakin Appliance
uusimman version MySQL.
Olemme käyttäneet tietokanta moottori nimeltään, NoDB,
joka tukee muutamia kivoja ominaisuuksia.
Mutta toinen yleisin on myös nimeltään MyISAM ja vielä toinen
, jota voidaan käyttää on muisti, mikä tarkoittaa, älä laita mitään
levyllä, vain pitää asioita muistiin.
Suurimmaksi osaksi luultavasti ei mennä vikaan lähtemässä
kanssa NoDB, mutta hankkeita että tapana ottaa korkea
lisäysvaimennuksen esimerkiksi kuin paljon nopeaa puunkorjuu,
satoja asioita sekunnissa tai tuhansia asioita.
Aina kun on paljon tavaraa menee
on tietokannassa niin tämä erilaista
alemman tason päätöksiä alkaa päästä mukaan.
Koko teksti ominaisuus Esimerkiksi toimii vain MyISAM
niin että on vaikutuksia.
Mutta ehkä muistatte tämän, nyt ainakin motivoida miksi me välitämme
noin NoDB erityisesti.
Kilpailutilanteita viittaa yleensä mitä?
Okei, tämä on vihjaus esimerkiksi jotkin
teistä ehkä kuulleet takavuosina onko 161 tai 50
jos sinulla on kämppäkaveri, molemmat todella pidät maitoa,
teistä tulee kotiin ensin avautuu jääkaappi ei ole maitoa,
Sulje jääkaappi kävellä koko katuja CVS ja saada
rivi ostaa maitoa.
Samaan aikaan, kämppäkaveri tulee takaisin tänne.
Hän tykkää myös maitoa.
Avaa jääkaappi ja tajuaa maidoton.
Tässä hän sitten menee tallentaa, ehkä muut CVS.
Nopeasti eteenpäin muutaman minuutin myöhemmin tulet takaisin ja nyt molemmat
teistä ostanut maitoa.
Yksi niistä on nyt menossa pilata koska et
kuten maito, että paljon ja Tämä on ongelma, eikö?
Koska molemmat teistä tarkastettu valtion joidenkin muuttujan
ja teki päätöksen perustuvan sitä vaikka valtio
Kyseisen muuttuja oli lähinnä prosessissa muuttuessa
kaikki se hitaasti aikaa kuluu
päästä ja CVS.
Joten mikä on tavallaan tyhmä real maailman ratkaisu tähän ongelmaan?
Jätä viesti, eikö?
Se tapahtui viime kerralla.
Aina jättää huomautuksen tai Lukko asia kirjaimellisesti.
Ja sanon riippulukko, koska jos olet ottanut tai otti CS161,
lukitus on perustavanlaatuinen ajatus tuollaisessa maailmassa.
Joten kilpailutilanteita voi syntyä myös tietokantaan maailmassa
ja saatatte muistaa ehkä alkaen CS50 rahoittaa jos olet ottanut 50,
Tämän koodin että me todella antoi te selityksessä
tuolloin niin, että toiminta on ns atomi.
Jos halusi, tässä tapauksessa ostaa osuuden varastossa
ja että varastossa on joitakin erityisesti symboli.
Kerroimme voit käyttää koodia Tämän vuoksi käsiteltävänä olevalla
päällekkäistä avaimen päivitys syntaksin, joka on rakennettu
MySQL olet tehokkaasti tekee joko insert
tai päivityksen jälkeen tekee Valitse nähdä
Jos kanta on jo siellä.
Toisin sanoen analogi maailma ostaa varastossa
Maidon ja jääkaappi saattaa olla ensimmäinen,
ennen ostamista osuus Google kannattaa valita
tietokannasta kaikkien osakkeet Google että David omistaa
nähdä, jos hän omistaa nolla tai enemmän.
Kun näet, jos hän omistaa nolla tai enemmän sinulla on
niin tee seuraavaa.
Sinulla on ehkä tehdä insertin
jos hän omistaa nolla koska ei ole rivi David vielä,
tai sinun täytyy tehdä päivityksen jos ainakin teoriassa haluat
on yksi rivi per käyttäjä.
Ongelma on valitsemalla että osakkeiden lukumäärä
ja sitten päivittää tai asettaminen voi keskeytyä
joku muu toiseen tietokoneen terminaali yrittää ostaa
tai myydä joitakin Daavidin osakkeiden kantojen onko
hyvään tarkoitukseen tai lajitella ilkeä tarkoituksiin.
Se on kuin menee kauppaan kun kämppäkaveri saa takaisin
ja tarkistaa valtion muuttujan.
Joten tämä syntaksin aikaan joka oli tavallaan asianmukaisia
varten CS50, vältetään se, että ongelma kokonaan.
Ja se vain tekee kaiken tämän taika lukitus sinulle,
mutta nyt tällaisia Hankkeiden Kurssin
joka mitä todennäköisimmin liittyvät monimutkaisemmat aineistoja,
et voi saavuttaa aina tämän atomisuuden.
Kaikki tapahtuu kerralla tai ei ollenkaan
keskeytyksettä niin tyylikkäästi.
Ja niin MySQL, toinen tietokanta moottori,
tukea asioita kutsutaan lukot,
jolloin voit sanoa lukko tämän pöydälle niin, että vain yksi herkkupala
ja yleensä vain yksi käyttäjä voi kosketa sitä missään vaiheessa
lukea tai kirjoittaa ja Sitten voit avata sen.
Tämä on esimerkki yhdestä MySQL: n omien viitteet,
jos jos sinulla on kuin pankki huomioon, että yrität
vähentää rahaa ja sitten lisätä rahaa.
Haluat ehkä Varmista, että molemmat
niitä asioita tapahtuu yhdessä
niin että ei ole matemaattisia virheitä
eikä kukaan tappiot rahaa, jotenkin.
Ongelma lukot vaikka tietokanta on
että se yleensä tarkoittaa, koko taulukko on lukittu,
eli jos sinulla on sata ihmistä yrittää
tehdä liiketoimintaa pankkisi verkossa samaan määrään
aikaa vain yhden ne voi mennä kerrallaan.
Joka on tyhmä, varsinkin palvelimilla nykyään
että on kahdeksan tietenkin 16 Tietenkin on valtava määrä
muistia, ei ole syytä sarjoitettava kaikki
teidän liiketoimia, jos nämä asiakkaat ovat vain menossa
vuorovaikutuksessa omia rivejä.
Joten NoDB voit tehdä asioita enemmän älykkäitä
ja tämä yleensä on lähestymistapa otat koodin,
käytät jotain nimeltään liiketoimi.
Ja voit tehdä tämän yleensä PHP-koodin,
Ruby koodia, Python riippumatta.
Mutta SQL-koodin, joka on lopulta käytetty on tämä,
tyypillisesti.
Aloita liiketoimen sinun määritellä kaksi tai useampia kyselyitä
että haluat suorittaa kokonaan
keskeytyksettä tai ei ollenkaan.
Siellä voi jopa olla valitse lausunnot
tai jotkut Poistaa tai päivityksiä.
Mutta mukavaa on, että Tietokannasta tulee fiksu
varmista, että se vain Lukitse rivit he todella
mukana tässä päivitykset tai valitsee tai poistoja.
Joten jos sinulla tuhansia rivejä ja olet vain koskettaa kolme
heistä vain osajoukkoa taulukon lukitaan
mikä tarkoittaa niitä muita 99 asiakkaat voivat koskettaa heidän rivejä
ilman sarjoittaa ja hidastivat sinua.
Samalla tämä on mukavin näkökohta liiketoimiin.
Ne ovat liiketoimia aistia kuin 161 tiedostojärjestelmä,
he kaupallisen
eli voit kääriä ne takaisin, voit kumota ne.
Tämä on kuin komento tai valvoa F tietokantoja.
Jos huomaat osa läpi kaikki
oman eri dataoperaation, ampua, jotain on pielessä.
Olet kirjaimellisesti toteuttaa eri SQL-kysely Roll Back
ja kaikki nämä trendi - kaikki lausunnoista sinua teloitettiin
jälkeen sanomalla alku Kaupan katoavat
ikään kuin he koskaan tapahtunut,
joka on hämmästyttävän voimakas asia.
Ja nämä ovat erilaisia asiat varmasti 50 me tavallaan
ja lakaista maton alle ja juuri sellainen olettaa
että kaikki on hyvin.
Mutta kun alkaa ajatellut konkreettisista hankkeista
ja todellisia käyttäjiä ja eheyden tietokannan,
Nämä ovat erilaisia suunnittelun päätöksiä
että tulevat olemaan tärkeitä.