>> Olgu.
Niisiis, ilma pikema jututa, SQL, Structured Query Language.
Niisiis, te ilmselt kasutada seda ajal vähemalt CS50, võibolla CS165,
võibolla oma isiklikke projekte.
Ja mida see SQL lase sul, aastal SQL Server üldisemalt?
Jah?
[Kuuldamatu Märkus]
OK, see oli väga turvatud viis öelda seda.
Jah. Nii võimaldab see salvestada andmeid
ja mis veelgi olulisem võimaldab teil päringu andmed.
Ja see on samm edasi
kasutada midagi lihtsam nagu CSV, eks.
Komadega eraldatud muutujad.
Sarnased väärtused.
Samuti saate salvestada andmed ühte ritta
tekstifaili.
Aga mis on negatiivsed CSV-faili salvestamiseks oma andmeid,
kuigi te tegelikult saada read ja veerud on?
Jah.
>> You "ei ole Sama organisatsioon
tõhusust [kuuldamatu].
>> Sul ei ole sama organisatsiooni efektiivsust.
Mida sa silmas pead?
>> Noh, nagu [kuuldamatu] on nagu esmane [kuuldamatu].
>> OK. Jah.
>> See on relatsiooniline andmebaas sul võib olla mitu andmebaasid
üksteisega seotud väga spetsiifilisel moel.
>> OK. Väga hea.
>> See on [kuuldamatu] määrata CSV.
>> Ja las ma näpistama pisut terminoloogiat.
Nii mitu tabelit jooksul andmebaasi, muidugi,
ja mis läheb kaugemale saab teha ainult ühe CSV.
Aga tegelikult piirang CSV ma väidan on
et ebaefektiivsus kõik.
See on väga lihtne skeem.
Aga kui sa tahad teha päringu, mis jookseb aeg
tahes valikpäringult on CSV faili?
Ma mõtlen see on suur vana [kuuldamatu] õige, sest halvimal juhul
nad tõusis väga põhjas.
Isegi kui sa olid järjestatud kogu CSV-faili, kui sa ei tea,
et algul, hästi, sa ikka lähed on
otsida kogu asi.
Niisiis, ühed asjad me saada
kasutamast tegelikku andmebaasis keel
nagu SQL saame päring ja me ei saa ette
kui andmebaasi disainerid täpsustada, millised on valdkonnad,
mis tõenäoliselt saab olema küsimusi, et inimesed
MySQL või Microsofti või Oracle,
kes on teinud andmebaas te kasutate saab teha kõiki
on raske töö figuring, OK,
arvestades miljonit neist IDS.
Kuidas me saame paigutus - neid mälestuseks?
Mingi puu struktureerida ehk
nii et kui sa seda teed tegelikult ellu Select,
see on midagi, mis on logaritmiline või logaritmiline
on logaritmiline ajas pigem kui tegelikult lasuvad
millekski lineaarne.
Nii et meil on palju tulemuslikkust nii.
Ja meil on võimalik salvestada ka palju rohkem andmed kergemini sest SQL
Server on tavaliselt salvestatud RAM kuigi osad
see võib olla salvestatud ketta ja te ilmselt teate, mida nüüd
et RAM on üldiselt kiiremini kui ketaste
nii et see on hea asi.
Ja me saame ka hakkama kokkulangevus palju parem.
Kui olete võtnud 165 või 161, sa tead, et kui kaks inimest proovida
teha sama asi korraga on süsteem,
halbu asju saab tavaliselt juhtub.
Nii hulgas muid funktsioone me võib saada, kui me projekteerimise meie toidulaual
õige tee on paremat tuge ja turvalisust
kui tegemist on kokkulangevus.
Niisiis, kaks inimest kahes osas
maailma kasutades sama veebilehel, kui nad mõlemad proovida
osta midagi samal aega, et selleks ei lähe
minna üheaegselt.
Kuidagi nad oleksid serialiseerida keegi muu kui meie oma -
keegi muu kui ise.
Andmebaas tee seda meie eest.
Nii et kui see on lihtsaim vorm,
SQL võimaldab meile päringu relatsiooniline andmebaas.
Relatsiooniline andmebaas on üks, mis on üks
või rohkem tabelite see tavaliselt.
Ja kui see on veidi harjumatu,
saab tõesti lihtsalt arvan Selle Exceli või numbrid
või Google tabeleid.
See lihtsalt on read ja veerud ja tavaliselt ülaosas iga
need read on nimi.
Nii et see võib olla ID veeru nimi veeru
aadress kolonni ja nii edasi.
Ja siis võib olla mitu sellised tabelid, kui soovite
alustada, millega nähakse ette erinevaid andmeid.
Aga sa võib-olla mäletate vähemalt alates CS50 et püüdsime
teile GUI-põhine tööriist [kuuldamatu]
hallata oma andmebaasi.
Seda nimetati phpMyAdmin.
Nii et see on lihtsalt kokkusattumus, et oli kirjutatud PHP, tegelikult,
aga see oli lihtsalt veebipõhine esiotsa andmebaasi.
Ja läbi erinevate tabs ja sidemeid, võiks te hakkate
seadistada andmebaas ise.
Aga hea vahend, et alustada natuke mugavam
kus on samuti käsurea klient.
Seega, kui kasutate CS50 Appliance või tegelikult, kasutades mis tahes makro PC
mis on käsurea MySQL klient, võite seda teha ka sort
vana kooli niimoodi.
Nagu kõrvale MySQL projekti vähemalt avatud lähtekoodiga versioon
see on nüüd nimega MariaDB eest erinevatel põhjustel saab lugeda
üles Wikipedia kuid see on sama tarkvara,
see on sama süntaks ja nii edasi,
päris palju sama koodiga baasi.
Ja kui ma olen selles küsib saan nüüd suhelda
minu andmebaas palju käsitsi.
Nii asjas Lubage mul minna
ja lihtsalt avada terminali aknas.
Sattusin kasutades CS50 Seadme kuid võite seda teha
kõige tahes süsteemi mis sul on õigus
tarkvara.
Ja ma teen MySQL-u Kasutajanime John Harvard
selle konkreetse süsteemi,-p parooli, et ma kirjuta
aastal veidi Turvaliseks lööb Enter.
Nüüd ma olen küsitakse.
Ma lähen kirjuta karmiinpunane aastal CS50 Appliance
ja nüüd ma näen, põhiliselt et samal ekraanil.
Aga seal on käsud nüüd et saame alustada kirjutades
nagu näitavad andmebaaside ja mis toimub, et näidata mulle kõik
andmebaaside, et mul on juba loodud süsteemi,
üsna sama nimekiri sa näeksid phpMyAdmin.
Seal on paar teised, nagu teave skeemi ja test,
mis siis, kui sa tuhnima CS50 Appliance me peita mõned
Nende madalama tabelid
kuid nad on olnud kogu selle aja seal.
MySQL on tegelikult madal omadused nagu kasutajanimed
ja paroolid andmebaasist Iseenesest ei ole oma taotluse
et sa võiksid olla töötab selle peal.
Nii ette, täna ma loodud paar andmebaasid
millest üks on nn courses50.
Koefitsiendid on mõned teist on kasutanud CS50 muidugi shopping tööriista
mis on suur liides registripidaja muidugi kataloogi.
Ja see on tegelikult tore andmekogumi rääkida, sest,
üks, me oleme omamoodi kõik ilmselt tuttav kursused
ja instruktorite ja koosolekul asukohad ja kõik omamoodi
Tavaliste asjad ülikoolide,
aga see sai ka mõned huvitavaid võimalusi
projekteerimiseks.
Nii me arvasime me tahaks kasutada mõiste muidugi kataloogi
ja shopping tööriista Näiteks kogu täna sorteerima
raami mõned disaini otsuseid peame tegema.
Alustame siis.
Oletame, et ma tegelikult ei tahtnud esindada super lihtsaim
muidugi shopping tööriistu.
Ja lihtsaim maailma Ma kujutan ette, ja üks on
kus on kursused ja seal on õpetajad.
Ja oletame, et huvides arutelu
et iga kursus on vähemalt nimi.
Niisiis olgem hakata joonistada seda.
Ma lähen kasutada phpMyAdmin nagu mugavus,
nii et me ei pea sisestama välja kõik päringut käsitsi.
Aga siin ma olen oma courses50 andmebaasis.
Kui võõras seda, siis see väga lihtne, kui sa sukelduda
sisse oma projekti Kui soovite seda kasutada.
Ma lähen, et luua tabel nimega Kursused
ja ma ei mõtle ainult Ühe valdkonna
nüüd nime muidugi.
Ma lähen edasi minna ja ütleme anna mulle üks veerg.
Nüüd, nagu te mäletate saad liides, mis on veidi
niimoodi.
Ja teine ​​teistpidi öeldes phpmyadmin on, et see sort
ise juhendamine ja via rippmenüüst saate sortida
on näha, mida teie võimalik disaini otsuseid.
Nii et ma annan iga kursuse nimi.
See nimi on selles veerus.
Ja kuidas selle andmetüübi?
Enamik Te peaksite teadma Vähemalt mõned neist andmetüübid
varasematest kogemustest.
Mis on asjakohane kursuse nimi on?
Sharon?
>> Varchar.
>> OK, varchar mis on muutuv Char.
Ja mida see tähendab tehniliselt?
[Kuuldamatu Märkus]
OK. Nii et see on string.
Ja var aspekt see tähendab mida?
Muutuv. Aga mis Mis see tähendab?
Jah?
[Kuuldamatu Märkus]
Täpselt. Nii et see on muutuv märkide arv
string up mõned maksimaalne.
Nii et siin on meie esimene disain otsus.
Me tegelikult on otsustada kui palju baite maksimaalselt
eraldada iga selline string.
Üldiselt soovite justkui ei oleks liiga väike,
ei oleks liiga suur Sest selge
kui liiga väike oled lihtsalt hakkan ürita andmed
ja sa kaotad teavet.
Ja kui see on liiga suur, sa oled lihtsalt omamoodi räägib andmebaas
eeldada ja optimeerida rohkem andmeid
kui see võiks tegelikult kunagi.
Mis on mõistlik tunne number nime kursuse?
60? OK, nii et 60.
See tundub päris mõistlik
kui pikk on seal ei ole erandid sellest.
Seal tõesti ei ole raske, kiire reegel.
Kui aus olla, sest Ajaloolistel põhjustel palju
inimesed valida 255 Sest juba aastaid, et oli omamoodi
vaikimisi maksimaalne kasutamine 8 bytes - 8 bitti oma counter.
Ma rohkem [kuuldamatu] võib kasutada volitusi 2
aga see on omamoodi asjakohatu.
Nii saame minna 60.
See tundub mõistlik nii kaua
kui me lõpuks ei kahetse Sest see on ülemine piir.
Nüüd oletame, et vastupidi otsus oli tehtud,
mitte muutuja tähemärki kuid ainult char valdkonnas.
Seega erinevalt C-ja C + +, char ei tähenda, üks tähemärk
ja andmebaasid Üldiselt tähendab see fikseeritud arvu
märkide jada.
Milline oleks tagurpidi ja / või Negatiivne külg on minu valida 60
jaoks char valdkonnas asemel varchar?
See on täpselt, esimest liiki Otsuse pead tegema
kui kontrollite [foneetiliste] välja Projekti oma partneritega.
Jah, Sharon uuesti.
[Kuuldamatu Märkus]
Väga hea. Nii et kui nimi on vähem
kui 60, siis sa raiskad mis iganes see delta on
60. tegelik pikkus.
Nii et lihtsalt tundub raiskamine, rohkem baite kui vajate.
Aga miks see on olemas?
Kindlasti on olemas mõned positiivsed.
Jah?
[Kuuldamatu Märkus]
Muidugi. Nii et mõnikord sa võiksid teada valiknumber
märke, nagu 10-kohaline telefoninumbri näiteks.
Aga keda huvitab, nagu miks mitte lihtsalt öelda, 11 anyway
või miks mitte öelda 60 niikuinii varchar?
Mis kasu me saame teades ja projekteerimine
kindlaksmääratud arvu märke?
[Kuuldamatu Märkus]
Sa oled õigel teel.
Nii et see on optimeerimise kuid see on tõesti kohta - jah?
[Kuuldamatu Märkus]
OK. Väga hea. Olgem keskenduda selle viimase osa.
Nii indekseerimist.
Nii selgub, kui te ette teada, et kõik
Teie väljad lähed kuni 60 tähemärki,
saab tõesti arvad sellest veerus Exceli andmebaas
kellel väga sirge, joondatud vasakule
ja paremale joondatud servad
sest iga veeru on 60 tähemärki laiad.
See tähendab, et see string on 60 tähemärki ära
selle string, 60 tähemärki eemal see üks
ja see üks ja see üks.
Nii lihtsalt meeldib tagasi, kui õppinud C, siis tuli ligi pääsema
maailma massiivid Sama mõte siin.
Kui teie veerg esindab kasutades ainult fikseeritud pikkusega tähemärki,
saate tõhusalt indeks juhuslikult 60 või 120 või 180
ja saad at üksikult stringid palju kiiremini.
Siis, kui selle asemel, oma veeru oli sirge vasaku serva niiöelda
kuid väga karm õigus serva veerg
sest te võite on 10 tähemärki,
15 märki, 5 tähemärki.
Nii et see on ka kompromiss.
Ja mõnikord ainult katse-eksituse teel
ja katsetamist Kas te saate aru
, mis tegelikult õige kõne on, kuid need on igasuguseid
küsimusi, mis peaks minema
läbi oma mõtetes ja / või tabelid, kui on aeg
kujundada oma andmebaasi.
Niisiis, ei pruugi õige vastata, kuid peaksite
vähemalt mõned lause või kaks meeles
backup tahes otsuse teete.
Hea küll.
Jätame kerimine aastal viipasid siin
mis on phpMyAdmin UI.
Niisiis, vaikeväärtus nimi, ma pean täpsustama
et see peaks olema olema Vaikimisi väärtus null?
Mis sa arvad?
Kas kursus on null nimi?
Lihtsalt tundub imelik, kas pole?
Ma ei suuda välja mõelda ühtegi nimetu kursused Harvardi.
Ja võib-olla on olemas mõned varjavad nurgas puhul
kui kursus on antud number
ja professor ei ole valitud nime, kuid -
Ma mõtlen, et kuradit, et
nagu ärme isegi vaeva toetades seda.
Ütleksin huvides kena puhas andmebaasi
olgem täpsustada, et sa ei saa on default väärtus null.
Teise saaksime teha midagi untitled kursus
mis ei ole erinevalt Mac OS ja Windows tegema
kui loote kausta näiteks
kuid mis teeb natuke rohkem mõtet
nii et inimene midagi näha.
Me räägime back-end andmebaasi eeldatavasti
kursuse kataloogi.
Nii et ma tõesti ei isegi nagu mõte anda see
aastal untitled muidugi nimed
sest see ei ole tõesti aita kedagi.
Niisiis jätame seda ei ole, mis tähendab, et kui sisestate
sellesse andmebaasi, on teil anda iga kursuse nimi
mis tundub natuke puhastaja mulle.
Hea küll.
Nii kerimine edasi, võrdlemisele.
See lihtsalt on pistmist märgistikku ja puha
kui sa oled kunagi näinud mainib Rootsi
phpMyAdmin see Sest inimesed
kes kirjutas phpMyAdmin oli Rootsi.
Kas see on PHP või on see MySQL?
Üks kahest, I unustasin pikema jututa.
Aga see on ajaloolistel põhjustel
kuid võite avaldada iga märgi English
et sa saaksid koos Rootsi nii et see on suures osas mitte-küsimus.
CS50 Appliance, kuigi on kasutatud - konfigureeritud kasutama UTF-8,
nii et üldiselt peaks ei pop up teile.
Näitajad.
Niisiis ei ole ükski neist ei tegelikult siin asjakohane.
Näen Binary allkirjastamata Allkirjastamata zerofill,
ja uuendatud praegune timestamp.
Selles valdkonnas kohaldatakse ainult mõned arvväljad
või mõne aja valdkondades.
Nii me vahele jätta et täielikult.
Null. Kas selles valdkonnas on null?
Seega ei ole. Meil on juba seda sorti vestlust.
Nii et me ei taha vaikeväärtus.
Me ei taha, et see oleks null.
Aga indeks?
Seal on neli valikut siin.
Mida see tähendab, kui me täpsustada
et see rida läheb olema primaarse võtme?
Mõeldes tagasi CS50 või CS165 kui olete teinud seda.
[Kuuldamatu Märkus]
Täpselt. Nii primaarvõti definitsiooni järgi on vallas
mis identifitseerib iga rida tabelis.
Ja saab tugineda teha et kordumatu identifitseerimisnumber.
Niisiis, mida see tähendab siis lihtsalt olla unikaalne?
Noh, sort neist kahest on sort
alla tagajärjed all kapuuts.
Aga üldiselt, primaarvõti on omamoodi leping teete
andmebaasi asi.
Kui ma päringut otsin loomulikult
Ma lähen, et kasutada seda valdkonnas.
Ja me tuleme tagasi miks meil oleks kaks
Selliste valikute siin primaarsed või unikaalsed.
Erinevaid lihtsalt ütleb seda valdkonnas saab olema unikaalne
aga ma ei tõesti tegemist selline suuline kohustus siin
kasutada selles valdkonnas teha minu otsingud
põhjustel meiepoolsete vaata vaid hetk.
Kui me täpsustada asemel indeks Mida see tähendab, et täpsustada
et vallas on indeks selle kohta?
Jah?
[Kuuldamatu Märkus]
Täpselt. See on olnud optimeeritud päringule.
Nii et sa - andmebaasi server, Oracle, MySQL, mis iganes,
tavaliselt töötavad oma võlu kulisside taga, kui klõpsate
et valik ja seejärel klõpsake Salvesta ja siis ehitada
üles tavaliselt puu struktuuri, B-puid, kui olete näinud
või kuulnud off, mis on väga lühike välimusega puu
mis annab sulle väga kena logaritmiline omadused
otsides andmeid.
Kui te ei täpsusta indeks põllul, mis toimub
olla töötab aeg otsida
suvalise [Foneetiliste] muidugi nimi?
Mis see on?
[Kuuldamatu Märkus]
Oh, [kuuldamatu] lineaarne, eks?
Kui see pole optimeerimisest pakutava andmebaas
ja sa ei ole mõelnud andmebaas, millist
Andmete oodata.
Parim, mida saate teha, on kontrollida kõik, kui otsite
mingi väärtuse, eriti kui sellega võib
tegelikult duplikaadid.
Full-text vahepeal me tulen laine oma käsi nüüd.
Kuid üldiselt on see tüüpi indeks, mis võimaldab teil
optimeerida märksõna otsinguid valdkonnas.
Nii et see võib olla hea kandidaat
jaoks nagu õppekorraldus kus peate võib-olla paar
lõigete ja te võite tahan teha substring vastet.
Full-text üldjuhul lasta sa seda üsna tõhusalt.
AI, see on kohutav sort Selgituseks, kuid kui me tiirutama
üle näete Auto Kasvamine.
Ei ole kohaldatav nii siin kuid auto juurdekasv on kasulik
jaoks nagu int põld sest andmebaasis hoolitseb
ning protsessi pluss plusing iga kord, kui te ei sisesta.
Nii et isegi kui kaks inimest sõna-sõnalt käsku Avalda
samal ajal ja proovige luua rida kuidagi
andmebaasi, üks neid saab number I,
teine ​​saab number I plus 1.
Sa ei pea muretsema,
umbes kaks numbrit on määratud samamoodi, kui sa olid
seda teha ise koodi.
Hea küll.
Nii meeldib mulle, kus meil nimi olema.
Teeme nuppu Salvesta.
Kas see on hea disain jaoks andmebaasi tabeli?
Ja kõrvale kui roostes SQL või sortimisel
vaid alati pigistama silmaga, mis toimub,
Ma oleks võinud kirjutada täpselt, et -
need kolm rida sel must ja valge kiire
Käsureal klient või ma oleks võinud teha
et kood programmiliselt.
Nii et kõik phpMyAdmin heaks teeb mul on lihtsalt säästa mind pingutust
mäleta mõnikord süntaks ja kirjutades välja
nagu tüütu käske.
Hea küll.
Nii et see ei tunne parim disain, üks väli tabelis.
Nüüd võiks olla asjad nagu professorid
ja asukohad ja kirjeldused.
Aga isegi siis, kasutades ainult nime
tuvastada kursused ei tunne suurepärane.
Mis on tavaliselt me minevikus
Kui oled kasutanud andmebaasid üheselt rida?
Ei kasuta varchars tavaliselt.
Jah?
[Kuuldamatu Märkus]
Jah. Nii tavaliselt muidugi ID.
Niisiis, kõige levinum läheneda siin eriti
Kui kasutate raamistikku on tegelikult lihtsalt
kasutada mitmeid nagu täisarv.
Nii et lubage mul minna ja seda teha.
Ja me võime seda teha mõne võimalusi, kuid teate, kui ma suurendamiseks
aastal põhjale siin.
Ma lähen ütlen lisada üks sammastega lõpus tabelis
tavaliselt lihtsalt visuaalseks mugavuse paned sümbolid
alguses tabelis kuigi see ei ole reaalne
funktsionaalne mõju.
Nii et ma ütlen lisada ühe veergu
alguses tabelis.
Ma lähen nuppu Mine, et annab mulle tagasi see UI siin.
Kutsume seda ID.
Kui me arvame, et me ei kavatse olla enam teha 4000000 kursused
int põld on hea.
Võiksime isegi kahaneb see maha
kuid ruumi on odav Seega, kes tõesti hoolib.
Aga me üritame kirjutada Facebook nüüd,
ei pruugi olla halb asi prognoosida suur ints
mis annaks meile 64-bit ints
aga siis oled sõna otseses mõttes kahekordistades bittide
et te kasutate, nii väikesed Miinuseks
kuid midagi kaaluda.
Nüüd on see segane pärand asi.
Sa võid meenutada kasutada MySQL
et millal te kuulutada int valdkonnas saate sageli näha number
selle kõrval nagu number 10.
See on midagi pistmist suuruse arvu
või bittide arvu.
See on pistmist number märke, mida kasutatakse
visuaalselt ekraanil et int valdkonnas
kui kasutatakse terminali aknas.
Nii me näeme, et hetkel.
Niisiis, ei tohi eksitada kirjutades numbrid
seal kuigi see on tõhusalt meilt
üks siin.
Siia, ma lähen minna ja öelda allkirjastamata.
Ei ole mingit põhjust, et jäätmete kõik meie negatiivsed arvud
alates andmebaasi Üldiselt läheb
eeldada positiivset väärtused või null.
ID kindlasti ei peaks olema null.
Ja mis sa arvad indeksi selle ID valdkonnas?
Teeme esmane.
Nii, mis siis, kuigi nagu ma ei mõtle ainult üks CS164 kursus
Harvardi ja ainult üks CS50 muidugi Harvardi
ja see on päris palju tõsi üldine
et seal on võib-olla erandeid [Kuuldamatu] nii semestrit
või midagi sellist imelikku.
Aga põhilisemalt Miks see on parem
kasutada numbrilist lahutamatu ID üheselt identifitseerida kursused pigem
kui lihtsalt unikaalne string?
Jah?
[Kuuldamatu Märkus]
OK, huvitav.
Nii et kui meil oli omamoodi piiriülese loetletud kursustel.
Nii et see on hea näide.
Ma ei ole kindel, et ma oleks lahendada, et kuigi
andes neile samas ID-number, kui see on
kus sa lähed sellega.
Ei? OK. Aga kindlasti nurgas juhul kaaluda.
Kui on omamoodi - me peame mingi
on aliase potentsiaalselt.
[Kuuldamatu Märkus]
Muidugi.
[Kuuldamatu Märkus]
See on hea näide.
Nimi võib muutuda üle aeg, täiesti mõistlik.
Mida veel?
[Kuuldamatu Märkus]
Vabandame, ütlen veel kord.
[Kuuldamatu Märkus]
Jah, täpselt.
Nii et tõesti, see on tõeline Viimane sõna on
et kasutades 32-bitine int on ilmselt läheb kiiremaks
kui mõned muutuja pikkus char valdkonnas.
Esimesel juhul saab sõnalt mahtuda register,
rääkimata palju väiksem mälukasutus.
Viimasel juhul, sa lähed et on vaja teha abinõu [foneetiliste]
string võrdlusi iseenesest koos lineaarse
aastal suurus string potentsiaalselt.
Niisiis, see on lihtsalt kena optimeerimine,
ja eriti see läheb
andke meile seda, mida nimetatakse Liita tõhusamalt
vaid hetk.
Teeme seda.
Me täpsustada, et see on esmane
sest ma ei ole eriti soovite huvita või arvavad
mida number on muidugi.
Las nad võtavad olenemata väärtuste nad tahavad.
Ma lähen ütlen auto juurdekasvu et ma saaks tellida et detail.
Nagu kõrvale võib teil olla tean, et Harvard
vähemalt ei ole unikaalne numbrid kursused.
Ma ei mäleta mida see kursused on.
Ma tean, et CS50 on kataloogi number on 4949,
täiesti meelevaldne.
Aga seal on imelik nurgas juhtumeid, et isegi
aastal registrarial prügila muidugi kataloogi andmetel
mõnikord kursuste vana kursuste arv nagu 4.
Aga tehniliselt et valdkonnas on char valdkonnas
et lihtsalt algab 0004.
Nii ka siin, sa pead olema ettevaatlik, kuidas eristada
vahel asjad Muidugi kataloogi number
mis võib-olla mõned inimese mõiste kindla pikkusega, 0004,
ja te ei tohi hoida et näiteks ints.
Selline valdkonnas peaks ladustatakse mujal.
Nii Harvard, kui me tegelikult teeb muidugi
shopping vahend, see on ilmselt ei piisa
et number kursused vaid 1, 2, 3, 4.
Me ilmselt läheb
on veel üks valdkond, nimega kataloogi number,
mis on ka väidetavalt olema unikaalne Based
inimeste konventsioonide siin kuid see ei ole parim valik
kordumatu tunnuse tõttu see võib olla varieeruva pikkusega.
See ei pruugi olla neli tähemärki, see võiks olla viis.
Tegelikult ma arvan, et mõned aastat tagasi nad liiguvad
kuni viis tähemärki sest seal oli üle 999 kursused
kokku või midagi sellist mis või 9999 kursustel.
Niisiis, mis võib olla näiteks kus valdkonnas ei ole primaarne
kuid see peaks olema unikaalne.
Ja e-posti aadress on veel üks.
Võiksid see olla unikaalne
kuid mitte tingimata oma primaarvõti.
Hea küll.
Nii et lubage mul paugu välja teise tabel palju kiiremini kui see üks.
Nii et ma lähen kutsun seda üks instruktorid ja ma lähen
anda see kokku veergude arv kaks.
Ma lähen õppima oma Õppetund viimast korda.
Ma lähen kutsun esimeses veerus ID.
Ma lähen kutsun Teise veeru nimi.
Ma kavatsen ka teha Varchar.
Ma ei võta professor on nimi enam
kui 60 tähemärki, kuigi Nüüd see võib olla surudes seda
mõned pikad nimed, eriline inimeste keskel nimed.
See on hea täna.
Teeme kerin siit.
Teeme selle allkirjastamata uuesti.
Teeme selle esmane.
Ja me lubada eksemplaris nimed
juhul, kui on kaks John Smithi või midagi sellist.
Ja nüüd on meil kaks tabelit.
Nüüd, see tekitab küsimus kuidas ma seostavad
aasta õpetaja koos kursuse?
Ma tunnen, et ma selline sain enne ise
sest kui õpetaja õpetab muidugi
minu esimene instinkt oleks tegelikult tagasi minna
kursustele mõistma, see ei olnud hea mõte.
Las ma tegelikult lisada üks veerg lõpus tabelis
nuppu Mine ja ma nimetame seda õpetaja.
Ja ma teen seda varchar ja ma teen seda 60.
Ja võib-olla ma jätan selle null nüüd
juhul kui muidugi ei ole on allkirjastamata ka õpetaja
mis mõnikord juhtub enne perspektiivis hakkab ja klõpsake nuppu Salvesta.
Milline neist kujunduse te eelistate?
Esimene neist, kus meil on eraldi õpetaja lauale
või teine, kui me lihtsalt lisage valdkonnas kursuse?
Nii et see on tihedalt õpetaja koos muidugi.
[Kuuldamatu Märkus]
OK. Väga hea. Aga lubage mul tagasi suruda.
See on lihtsalt nii lihtne, nagu ma ei lihtsalt kirjuta isiku nimi
sellesse tabelisse nagu kindlasti et on mingi väärtus või -?
[Kuuldamatu Märkus]
Hea küll.
Noh, lubage mul raske siin.
Nii et lubage mul öelda, et muidugi on CS51
ja ma tean, et see on õpetanud Selle aasta kaks inimest.
Niisiis, Henry Leitner ja Jesse Tov kuid -
nii et ma lihtsalt panna koma vahel kaks, paremal.
Ma olen tõesti hea CSV alates Läinud.
[Kuuldamatu Märkus]
Täpselt, eks.
Niipea, kui te otsima midagi sellist,
mis võib tunduda mõistlik ja võite tunda
nagu see on omamoodi targad.
Ma justkui laenates üks idee, mis toimiks hästi,
laenama uus idee ja omamoodi kombineerida.
Mingis mõttes sa täiesti võideti punkt, kasutades andmebaasi
esiteks sellepärast kui üks väärtustest
kasutades seda kiirem otsingud sest erinevate indeksid
ja tabelid, mis võib rajada teid
poolt andmebaasi mootor ise.
Nüüd, kui soovite otsida kõik kursused
et Jesse õpetab, nüüd on et ei alamstringi sobitamine kõigile
juhendaja väljad
mis tegelikult tähendab lineaarset otsida uuesti, sest sul on
leida see meelevaldne kolmest märgist kuskil
aasta õpetaja valdkonnas eelneb
jooksul ehk järgnevad koma.
Nii see kindlasti ei tõota.
Nii et lubage mul minna tagasi lauale.
Lubage mul edasi minna kursused, undo seda.
Ma lähen lihtsalt minema minna ja tilk selles valdkonnas.
Ja kui sa tahad seda teha käsitsi,
süntaks on ALTER TABLE kursused DROP õpetaja.
Nii lähme edasi ja öelda jah seda.
Ja minna tagasi selle varasema idee
kus I on eraldi tabel instruktorid.
Aga nüüd see tundub veidi nagu ma panen muidugi
käigus lauale ja õpetaja
aasta õpetaja lauale, kuid ma kuidagi vaja siduda kaks.
Ja kuidas te ettepanekul me seda teeme?
[Kuuldamatu Märkus]
Väga hea. Teeme seda.
Ja siis võiks kutsuda seda tabel teoreetiliselt midagi.
Ma sihilikult nimetame seda, mida paljud
raamistike oleks nimetame seda, nende hulgas
Laravel nagu näete natuke.
Ma kutsun seda muidugi rõhutada õpetaja.
Kasutades ainsuses selles juhul iga sõna
ja kõik väiketähed uuesti ja ka -
siis tähestikulises järjekorras järjestatud vasakult paremale.
See on täiesti meelevaldne, kuid see kipub olema konventsioon
aastal palju nende raamistike PHP teistes keeltes.
Mitu veergu ma pean sisse see, mida me kutsume liituma lauda
liituda kaks lauad koos?
Kolm veergu?
Kumba - millised need oleksid?
[Kuuldamatu Märkus]
OK. Väga hea. See toimib.
Ja me võiksime tehniliselt lõigatud nurk siin, aga palju
raamistike eriti ikkagi anda isegi need read
unikaalne ID, kuigi semantiliselt rida
et me tõesti hoolivad või tulp mida me tõesti hoolime
umbes on viimased kaks mida sa ütlesid, muidugi ID
ja õpetaja ID.
Teeme seda.
Ma kutsun seda rida ainult ID, just nagu me tegime enne.
Aga see, mida ma teen helistada muidugi ID.
See, mida ma teen kutsuda juhendaja ID.
Ja ma lähen täpsustada, et kõik
neist on allkirjastamata Sest ma tahan
maksimeerida oma 4 miljardit int vahemikus.
Ükski neist peaks olema null.
Ma lähen, et täpsustada, et ID peaks siiski olema esmane.
Ja veel, see on vaid konventsiooni
palju raamistikud isegi kui sa ei sorteeri
fundamentaalselt vaja kordumatu tunnus järjest
Selgub see mugav kood, SQL, mis läheb
olla automaatselt genereeritakse meile.
Nii et ma jätan selle primaarseks.
Aga nüüd, mul on disain otsuse
Muidugi ID ja õpetaja ID.
Mida indeksid kui tahes nad peaksid?
Kui ma ei jäta indeksid, Mis tähendas?
Mis mõju?
Performance nagu varem, eks?
Kui ei ole indeks, Parim, mida saate teha, on selline
kohta [kuuldamatu] kaudu Kogu asi otsivad numbrid.
Nii et ei tunne tark.
Kas see peaks olema esmane?
Nii et miks mitte?
Miks mitte esmane?
[Kuuldamatu Märkus]
Perfect. Nii me rulli välja [foneetiliste] esmane.
Me juba otsustasime, et.
Nii peaks see olema unikaalne?
[Kuuldamatu Märkus]
Väga hea. Niisiis, kui sa endale üks juhendaja kursuse kohta,
täiesti fine.
Ja see on kindlasti ühtsed
aga me juba lükata üks võibolla tuttav näiteks.
CS51 on kaks juhendajate nii et me oleme omamoodi
on nüüd keeratud sel juhul.
Kui me lubada ainult üks õpetaja,
me võiks tegelikult teha viis koos liituda tabeli kokku,
minna tagasi varasema lähenemise
ja panna mitte isiku nimi ehk vaid juhendaja ID.
Kui sa tead, iga kursuse siis üks õpetaja saab olla ainult
üks veerg.
Aga muutlikkus Mis meid hätta.
Hea küll.
Nii peaks see olema unikaalne?
No täielik tekst ei tunnen kohaldatav.
Nagu me varem öelnud, et see on
jaoks nagu substring sobitamine kirjeldusi.
Nii kuidas indeks?
Noh, indeks on ilmselt meie parim kandidaat
mis ütleb MySQL optimeerida otsingute see
või lase mul välja töötada, optimeerida otsingud või ühineb
nagu me näeme vaid hetk
nii, et nad on vähe tõhusam
kui midagi täiesti lineaarne.
Kas ma tahan, et auto sammuga selles valdkonnas?
Niisiis ei, sest tõsi vanem element olemas
kursustel "tabelis.
See, kui see on hakka pluss,
pluss, kui see on tegelikult sisestatud.
Siin on see kõik läheb käsitsi sisestatud
Meie poolt eeldatavalt kood.
Teeme lihtsalt täpsustada et nii muidugi ID
ja õpetaja ID on indeksid.
Nüüd me minna ja salvestada.
Ja nüüd, just näidata sa kirjavahetus
vahel, mis on ilus GUI liidesega
ja käsurida.
Lubage mul minna ja teha järgmine selles MySQL kiire.
Ma lähen ütlen kasutamine courses50
mis on meelevaldne nimi Andsin sellele andmebaasile.
Ja nüüd, ma isegi ei mäleta, mida me tegime.
Nii et lubage mul kirjutad Näita tabeleid
ja üldiselt semikoolonit sinu sõber siin
lõpetada päring.
Ja siin see on.
Nii et siin on rida või pigem tabelid, mis meil siin on.
Nüüd, kui ma unustan, mida Muidugi tundub,
seega ma ei kirjelda kursused ja nüüd ma näen, omamoodi ASCII
või versioon, mida phpMyAdmin tegin
ja ma näen, et ID on int.
Seal on see, et 10.
Mida see tähendab?
See tähendab lihtsalt seda, et kui see on kuvatakse see aega võtab
kuni 10 tähemärki terminali akna.
Kas see nullable?
Ei, see on peamine võti.
Kas see on default väärtus?
No ja pildi, mis on eriline lipud nagu auto juurdekasvu.
Teeme lihtsalt teha paar kiire lisamised siin.
Ma lähen üles et - ütleme lihtsalt.
Muudame riik slaidile
kus ma justkui eelnevalt valmistuda see.
See on kokkuvõte sellest siis on kõik kolm neist tabelitest.
Ma juba lihtsalt käsitsi trükitud esimene käsk.
Ja siin, ma läksin edasi ja kirjutage teised teile.
See on lihtsalt stilistilise asi.
Üldiselt palju inimesi kirjuta SQL kõik mütsid
ja siis tabel nimede ja väljade väiketähti
kui ainult, sest see objekti seisab
millised on sinu terminoloogia ja mis on andmebaasi süntaks.
Nii et siin on meil kolm tabelid, kursused, juhendajad,
ja kursuste juhendajad.
Slaidi tegin ette, Mul ei olnud ID valdkonnas
aga see pole tegelikult halb asi üldse.
Me lihtsalt näha Kolmandas veerus on.
Kui ma oleks teinud, et siin on?
Nüüd lubage mul ettepanek, et teeme hunnik sisestamisel.
Nii et siin on mõned andmed, Ma suumimiseks
Ma lähen tegema ettepanekuid et kursustel
me tegeleme ainult kolm kursust.
Ja ma valisin need kolm Sest nad esindavad
mõne kena - need on mõne kena omadused.
CS1, CS50, CS51, nad on kasvav sümbolid
kuid mida ID ongi on täiesti ebaoluline.
See on lihtsalt, millises järjekorras nad auto lisab mind.
Kuidas õpetajad?
Nüüd, sest Henry Leitner õpetab nii CS1 ja CS51,
see on omamoodi õige mõjuta meie disain.
Ja Jesse õpetab CS51 ja Malan õpetab CS50.
Nüüd - või pigem on need ainult need inimesed, unikaalne ID.
Ja kursuste juhendajad, - kursuste juhendajad, märkate siin.
Kursuse ID1, mis aastal CS1 õpetatakse
instruktor ID1 kes on Henry.
Kursuse ID2, mida ma arvasid CS50 õpetatakse
instruktor ID2, mis on Malan.
Ja siis lõpuks, CS51 ja teate meil on kaks rida.
Ja nüüd on see, miks liituda Tabelis on võimas õpetatakse
nii Henry ja Jesse.
Nii et see on kõik hästi ja hea,
aga ma ei vaevu mäletan pealt
mu peas, kes on kes siin.
Kuidas sa saad olla tegeleda, et kood,
ilma et hard kood asjad?
Noh, see on koht, kus SQL ise hakkab muutuma meie sõber.
Ja ma ettepaneku, et saame tippige järgmine.
Ma teen selle juures on tegelik kiire.
Lubage mul minna ja sisestada neid asju.
Niisiis, meie kursused tabel teeme täpselt seda, mida me pidime
hetk tagasi.
Ma lähen edasi ja öelda, Lisame CS1 ja CS50.
Lisame veel mõned rida korraga, CS51.
Nüüd lubage mul minna ja salvestada.
Olgu, ma olen lihtsalt taasloomine kiiresti
kui saan suhted me nägime ekraanil.
Ja siin me oleme Leitner, siin on meil Malan.
Anname endale teine ​​rida, ja Tov.
Nüüd lubage mul salvestada.
Ja ma teen nad tahtlikult samasse järjekorras.
Ei, ma unustasin, et anda Selle auto juurdekasvu.
Lubage mul kiiresti lahendada.
Ma parandan selle online-kood.
See ei ole nagu kõrvale.
Asjaolu, et ma ei saanud sisestada Leitner ja Malan
ja Tov ebaõnnestus, sest ma ei täpsustada ID number kuigi
ta ootab üks ja I unustasin vaadata auto juurdekasvu,
mis tähendab, et nad kõik olid vaikimisi saada null.
Aga mis siis on vastuolus mis vara, et oleme määratud.
Primaarvõti rikuti nii et isegi ei lase mul seda teha.
Nii et lubage mul seda parandada.
Nüüd lubage mul minna tagasi Lisa jaotises siin ja täpsustada
et ma tahan Leitner, Malan ja veel üks rida, Tov.
Ja nüüd lõpuks ainult üks, mis on veidi raske
meeles on muidugi juhendaja.
Lisame nüüd, et Muidugi ID1 on õpetaja ID1
nii see on CS1 ja Henry.
Kursuse ID2 on õpetaja ID2 mis on CS50 ja Malan.
Ja siis viimane neist on meil muretseda on muidugi ID3
mis on CS51, õpetatakse
kursuse juhendaja 1, mis on Henry.
Ja kolm õpetanud 3, mis on Tov.
Loodetavasti nüüd oleme taastati see -
Kurat, ma tegin sama asja.
Kursuse juhendaja vajab auto juurdekasvu.
Hea küll.
Ma teen seda kiiremini see aeg, Muidugi 1 kursus 1, 2, 2.
Ja nüüd lõpuks, me teeme CS51 mis on muidugi ID3 ja Henry.
Ja muidugi ID3 ja Jesse.
See näeb hea välja.
OK. Nüüd lähme tagasi terminali akna.
Nii et kui ma kirjeldada kursused me näeme seda.
Kui ma tahan näha kursused suudan nüüd tegema valida tähe kursuste
semi koolon ja nüüd me näeme neid väärtusi.
Ja nüüd, mida veel ma tahan teha?
Vali täht instruktorite, see on nagu ma ootasin,
ja valige tähe kursused - Muidugi alakriips õpetaja.
Niisiis, kuidas ma nüüd liituda need tabelid?
Nii ilu valinud ID väärtused sel viisil
et kui sa arvad võttes muidugi tabel
ja õpetaja tabelist ja seejärel sisestades
aastal nende kahe oma mõtetes muidugi õpetaja
tabel saab selline rida üles kõik need ID veerud
nii et sa liita need üks tohutu kolonn, mis on kõik
kohta teavet me hoolime.
SQL süntaks see ei pruugi ilmne
Aga vaatame, kas me saame seda teha.
Nii valida tähe kursuste
ja seal on mõned teed kui me ei tee seda.
Ma lähen Enter lihtsalt selline formaat asjad kenasti,
aga et nool on lihtsalt sümptom kliendi poolel tööriista
see on midagi teha SQL ise.
Nii valida tähe kursused.
Ma lähen nüüd liituda kursused tabel
kursuse juhendaja tabelis.
Kuidas? On Väli courses.id võrdub kursus
rõhutada õpetaja dot Mis nimi
vastava ala siin, et ma tahan paar.
See ei ole ID.
See on - mis, vabandust?
>> Course ID.
OK, las ma välja suumida.
Aga ma tahan, et võtta see üks samm edasi.
Olen nüüd teinud laua ja see üks.
Nüüd ma tahan tõmmata see mees samuti.
Niisiis, lubage mul edasi liituda kogu see asi
on juhendaja tabel, mida?
Kursuse alakriips instructor.instructor id
võrdub instructors.id.
Nii et me oleks võinud kirjutada Selle päringu vähe võimalusi.
Järjekord, milles ma tegin seda ei ole nii oluline.
Ma lihtsalt omamoodi tegid seda minu meelest vasakult paremale.
Me oleks võinud teha seda aastal erineval moel
aga kui ma nüüd semi koolon ja vajuta Enter
Teade ma saan tagasi uue ajutine tabel, tulemuse
niiöelda andmebaasis rääkida.
Ja mida ma pean selles asi?
Mul on ID, nimi, teine ID, mis on selline segane
mulle hetkel, Muidugi ID,
õpetaja ID, ID ja nimi.
Niisiis, lõpuks päev meil on õigus andmeid nüüd.
Ma näen, et CS1 õpetatakse by Leitner, CS51 õpetatakse
by Leitner ja Tov ja CS50 on õpetanud Malan.
Aga ma olen natuke närvis Selle ebaselguse Olen loonud.
Milles ebaselgus Ma vihjates?
Jah?
[Kuuldamatu Märkus]
Seal on kolm ID veergu.
Nii saame tegelikult määrata see ja me tegelikult toimub
alistuma meie raamistik lõppkokkuvõttes aitavad meil seda,
kuid selgub, et seal on märksõna SQL nimega S,
kus saab määrata alias, uus nimi väljale
nii et me saame vältida ebaselgus kokku.
Aga aru, et kui me seda ei tee lahendada see kuidagi nagu
märksõna või raamistik,
seal on potentsiaalselt selle ebaselgus, kui üritate
juurdepääs ID valdkonnas sest ilmselgelt on need
dubleerida nimesid seal.
Nii et see on liituda ja ma arvan, oma vaimusilmas parim viis
mõelda tõesti on võtta kaks tabelit,
rida neid sisse nii, nagu soovite.
Ja see on nn sisemine liituda mõttes
et me ühendades tabelid siin.
On ka teisi liike liitub, et meil võib tekkida
aja jooksul nagu välimine liitub,
kuid enamasti seda Tõenäoliselt kõige levinum
rekonstrueerimiseks andmed.
Mida me oleme teinud praegu üldiselt, mida nimetatakse
normaliseerida oma andmed, et pole dubleerimine kõikjal
Teie tabelid.
Ja dubleerimist, oleksin tähendanud, et esimene lähenemine.
Kui me oleks mainitud Leitner ja Tov mitmes kohas
oma andmebaasi, et see pole üldiselt parim otsus
eriti kui nende nimi võiks aja jooksul muutuda või kui
abielu, neiupõlvenimi jõud muuta ise tahad lihtsalt üks
kanooniline juba mõnda andmete väärtus nagu nimi.
Hea küll.
Nii et veel kord, et meil on olnud mõned disaini otsuseid teha
ja kõige olulisemad tõenäoliselt vähendada teatud
Nende valikute indeksid.
Aga lubage mul rõhutada, üks teine ​​asi ka.
Kui ma lähen tagasi phpMyAdmin,
üks funktsioon ei pruugi on tekkinud enne IS
järgmised.
Kui ma lähen muidugi õpetaja, Ma juba tegin kindlaks määrata, et mõned
need asjad on indeksid.
Aga lubage mul minna struktuur tab muidugi õpetaja.
Lubage mul kliki nüüd Indeksid ja märkate järgmist.
Olen siin määratud, et on primaarvõti
veeru nimega ID.
See on mõnevõrra keeruline viis täpsustades cardinality
ja nii edasi kui viidet suurus väljale baiti.
Aga nüüd ma ka veel valdkonnas, muidugi ID, mis on -
Muidugi ID, mis on tehtud ette ja ainulaadne, OK.
Ma tegin selle ühe enne meile.
Niisiis, miks on see - las ma tilk Selle jaoks huvides arutelu.
Oh, sa tead, mida ma tegin?
OK. Niisiis, varem üks ohtudest, kasutades GUI tööriist
nagu see, kui me olime koostad liituda tabeli
Kursuse juhendaja tabeli mäletate, et täpsustada
et ma tahan indeks on selles valdkonnas
ja indeksi see muus valdkonnas.
Kõrvalmõju kontrollimine need mõlemad kastid
samal ekraanil on see, et phpMyAdmin järeldada, et
et ma tahan mitte kaks eraldi indeksid,
et ma tahan liituda indeks, mis Üldiselt on ainult kasulik
või kõige kasulikum, kui sa oled otsides ei üks väli
kuid need mõlemad väljad.
Ja sellepärast me pidime nad põimuvad seal
nii et ma langes see põhjus, et ei olnud see, mida ma ette.
Pigem ma lähen uuesti teha seda siin.
Ma lähen minema muidugi ID
ja alla rohkem ma lihtsalt ütlen lisada indeks.
Ja ma lähen all õpetaja ID ja öelda lisama indeks.
Ja nüüd, kui me kliki siia, märgata on meil kolm indeksid,
üks põhi-ja kui ma ette üks iga
need välismaa võtmed.
Ja ma kutsun seda välismaiste sest Muidugi ID tabelis kaardid
millele valdkonnas, lihtsalt olla selge, teises tabelis.
Primaarvõti nimega ID, tabelis nimetatakse kursust,
ja sama asi teine.
Aga nüüd on huvitav petta ja tegelikult tehnikat.
Ma läksin edasi ja andke seda natuke aeglasemalt.
Samal ekraanil teade ta ütleb Suhe vaata siit.
Ma vajutan seda ja nüüd teate I saada teha mõned piirangud.
Niisiis, üks tasa ka
mitte ainult lehe kontseptuaalselt välismaa võtmed ja muud lauad
nagu me oleme just on et määratledes indeks
neid saab olema andmebaas aitab teil isegi rohkem
terviklikkuse tagamiseks kohta selles valdkonnas.
Täpsemalt saan nüüd täpsustada kaudu see langus
ette, et muidugi ID valdkonnas
Selles tabelis tegelikult Kaardid et courses.id.
Samamoodi õpetaja alakriips ID kaardistatakse instructors.id.
Nüüd, miks on see kasulik?
Noh, teate, on õigus servas, mis näib nüüd.
Nüüd saan õpetada andmebaas, et kui Henry
Näiteks kunagi pensionile ja tema rida kaob
alates õpetaja lauale kokku seega saab
kustutada, ma saan selle kaudu CSS lähenemisviis tagama
mis tahes kursusel õpetab ta on enam temaga seotud.
Võin õpetada andmebaas kustutada ridu
Selles nn liituda tabel automaatselt, kui Henry või kui üks
tema kursustel kaob.
Nüüd, miks see nii on kaalukad?
Jah?
[Kuuldamatu Märkus]
Teil on vaja ainult teha seda üks kord ja pikemas perspektiivis, eks?
See on väga lihtne, kui mingi inimesed tulevad ja lähevad, kursused tulema
ja mine, sinu võiks andmebaasi lihtsalt saada täis kursused
ja teaduskonna et ühtegi enam seotud andmekogum.
Ja oma andmeid hakkab saama väga räpane ja määrdunud ja liisunud,
ja nii siin me sorteerida
ning jõustada mõned Nende piirangute.
Jah?
[Kuuldamatu Märkus]
Ta teab teel seda.
See on ekraan, kus me täpsustades seost
vahel Võõrvõti ja primaarvõti.
Nii kõik nime konventsioonide I vihjas
varem on lihtsalt konventsioonidega.
Ei ole iseenesest tähendust.
See on ekraani mis on kasulikud vaid
pärast määratud indeksid kõigis neis valdkondades, nagu me tegime.
Ja see rippmenüüst meil mõned asjad näiteks
kui kursus on välja saad tegelikult takistada, et kustutamine
juhtuks, kui seal on rida selles tabelis
lihtsalt öeldes Piira.
Teisisõnu Henry ei saa pensionile
kuni me lahti siduda teda alates CS51 ja CS1.
Nii et see on hea asi.
Kuid see võib tekitada vigu oma koodi
kui sa ei ole oodata, et või saame kaskaadi
Cascade sarnaneb meeldi kaskaadlaadistikke
ja kuhjuvate juga tähendab, et kui -
kui Henry pensionile nii - hakates välja
nii on tema rida siin saada välja.
No Action tähendab midagi või null on omamoodi kasulik, kui objekti
ja tahad kronoloogilist Henry, kes õpetas CS51,
aga sa lihtsalt tahad, et valdkonna olema null, nii et read on
kuid see ei ole enam temaga seotud.
Nii et need on väga võimsad tehnikaid, mida saab
ja peaks kasutama, kuigi huvi eriti
säästa teid ise.
Nii et lubage mul teha märge paar viimast andmetest,
koostisosi, mis mis võib olla kasulik
nagu plaanime andmebaasi kujunduses.
Sul on ka valik üle andmebaasi mootor
et te kasutate oma kood.
Kui te olete juba tuttav kohta CS161 sa võiks -
või isegi 61, siis võib üldiselt olema tuttav failisüsteeme.
Ja on asju nagu, NTFS ja HFS +
ja X2FS4 [foneetiliste] ja 3 ja nii edasi.
On erinevaid viise, andmete salvestamiseks töölauale.
Samuti on olemas erinevaid võimalusi andmete salvestamiseks
aastal andmebaasi vaikimisi vähemalt Appliance
uusima versiooni MySQL.
Oleme kasutanud andmebaasi mootor nimega NoDB,
mis toetab mõne kena funktsioone.
Aga teine ​​levinum on ka nimetatakse MyISAM ja järjekordne
mida saab kasutada on mälu, mis tähendab, ei pane midagi
kettal, muudkui asjad mällu.
Enamasti siis ilmselt ei lähe valesti hakanud just
koos NoDB, kuid projektide mis kipuvad kaasa kõrged
sisestamise näiteks nagu palju kiire logimine
sadu asju sekundis või tuhandeid asju.
Igakord kui on palju asju läheb
In andmebaasi siis seda liiki
madalama astme otsused hakkavad osalema.
Tervikteksti funktsiooni Näiteks töötab ainult MyISAM
nii et on vaikimisi.
Aga te mäletate seda, olgem vähemalt põhjendage, miks me hoolime
umbes NoDB eriti.
Võiduajamiste tingimused Üldiselt viitab mis?
Olgu, see on vihje Näiteks mõned
te olete kuulnud sisse aastat varem, kas 161 või 50
kui sul on toakaaslane, mõlemad olete tõesti nagu piim,
üks teist saab koju esimene avab Külmkapp pole piima,
sulgeda külmik kõndida üle tänavatel CVS ja saada
kooskõlas osta piima.
Vahepeal oma roommate tuleb siia tagasi.
Ta meeldib ka piima.
Avage külmiku ja mõistab ole piima.
Siin ta siis läheb säilitada, ehk teiste CVS.
Fast forward paar minutit hiljem sa tuled tagasi ja nüüd nii
teist on ostnud piima.
Üks neist on nüüd rikkuda, sest sa ei tea
nagu piim, et palju ja see on probleem, eks?
Kuna mõlemad olete kontrollitud riigi mõne muutuja
ja tegi otsuse, mis põhineb seda isegi juhul, kui riik
Selle muutuja oli sisuliselt protsess on muutunud,
kõik olgu aeglaselt aega kulub
saada ja CVS.
Mis on omamoodi loll reaalne maailma lahendusena?
Jäta märge, eks?
See on viimane kord juhtus.
Alati jätke märge või tabalukk asi sõna otseses mõttes.
Ja ma ütlen, tabalukk, sest kui te võtate või võttis CS161,
pidurid on põhiline Idee selline maailm.
Nii võiduajamiste tingimused võivad tekkida ka andmebaasi maailma
ja te võiks meenutada, võibolla CS50 rahastada kui sa võtad 50,
see kood, mis me tegelikult andis kutid spetsifikatsioon
ajal, et teie operatsioon on nn aatomi.
Kui sa tahad, et see nii, ostke aktsiat
ja et aktsia on mõned eriti sümbol.
Me ütlesime teile, et kasutada koodi nagu Selle tõttu teel käesoleva
on korduv võti uuendus süntaksit, mis on ehitatud
MySQL oled tõhusalt teeme kas insert
või uuendamine pärast teeme valige näha
kui aktsia on juba olemas.
Teisisõnu analoogi maailma osta stock
piima ja külmkapp võib esiteks
enne ostu osakaal Google võiksite valida
alates andmebaasi kõik aktsiate Google, et David omab
et näha, kas tal on null või rohkem.
Kui näete, kui ta omab null või rohkem pead
et tehke järgmist.
Sul on kas teha insert
kui ta ise nullist, sest pole rida David veel
või mida sa pead tegema ajakohastamine kui vähemalt teoorias soovid
on üks rida alla.
Probleem on valida et aktsiate arv
ja seejärel ajakohastada või Sisestamine võib katkeda
keegi teine ​​teises arvuti terminal üritab osta
või müüa mõned Davidi aktsiate varud kas
heaks otstarbeks või sort ja kuritegelikel eesmärkidel.
See on nagu läheb poodi kui teie toakaaslane saab tagasi
ja kontrollib riik muutuja.
Nii et see süntaks ajal mis oli omamoodi asjakohane
jaoks CS50, et hoida ära olukorda probleem üldse.
Ja see teeb kogu selle magic lukustamise jaoks,
aga nüüd selliseid Projektide selle käigus
mis kõige tõenäolisemalt seotud keerulisemad andmekogumid
sa ei saavuta alati see atomicity.
Kõik toimub korraga või üldse mitte
katkestusteta nii elegantselt.
Ja nii MySQL, teine andmebaasi mootor,
toetus asju nimetatakse lukud,
mille saad öelda lock see lauale nii, et ainult üks maiuspala
ja üldiselt saab ainult üks kasutaja puudutage seda igal ajahetkel
lugeda ega kirjutada ja siis saab seda avada.
See on näide ühest MySQL enda viited
kus, kui sul on nagu pank arvesse, et üritate
mahaarvamise raha ja seejärel lisage raha.
Võiksid Veenduge, et mõlemad
need asjad juhtuvad kokku
nii et ei ole matemaatilisi vigu
ja keegi kahjumit raha, kuidagi.
Probleem lukud kuigi andmebaasis
et see tähendab üldiselt kogu tabel on lukus,
mis tähendab, et kui teil on sada inimest üritab
äri teha oma panga online samal summa
aega ainult üks neid saab minna korraga.
Kumb on loll, eriti serverites tänapäeval
mis on kaheksa muidugi 16 Loomulikult on suur summa
mälu, ei ole põhjust serialiseerida kõik
oma tehinguid kui need kliendid on vaid läheb
suhelda oma rida.
Nii NoDB võimaldab teil teha asjad intelligentsemaks
ja see on need üldjuhul lähenemine võtate kood,
kui te kasutate midagi nimetatakse tehingu.
Ja te seda tavaliselt PHP kood
Ruby koodi, Python, mis iganes.
Aga SQL koodi, mis on lõpuks kasutatud on,
tavaliselt.
Alusta tehing siis määrata kaks või rohkem päringuid
, mida soovite täidab täielikult
katkestusteta või üldse mitte.
Seal võib olla isegi mõned vali avaldusi
või mõned kustutab või uuendused.
Aga tore asi on see, et andmebaasis on piisavalt targad,
veenduda, et see ainult lukk rida nad tegelikult
kaasatud uuendused või valib või kustutab.
Nii et kui sul on tuhandeid ridu ja sa oled ainus, puudutades kolm
neist, ainult et alamhulk Tabeli saab lukustada
mis tähendab, need teised 99 kliendid võivad puudutada nende ridade
ilma et serialiseerida ja pidurdas sind.
Vahepeal on nicest aspekt tehingud.
Need on tehingud tunnetada nagu 161 on failisüsteemi,
nad tehinguotsust
mis tähendab, et saab rulli neid tagasi, saate selle tagasi neile.
See on nagu käsk või kontrollida F andmebaase.
Kui märkate osa teed läbi kõik
oma erinevate andmete operatsiooni tulistada, midagi on valesti.
Sa sõna otseses mõttes ellu erinevate SQL päring rulli tagasi
ja kõik need trend - kõik avaldused sa täide
pärast ütlesid start tehing kaovad
nagu nad kunagi juhtunud,
mis on hämmastavalt võimas asi.
Ja need on liiki asjad kindlasti 50 me sort
kohta pühkima vaiba alla ja sa lihtsalt omamoodi eeldada
et kõik on hästi.
Aga kui hakkate mõtlema tegelike projektide
ja tegelikud kasutajad ja terviklikkuse oma andmebaasi,
need liiki disaini otsuseid
mis saab olema oluline.