>> V redu.
Torej, brez odlašanja, SQL, Strukturiran jezik poizvedb.
Torej, ste verjetno uporabljali to na vsaj v CS50, morda v CS165,
Morda v svoje osebne projekte.
In kaj SQL kaj si naredil, v SQL Server bolj na splošno?
Ja?
[Neslišno Opomba]
OK, to je bilo zelo zavarovan način za to rekel.
Da. Tako da omogoča ste za shranjevanje podatkov
in še pomembneje omogoča poizvedovanje po podatkih.
In to je korak naprej
z uporabo nekaj enostavnejši kot CSV, kajne.
Ločene z vejico spremenljivk.
Podobne vrednosti.
Prav tako vam prihrani Podatki ena vrstica
v besedilno datoteko.
Toda kaj je slaba stran CSV datoteko za shranjevanje podatkov,
čeprav ste dejansko dobili vrstice in stolpce od njega?
Ja.
>> Ne "imajo ista organizacija
Učinkovitost [neslišno].
>> Nimate enako uspešnost organizacije.
Kaj misliš s tem?
>> No, kot [neslišno] ima kot primarna [neslišno].
>> OK. Ja.
>> To je relacijske baze podatkov imate lahko več baz podatkov
med seboj povezana na določene načine.
>> OK. Dobro.
>> To je [neslišno] nastaviti CSV.
>> In mi poteg Malo terminologija.
Torej, več tabel v zbirki podatkov, seveda,
in da presega tisto, lahko narediš z enim CSV.
Ampak res omejitev z CSV trdim, je
da neučinkovitost vsega.
To je zelo enostaven za postavitev.
Toda, če želite narediti vprašanje, kaj je čas delovanja
v nobeni poizvedbe za izbiranje na datoteko CSV?
Mislim, da je velik star [neslišno] Dobro, ker v najslabšem primeru,
so se povečale na samem dnu.
Tudi če ste imeli urejeno celoto CSV, če ne veste,
da se vnaprej dobro, ste še vedno dogaja, da imajo
iskanje vso stvar.
Torej, med stvarmi bomo dobili
s pomočjo dejanskih baze podatkov s pomočjo jezika
kot SQL je, da smo lahko poizvedbe je in bomo lahko vnaprej
kot oblikovalci baze podatkov opredeliti, kaj so polja
, ki so verjetno bodo imeli Vprašanja o tako, da se ljudje
V MySQL ali Microsoft ali Oracle,
kdor je dosegla baze podatkov boste uporabljali lahko storite vse
trdega dela ugotoviti, OK,
dana milijonov teh IDS.
Kako lahko postavitev - jim v spominu?
Neke vrste drevesa strukturirati morda,
tako da, ko vam dejansko izvedbo Izberi
to je nekaj, kar je logaritemska ali logaritemsko
v logaritmični v času prej kot dejansko prenaša
v nekaj linearno.
Torej imamo veliko delovanje v to smer.
In smo lahko veliko shranite tudi več Podatki lažje "povzroči SQL
Strežnik je običajno shranjena v RAM čeprav deli
od bi ga lahko shrani na disk in verjetno veste, da do sedaj
da RAM splošno hitreje kot diskov,
tako da je dobra stvar.
In bomo lahko tudi ročaj vzporednosti veliko bolje.
Če ste vzeli 165 ali 161, veste, da če se dva človeka poskusite
da storijo enako stvar naenkrat na sistemu,
Slabe stvari se lahko na splošno zgodi.
Torej, med drugimi funkcijami smo lahko dobite, če načrtujemo naše mize
na pravi način, je boljšo podporo in varnost
ko gre za sočasnost.
Torej, dve osebi v dveh delih
svet uporablja isti Spletna stran, če se tako poskušajo
kaj kupiti na isti Čas, da se vrstni red ne bo
iti hkrati.
Nekako bi jih serializirajo nekdo, ki ni naša -
kdo, razen nas samih.
Bo baza podatkov naredil za nas.
Torej, ko je najpreprostejša oblika,
SQL nam omogoča poizvedbo relacijske baze podatkov.
Relacijske baze podatkov je tista, ki ima eno
ali več tabel v njej običajno.
In, če je to malo poznajo,
lahko res samo pomislite to kot Excel ali številkami
ali Google preglednic.
Treba ga je le vrstice in stolpce in ponavadi drug vrh
teh vrstic ima ime.
Torej je to morda ID stolpec, stolpec ime,
naslov stolpec in tako naprej.
In potem lahko imate več tovrstne tabele, če želite
začeti ki določa različne vrste podatkov.
Vendar se morda spomniš vsaj od CS50, da smo poskušali
vam GUI- Orodje [neslišno]
upravlja zbirko podatkov.
To je bil imenovan phpMyAdmin.
Torej to je samo naključje, da je bilo napisano v PHP, res,
ampak to je samo temelji web- sprednji konec z zbirko podatkov.
In preko različnih karticah in povezave, lahko začnete
za konfiguriranje baze podatkov za sebe.
Ampak dobro orodje, da začnete dobili malo bolj udobno
s je tudi ukazni vrstici odjemalec.
Torej, če uporabljate CS50 Appliance ali res uporabo katere koli makro PC
da ima ukazni vrstici MySQL odjemalec, lahko to storite tudi neke
iz stare šole, kot je ta.
Kot prahi projekta MySQL, vsaj verzijo open source
o se zdaj imenuje MariaDB za različni razlogi, ki jih lahko preberete
up na Wikipediji, vendar to je isto programsko opremo,
to je enako sintakso in tako naprej,
precej isto kodo bazo.
In tako, ko sem na to vpraša Sedaj lahko interakcijo
s svojo podatkovno bazo veliko več ročno.
Torej primer za to, Naj gredo naprej
in samo odpirajo okno terminal.
Slučajno sem se z CS50 Aparat, vendar lahko to storite
na večini vseh sistema ki imaš pravico
nameščene programske opreme.
In bom naredil MySQL-u za imenom John Harvard
v tem sistemu,-P za geslo, da bom tipa
V malo več Varno s pritiskom na Enter.
Zdaj sem pozvani.
Jaz grem s tipom Crimson v CS50 Appliance
zdaj pa vidim predvsem da isti zaslon.
Ampak tam je ukazi zdaj da lahko začnemo tipkati
kot kažejo baze podatkov, in da me bo vse pokazal
baze podatkov, ki sem jih odprtih v sistemu,
precej isti seznam boste videli v phpMyAdmin.
Tukaj je nekaj drugih, kot Informacije shema in test,
ki bi, če ste suniti okrog CS50 Appliance smo skrili nekaj
teh tabel nižji ravni
vendar smo bili tam ves ta čas.
MySQL dejansko ima nizko raven lastnosti, kot so uporabniška imena
in gesel za baze podatkov sama po sebi, ne pa tudi za vašo aplikacijo
da bi lahko bili teče nad njo.
Tako vnaprej, danes sem ustvaril nekaj podatkovnih baz,
ena, ki se imenuje courses50.
Stave so nekateri od vas so uporabljali CS50 Seveda nakupovanje orodje,
ki je velik vmesnik za Sodni tajnik je seveda katalog.
In to je pravzaprav lepo Nabor podatkov, da govorimo o "vzroku,
ena, smo nekako vsi očitno seznanjeni s tečaji
in inštruktorji in srečanje lokacije in vse vrste
navadnih stvari univerze,
vendar pa je dobil tudi nekaj zanimive priložnosti
za oblikovanje.
Zato smo menili, da bi uporabili Pojem Tečaji
in nakupovalno orodje, kot je Primer vsej danes razvrstiti
okvirja nekatere zasnove Odločitve, ki jih moramo narediti.
Torej, začnimo tam.
Recimo, da sem dejansko želela da zastopa super Najenostavnejši
Seveda nakupovanje orodij.
In najpreprostejši svet Lahko si predstavljam, in ena
, v katerem so tečaji in tam so inštruktorji.
In kaj je domnevam, da Zaradi razprave
da je vsak tečaj ima vsaj ime.
Torej, začnimo na skico to.
Jaz grem za uporabo phpMyAdmin le kot pomoč;
tako da nam ni treba vnesti ven vse poizvedbe ročno.
Toda tukaj sem v moji courses50 baze podatkov.
Če niso seznanjeni s tem, da bomo zelo enostavno, ko se potopite
Za svoj projekt če želite, da ga uporabljate.
Grem, da ustvarite miza imenuje Tečaji
in lahko mislim samo v enem polju
za zdaj, ime seveda.
Jaz grem naprej in recimo da mi en stolpec.
Zdaj, ko se spomnim dobiš vmesnik, ki je malce
kot je ta.
In drugi na glavo odkrito v phpMyAdmin je, da je nekako
self-poučevanje in da preko spustnem meniju, lahko razvrščate
o videli, kaj vaša morebitna Odločitve motivov.
Torej bom dal vsak seveda ime.
To je ime tega stolpca.
In kaj o svoji podatkovni tip?
Večina vas je treba vedeti pri vsaj nekaj od teh podatkovnih tipov
iz predhodnih izkušenj.
Kaj je primerno za ime predmeta?
Sharon?
>> VARCHAR.
>> OK, varchar, ki je Variable Char.
In kaj počne, da pomeni bolj tehnično?
[Neslišno Opomba]
OK. Tako da je niz.
In var vidik od to pomeni kaj?
Spremenljivka. Toda kaj to pomeni?
Ja?
[Neslišno Opomba]
Točno tako. Torej je spremenljivka število znakov
V nizu do do neke največ.
Torej, tukaj je naš prvi Odločitev dizajn.
Dejansko se moramo odločiti, koliko bajtov maksimalno
se za vsako takšno niz.
Na splošno, ki jih želite nekako ne bi bilo premajhen,
ne bi bilo preveliko Ker očitno
če je premajhen, da ste pravkar bo začela krajšanju podatkov
in boste izgubili podatke.
In če je prevelik, da ste pravkar nekako povedal baze podatkov
pričakovati, da optimizacijo za več podatkov
kot da bi dejansko kdaj dobili.
Torej, kaj je razumno občutek Številka za imenom seveda?
60? OK, torej 60.
To se zdi zelo razumna
dokler je ni Izjeme od tega.
Tam je res ni trdo, hitro pravilo.
Če sem iskren, za zgodovinski razlogi veliko
ljudi, ki bodo izbrali 255 "Vzrok za let, ki je bila nekako
privzetega največ uporablja 8 bajta - 8 bitov kot števca.
Želel več [neslišno] lahko uporabi pooblastil 2
ampak to je nekako nepomembno.
Torej lahko gremo z 60.
To se mi zdi smiselno, tako dolgo
saj bomo na koncu ga ne obžalujem "Povzroči, da je zgornja meja.
Zdaj, recimo, nasprotno Odločitev je bila dana,
ne variabilne znakov, temveč samo polje char.
Torej, za razliko od C in C + +, zlatovčice ne pomeni en char
in baze podatkov, ki na splošno pomeni določeno število
znakov v nizu.
Kaj bi bilo narobe, in / ali Slaba moj izbor 60
za polje char, namesto varchar?
To je točno to, prva vrsta sklepa, da boste morali narediti
pri pregledu [fonetična] out projekta s svojimi partnerji.
Ja, Sharon znova.
[Neslišno Opomba]
Dobro. Torej, če je ime manj
od 60 let, potem ste zapravljaš karkoli že to je delta
med 60 in dejanska dolžina.
Tako da samo meni potratno, več zlogov, kot ga potrebujete.
Ampak zakaj ne obstaja?
Zagotovo obstaja nekaj narobe.
Ja?
[Neslišno Opomba]
Prepričan. Torej, včasih Morda poznate določenega števila
znakov, kot so 10 številk za telefonsko številko, na primer.
Ampak koga briga, tako kot zakaj Ne samo reči 11 itak
ali zakaj ne poveš 60 vseeno z varchar?
Kaj prednost pridemo s poznavanjem in oblikovanje
za določeno število znakov?
[Neslišno Opomba]
Si na pravi poti.
Tako da je optimizacija vendar je to res - ja?
[Neslišno Opomba]
OK. Dobro. Osredotočimo na tem zadnjem delu.
Torej indeksiranje.
Tako se izkaže, če vnaprej vedeti, da so vse
vaših polj gredo do 60 znakov,
lahko res misliš o tem stolpec v bazi podatkov Excel
da imajo zelo naravnost, levo upravičena
in desno poravnano robovi
ker je vsak stolpec je široka 60 znakov.
To pomeni, da te niz 60 znakov stran
iz tega niza, 60 znaki stran od tega enega
in to in to.
Torej, samo rad nazaj, ko ste naučil C, si imel bralno
v svetu nizi Isto idejo tukaj.
Če je vaš stolpec zastopa uporabljajo le določene znakov je dolžina,
lahko učinkovito indeks naključno na 60 ali 120 ali 180
in lahko dobite na posamezno strune precej hitreje.
Potem, če namesto tega imel vaš stolpec naravnost levi rob, tako rekoč
vendar zelo robusten pravica roba do stolpec
ker bodo morda ima 10 znakov,
15 znakov, 5 znakov.
Torej, tudi to je kompromis.
In včasih samo pomočjo poskusov in napak
in eksperimentiranje lahko ugotovimo
kaj je res v redu klic je, ampak to so vrste
vprašanj, ki Morala bi iti
po vaših glavah in / ali mize, ko pride čas
oblikovati zbirko podatkov.
Torej, ni nujno, da prav odgovoriti, vendar morate
vsaj še nekaj stavek ali dva v mislih
za backup karkoli Odločitev naredite.
Vse je v redu.
Torej, kaj je obdržati drsenje na pozive tukaj
da so phpMyAdmin je UI.
Torej, privzeta vrednost za ime, bi moral navesti
da je treba imeti Privzeta vrednost null?
Kaj menite?
Lahko seveda imajo null ime?
Samo zdi čudno, kajne?
Ne morem razmišljati o vseh neimenovani tečaji na Harvardu.
In morda obstaja nekaj nejasna primeru kotiček
kjer je seveda navedena številka
in profesor nima izbrano ime za to, ampak -
Mislim, da pekel z da,
kot pa sploh ne trudim, da podpirajo.
Jaz bi rekel, da je v interesu z lepo čisto bazo podatkov,
pa določite, da ne morete imeti privzeto vrednost null.
Druga možnost je, lahko naredimo nekaj podobnega brez imena seveda
ki ni v nasprotju z Mac OS in Windows storiti
ko ustvarite mapo za primer
vendar pa, da naredi malo več smisla
tako da človek nekaj videti.
Govorimo o back-end baze podatkov domnevno
za katalog tečajev.
Torej, jaz res ne celo všeč ideja, da jo daje
V Untitled imenih seveda
saj to ni res bo pomagalo nikomur.
Zato pustimo to kot nič, kar pomeni, da ko vstavite
v tej bazi podatkov, ki ste jih da bi vsak tečaj ime
ki se počuti nekoliko čistilo za mano.
Vse je v redu.
Torej nadaljnje drsenje, primerjanje.
To je samo opraviti s nabori znakov in drugih malenkosti
če ste kdaj videli omenja švedski
v phpMyAdmin, da je Ker ljudje
ki je napisal phpMyAdmin so bili švedski.
Je to PHP ali je MySQL?
Ena izmed dveh, I Pozabil Nepripravan.
Ampak to je zaradi zgodovinskih razlogov
vendar lahko vsak izrazi lik v angleščini
da si lahko z švedščini zato je v veliki meri ni vprašanje.
CS50 Appliance, čeprav je uporabijo - nastavljen za uporabo UTF-8,
tako, da na splošno naj Ne pop up za vas.
Atributov.
Torej nobeden od teh so res pomembna tukaj.
Vidim Binary, nepodpisani, Nepodpisani zerofill,
in posodobitev trenutnega časovnega žiga.
To polje se uporablja samo nekaj številsko polje
ali nekaj časa polja.
Torej bomo preskočili , ki v celoti.
Null. Lahko na tem področju, je ničen?
Tako št. Že imamo da nekako pogovorov.
Zato ne želimo privzeta vrednost.
Mi ne želimo, da je nična.
Kaj pa indeks?
Tam je štiri izbire tukaj.
Kaj pomeni, če želimo opredeliti
da ta vrstica se dogaja da je primarni ključ?
Razmišljate nazaj na CS50 ali CS165, če ste jo sprejeli.
[Neslišno Opomba]
Točno tako. Torej primarni ključ po definiciji je polje
ki enolično določa vsaka vrstica v tej tabeli.
In se lahko zanesete na to, da storijo ki enoznačno identifikacijo.
Torej, kaj to pomeni potem bodi edinstven?
No, nekako od teh dveh je nekako
v skladu s posledicami Pod pokrovom.
Ampak na splošno, primarni ključ neke vrste pogodba, ki jo bi
s stvarjo baze podatkov.
Ko sem naredil poizvedbe išče seveda,
Jaz grem za uporabo tega Zlasti polje.
In se bomo vrnili k zakaj bi imeli dve
takšne odločitve tukaj, osnovnošolsko ali enkratna.
Edinstvena samo pravi, to Polje se bo unikatna
ampak ne bom res kar koli vrsta verbalne zaveze tukaj
uporabiti to polje narediti svoje iskanje
zaradi razlogov, bomo glej, v trenutku.
Če namesto tega opredeliti indeks, kaj to pomeni, da določite
da ima polje indeks na njej?
Ja?
[Neslišno Opomba]
Točno tako. To je bilo optimizirana za poizvedbo.
Tako da - podatkovni strežnik, Oracle, MySQL, karkoli,
bo na splošno dela svoje čarobno zakulisju, ko boste kliknili
to možnost in nato kliknite Shranite in se bo gradil
se navadno drevesno strukturo, B-drevesa, če ste videli
ali slišali off, ki je zelo kratek videza drevo
ki vam daje zelo lepo logaritemske lastnosti
med iskanjem podatkov.
Če ne določite indeks na terenu, kaj se dogaja
da je tek Čas iskanja
za samovoljno [Fonetično] ime seveda?
Kaj je to?
[Neslišno Opomba]
Oh, [neslišno], linearni, kajne?
Če to ni nobenih optimizacije zagotovljena z bazo podatkov
in še niste mislili podatkovne baze, kakšne
podatkov, ki naj pričakujejo.
Največ kar lahko naredite, je pregled vse, ko iščete
za neko vrednost, zlasti če bi
v resnici dvojnikov.
Polno besedilo medtem, bova val naše roke za zdaj.
Vendar pa na splošno, je to tip indeksa, ki vam omogoča
za optimizacijo za ključne besede išče na tem področju.
Torej, to je lahko dober kandidat
prej, kot v opisu predmeta , kjer boste morda morali nekaj
odstavkov in morda želeli narediti podniz tekme.
Celotnega besedila bo na splošno pusti vam, da dokaj učinkovito.
AI, to je grozno vrste razlage, ampak če bomo hover
nad njim boste videli Auto Prirastek.
Se ne uporablja tako tukaj ampak avto prirastek je koristno
za podobno področju notr, ker Baza podatkov bo poskrbel
procesa plus plusing je vsak čas vam vložek.
Tako da tudi če dve osebi dobesedno kliknite Submit
hkrati in poskušali ustvariti vrstico nekako
v podatkovni bazi, enega od jih bo dobil številko I,
druga bo dobil število I plus 1.
Vam ni treba skrbeti
približno dveh številk, ki dodeljena na enak način, če ste bili
to storiti sami v kodi.
Vse je v redu.
Tako sem nekako všeč, kadar imamo ime za to.
Torej, kaj še Shrani.
Je to dobro oblikovanje za tabele baze podatkov?
In kot prahi, če zarjavel na SQL ali ste nekako
da samo vedno zatiska oko na tisto, kar se je dogajalo,
Lahko bi vnesli točno to -
tiste tri vrstice v tistem črni in beli poziv
v ukazno vrstico stranka ali pa bi lahko storil
da je v zakoniku programsko.
Torej, vse phpMyAdmin je delal za me je pravkar mi prihrani trud
spominjanja včasih sintakso in tipkanje ven
kot dolgočasno ukazov.
Vse je v redu.
Torej to ne zanima najboljši dizajn, eno polje mizo.
Zdaj lahko imamo Stvari, kot so profesorji
in lokacije in opise.
Toda tudi takrat, samo z imenom
opredeliti tečaje ne čuti idealno.
Kaj imajo na splošno smo storili v preteklosti
Če ste uporabili baze podatkov enoznačno vrstice?
Ne uporabljate varchars običajno.
Ja?
[Neslišno Opomba]
Ja. Tako tipično seveda ID.
Torej, najpogostejši približati predvsem,
pri uporabi okvir je pravzaprav samo
za uporabo več kot celo število.
Naj gredo naprej in to.
In to lahko naredimo v nekaj načinov, ampak obvestilo, če bom povečavo
v na dnu tukaj.
Jaz bom rekel, dodate kolone na koncu tabele,
ponavadi samo za vizualno Udobje daš ID
na začetku tabele čeprav ima ta nima pravega
funkcionalni učinek.
Tako bom rekel, dodate eno stolpce
na začetku tabele.
Grem kliknite Go, da mi daje nazaj, ta UI tukaj.
Recimo ta ID.
Če mislimo, da bomo imeli nič več storiti 4.000.000 tečaje
Polje notr je v redu.
Lahko bi celo skrčil
ampak prostor je poceni torej kdo v resnici briga.
Ampak, smo poskušali napišite Facebook sedaj,
morda ni slaba stvar predvideti velike Ints
ki bi nam dal 64-bitne Ints
ampak potem ste dobesedno podvojitev število bitov
, ki ga uporabljate, Tako majhen kompromis
ampak nekaj, da razmisli.
Zdaj, to je zmedeno zapuščina stvar.
Morda se boste spomnili z uporabo MySQL
da kadarkoli izjavi, int polje, da boste pogosto videli številne
ob njej kot številom 10.
To nima nič opraviti z velikost številom
ali število bitov.
To ima opraviti s številko znakov, ki se uporabljajo
vizualno zaslon da int polje
pri uporabi terminalsko okno.
Tako lahko vidimo, da v trenutku.
Torej, ne bodite zavedeni s tipkanjem številk
tam, čeprav je učinkovito prosi nas
za eno tukaj.
Sem, da bom iti naprej in rekli, nepodpisan.
Ni razloga, da bi odpadke vseh naših negativnih številkah
saj baza podatkov Na splošno se bo
da prevzame pozitivno vrednosti ali nična.
ID definitivno ne bi smelo biti nič.
In kaj menite o tem indeks za ta ID področju?
Naj bo primarni.
Torej, kaj če, čeprav, kot sem lahko Samo pomislite na eni CS164 seveda
na Harvardu in le ena CS50 tečaj na Harvardu
in to je zal veliko res na splošno
da je mogoče izjeme [Neslišno] oba semestra
ali nekaj čudnega takega.
Vendar je še bolj pomembno, Zato je bolje
uporabiti številčno sestavni ID- enolično identifikacijo predmetov in ne
kot le edinstven niz?
Ja?
[Neslišno Opomba]
OK, zanimivo.
Torej, če bi imeli neke vrste cross-našteti tečaji.
Torej, to je dober primer.
Nisem prepričan, da bi rešiti da, čeprav
s tem, da jim enako ID številko, če je to
kam greš s tem.
Ne? OK. Ampak definitivno Kotiček za primer, da razmisli.
Če obstaja vrsta - potrebujemo nekakšen
od aliasing potencialno.
[Neslišno Opomba]
Prepričan.
[Neslišno Opomba]
To je dober primer.
Ime lahko preidejo Čas, povsem razumna.
Kaj še?
[Neslišno Opomba]
Žal mi je, ponovi.
[Neslišno Opomba]
Ja, točno.
Torej res, da je Zares je
da je z uporabo 32-bitni int verjetno bo hitreje
kot neke spremenljivke dolžina polja znak.
V prvem primeru se lahko dobesedno prilegajo v register,
da ne omenjam veliko manjši pomnilnik odtis.
V slednjem primeru boste morali narediti letovišče [fonetična]
za godalne primerjave, ki sebi z linearnim
v velikosti Niz potencialno.
Torej, to je samo lepo optimizacija,
in zlasti, da se dogaja
da nam to, kar imenujemo Bolj učinkovito pridruži
čez nekaj trenutkov.
Torej, kaj je to.
Bomo določajo, da To je primarna
ker jaz ne posebej želijo skrbeti ali mislite
kaj število je tečaj.
Naj jim bo na karkoli vrednote hočejo.
Jaz bom rekel, avto prirastek tako da sem lahko oddajajo to podrobnost.
Kot v prahi boste morda vedo, da Harvard
vsaj ima edinstven Številke za tečaje.
Ne spomnim se kaj to je tečaje.
Vem, da je CS50 kataloška številka je 4949,
popolnoma samovoljno.
Ampak tam je čudna primeri kotu, da tudi
v registrarial smetišče od tečaja podatki katalog,
včasih tečaji, stare tečaji so številne, kot 4.
Ampak tehnično, da polje je polje char
da preprosto začne z 0004.
Torej tudi tu, morate biti previdni pri razlikovanju
med stvarmi, kot Seveda kataloško številko
, ki bi lahko imeli nekaj kadrovskih Pojem fiksne dolžine, 0004,
in vam ni treba shraniti da je na primer v ints.
Takšna področja bi morala shranjeni drugje.
Torej, v Harvardu, če smo bili dejansko pripravi tečaj
nakupovalno orodje, to je verjetno ne zadostuje
da število tečajev le z 1, 2, 3, 4.
Bomo verjetno dogaja, da imajo
da ima drugo področje imenovana kataloška številka,
ki naj bi tudi biti enotna osnova
konvencij o človekovih tukaj vendar to ni najboljša izbira
za posebni identifikator, ker da bi bilo s spremenljivo dolžino.
To ne bi bilo štiri znakov, bi bilo pet.
V bistvu, mislim, da nekaj Pred leti se premikajo
da vzrok pet znakov "obstaja je bilo več kot 999 predmeti
skupaj ali kaj podobnega da ali 9999 tečaji.
Torej, da bi lahko npr kjer je polje ni primarni
vendar mora biti edinstvena.
In e-poštni naslov je še eden.
Morda boste želeli, da je to edinstvena
vendar ne nujno vaš primarni ključ.
Vse je v redu.
Torej, kaj mi poka iz drugega miza veliko hitreje, kot je ta.
Torej bom to imenujemo ena Inštruktorji in grem
da bi to skupaj število stolpcev dve.
Grem, da se naučijo my Nauk iz zadnjega časa.
Bom poklical Prvi stolpec ID.
Bom poklical drugi stolpec Name.
Jaz sem tudi storil VARCHAR.
Grem prevzeti nobene Profesor ima ime več
od 60 znakov, čeprav Zdaj to lahko ga potiska
z nekaj dolgih imen, posebna ljudje s srednjim imenom.
To je v redu za danes.
Torej, dajmo se pomaknete tukaj.
Naj bo enkrat ta nepodpisani.
Naj bo to primarno.
In bomo dovoli podvojenih imen
v primeru, da je dve John Smith je ali nekaj takega.
In zdaj imamo dve tabeli.
Torej sedaj, se zastavlja vprašanje, kako povezati
V inštruktor s tekom?
Počutim se, kot da sem nekako dobili pred sebe
ker če inštruktor uči tečaj,
moj prvi instinkt bi pravzaprav, da se vrnete
tečaje zavedaš, to ni bila dobra ideja.
Dovolite mi, da dejansko dodali en stolpec Na koncu tabele
kliknite Go, in bom to imenujemo inštruktor.
In bom naredil to varchar in bom naredil to 60.
In morda ga bom pustil null zdaj
V primeru, da ima seveda ne so nepodpisani v inštruktorja
ki se včasih zgodi, preden Izraz se začne in kliknite Shrani.
Kateri od teh modelov vam je bolj všeč?
Prvič, v kateri imamo miza ločeno inštruktorja
ali druga ko smo dodajte polje predmeta?
Tako da je tesno povezana inštruktor pri teku.
[Neslišno Opomba]
OK. Dobro. Ampak naj potisnite nazaj.
To je tako enostavno, kot sem lahko samo tip ime osebe
v tej tabeli, kot zagotovo da ima neko vrednost ali -?
[Neslišno Opomba]
Vse je v redu.
No, naj bo težko tukaj.
Torej, naj povem, da To je seveda CS51
in vem, da je učil Letos dve osebi.
Torej, Henry Leitner Jesse Tov ampak -
tako da bom dal vejico med obema, kajne.
Res sem dober pri CSV iz minulih dni.
[Neslišno Opomba]
Točno, prav.
Takoj, ko se zatečejo za kaj takega,
ki bi lahko počutijo razumna in boste morda počutili
kot je to nekako pametno.
Jaz sem nekako zadolževanja eno Ideja, ki je dobro deloval,
izposoditi novo idejo in nekako jih združiti.
Ste nekako popolnoma uničil točko z uporabo baze podatkov
V prvi vrsti zato, ker Če je ena od vrednosti
uporabe je hitrejši iskanja zaradi različnih indeksov
in mize, ki lahko treba zgraditi za vas
sam motor baze podatkov.
Zdaj, če želite iskati Za vse tečaje
da Jesse uči, sedaj imate da ne podniz ujemanje na vseh
polj inštruktorja,
kar dejansko pomeni linearno znova iskati, ker imate
da bi našli to samovoljno niz kjerkoli treh znakov
na področju inštruktorja, pred
znotraj morda sledila z vejico.
Tako da to definitivno ni nič dobrega.
Naj gredo nazaj k mizi.
Naj grem naprej, da Tečaji, da razveljavite.
Jaz bom samo pojdi naprej in spustite to polje.
In če hočeš To storite ročno,
sintaksa je ALTER TABLE Tečaji DROP inštruktorja.
Torej, gremo naprej in pravijo, da za to.
In se vrniti k temu prejšnjo idejo
kjer sem imel ločeno miza za inštruktorje.
Toda zdaj to zdi malo kot sem lahko dal tečaj
V tabeli teku je in inštruktor
V tabeli inštruktorja, ampak jaz nekako se mora povezati dva.
In kako bi ti Predlagam, da naredimo?
[Neslišno Opomba]
Dobro. Torej, kaj je to.
In ti bi to lahko pokličete Tabela v teoriji nič.
Bom namenoma call it kaj veliko
okvirov bi pravijo, med njimi
Laravel kot boste videli v nekaj.
Jaz ga bom poklical seveda podčrtaj inštruktorja.
Uporaba singular v tem Primer za vsako od besed
in vse z malimi črkami enkrat, in tudi z -
nato po abecedi razvrščene od leve proti desni.
To je povsem samovoljno, ampak to kaže, da je konvencija
V veliko teh okvirih PHP v drugih jezikih.
Koliko stolpcev moram v to, kar imenujemo pridružijo mizo,
da se pridružijo dvema drugima mize skupaj?
Trije stebri?
Katerega - kaj bi bili?
[Neslišno Opomba]
OK. Dobro. To deluje.
In smo lahko tehnično cut kotiček tukaj, ampak veliko
okvirov, zlasti bi še vedno dal celo obeh vrstic
posebne identifikatorje, čeprav semantično vrstica
da smo res skrbi ali stolpci, da smo res skrbijo
o sta slednji dve kaj si rekel, seveda ID
in inštruktor ID.
Torej, kaj je to.
Poklical bom to vrstico le osebno, tako kot smo prej.
Ampak tale bom poklicati seveda ID.
Tole bom poklicati inštruktorja ID.
In bom določajo, da vsi
od njih so nepodpisani Ker hočem
da bi povečali svoj 4 milijard int območje.
Nobeden od njih bi morala biti nična.
Grem se določi, da ID mora biti še vedno primarni.
Še enkrat, to je le konvencija,
Veliko okvirov tudi če ne razporedijo
v temelju potrebujejo identifikator za vrstico,
Izkazalo se je, da je primeren za kodo, SQL, ki se dogaja
za samodejno ustvarjeno za nas.
Torej bom pustil, da kot primarni.
Ampak zdaj sem nekako imajo odločitve design,
Seveda ID in inštruktor ID.
Kaj indeksi morebitne bi jih dobil?
Če bom pustil nobenih indeksov, kaj posledice?
Kaj pa posledice?
Uspešnost kot prej, kajne?
Če ni indeks Največ kar lahko naredite, je nekako
z dne [neslišno] prek Vsa stvar išče številk.
Tako, da ne čuti pameten.
Bi morala biti glavna?
Torej, zakaj ne?
Zakaj ne primarni?
[Neslišno Opomba]
Popolna. Tako smo roll out [fonetično] primarno.
Smo že izbrali, da.
Torej, bi moral biti edinstven?
[Neslišno Opomba]
Dobro. Torej, če predpostavimo en inštruktor na tečaj,
popolnoma v redu.
In to je definitivno Skupno primeru
vendar smo že dal dol eno morda pozna primer.
CS51 dobil dva inštruktorje tako da smo nekako
Od sedaj zajebali v tem primeru.
Če smo se dovoli le en inštruktor,
smo lahko dejansko narediti pot z pridružijo mizo skupaj,
vrnete na prejšnji pristop
in mu ni ime osebe Morda, vendar je inštruktor ID.
Če veste, vsak seveda, kot je pravkar en inštruktor imate lahko samo
en stolpec.
Vendar je variabilnost kaj nas je spravil v težave.
Vse je v redu.
Torej, bi moral biti edinstven?
Ne Celotno besedilo ne počutim se uporablja.
Kot smo že povedal, da je
za kot podniz ujemanje opisov.
Torej, kaj je indeks?
No, indeks je verjetno naš najboljši kandidat
ki pripoveduje MySQL optimizirati pri iskanjih to
ali naj pripravi, optimizirati za poizvedbo ali se pridruži
kot bomo videli v nekaj trenutkov
tako, da so si Malo bolj učinkovito
kot karkoli povsem linearno.
Ne želim, da avto korakih tem področju?
Torej ne, ker res nadrejeni element obstaja
V tabeli tečajih.
To je, kjer je to bo dobil plus,
plus, ko je dejansko vstavljena.
Tu, to vse dogaja treba ročno vstavi
pri nas predvidoma v kodi.
Torej, kaj je enostavno določiti da sta tečaj ID
in inštruktor ID imeti indeksov.
Zdaj bomo šli naprej in shranite.
In sedaj, samo za prikaz vam korespondenca
med tem, kar je lepo GUI prijazen vmesnik
in linijski vmesnik ukaz.
Dovolite mi, da gredo naprej in narediti sledi na tej MySQL poziv.
Jaz bom rekel uporabe courses50
ki je poljubno ime Dal sem za to bazo podatkov.
In zdaj, jaz sploh ne se spomnite, kaj smo naredili.
Naj tip razstavne mize
in na splošno podpičja bo tvoj prijatelj tukaj
do konca poizvedbo.
In to je to.
Torej, tukaj so vrstice ali namesto tabele, ki jih imamo tukaj.
Zdaj pa sem pozabil, kaj Seveda izgleda,
zato naj ne opisujejo tečaje in zdaj vidim neke vrste ASCII
ali različica tega, kar phpMyAdmin je delal
in vidim, da je ID int.
Obstaja da 10.
Kaj to pomeni?
To samo pomeni, da ko je Prikaže se dogaja, da sprejmejo
največ 10 znakov na okno terminal.
Je nullable?
Ne, to je primarni ključ.
Lahko pa imajo privzete vrednosti?
No In dodatno, ki je nekaj posebnega zastav, kot so auto prirastek.
Torej, kaj je pravkar naredil nekaj za hitro vstavljanje tukaj.
Jaz grem gor da - reciva.
Oglejmo spremeniti stanje na diapozitiv
kjer sem nekako vnaprej pripraviti to.
To je povzetek potem Vse tri od teh tabelah.
Že samo ročno natipkan prvi ukaz.
In tukaj, sem šel naprej in vpišite drugim za vas.
To je le stilni stvar.
Na splošno veliko ljudi tip stavke SQL v vseh kape
in nato imena tabel in Imena polj v spodnjem primeru,
če samo zato, ker vrsta stojnic
kaj je tvoja terminologija in kaj je sintaksa baze podatkov.
Torej, tukaj imamo tri mize, tečaji, inštruktorji,
in tečaji inštruktorji.
V diapozitiv sem vnaprej, Nisem imel polje ID
ampak to ni dejansko slaba stvar sploh.
Mi bi samo videli Tretji stolpec tam.
Sem storil, da sem?
Torej, zdaj mi predlagamo, da naredimo kup vstavki.
Torej, tukaj je nekaj podatkov, Jaz bom zoom noter
Torej bom predlagala da je na tečajih,
imamo opravka le s tremi programi.
In sem se odločil, te tri Ker oni so reprezentativni
nekaj lepih - imajo nekaj lepih lastnosti.
CS1, CS50, CS51, ki jih imajo večje ID
ampak kaj je tisto, ID je popolnoma nepomembno.
To je samo vrstni red, v katerem so bili samodejno vstavi z mano.
Kaj pa inštruktorji?
Torej sedaj, saj Henry Leitner uči tako CS1 in CS51,
to je nekako oportuno posledice za naše načrtovanje.
In Jesse uči CS51 in Malan uči CS50.
Torej, zdaj - ali bolje, to so le edinstvene ID-teh ljudi.
In tečajev in inštruktorji, - voditelji tečajev, opazil sem.
ID1 tečaj, ki bil je CS1 učil
inštruktor ID1, ki je Henry.
ID2 Tečaj, ki sem mislil, da se je naučil CS50
inštruktor ID2, ki je Malan.
In potem končno, CS51, in Opazili smo dve vrstici.
In zdaj to, zakaj se pridružijo miza je močna je učil
ki sta Henry in Jesseja.
Torej je to vse lepo in prav,
ampak jaz komaj spomnim off vrhu
v moji glavi, kdo je kdo tukaj.
Kako se lahko morebiti Ukvarjamo se s tem v kodi,
ne da bi trde koda stvari?
No, to je, če sam SQL začne, da postane naš prijatelj.
In bom predlagal, da lahko vnesete naslednje.
To bom storil pri v Dejanska poziv.
Dovolite mi, da gredo naprej in vstaviti te stvari.
Torej, v tabelo tečaji kaj je naredil točno to, kar smo imeli
pred nekaj trenutki.
Grem naprej in reči, dajmo vstavite CS1 in CS50.
Oglejmo vstaviti nekaj več vrstice naenkrat, CS51.
Zdaj pa grem naprej in shranite.
Vse je v redu, tako da sem pravkar poustvariti tako hitro
kot sem lahko odnosi smo pravkar videli na zaslonu.
In tako tukaj imamo Leitner, tukaj imamo Malan.
Dajmo sebe druga vrstica, in Tov.
Zdaj pa mi rešiti to.
In jaz sem jih počne namerno v istem vrstnem redu.
Ne, pozabil sem dati ta avto prirastek.
Dovolite mi, da hitro popraviti to.
Jaz bom to popraviti v spletu številka.
To je kot stran.
Dejstvo, da nisem mogla vstavite Leitner in Malan
in Tov ni uspelo, ker nisem navedite identifikacijsko številko, čeprav
to je pričakoval eno in jaz pozabil, da preverite auto prirastek,
kar pomeni, da so bili vsi Privzeto dobili nič.
Ampak to je potem v nasprotju s katero lastnost, da smo določeno.
Bila kršena Primarni ključ tako da sploh ni mi pustil.
Naj popravim.
Zdaj pa grem nazaj Kartico vstavite tukaj in določite
da želim Leitner Malan in še ena vrstica, Tov.
In zdaj nazadnje, samo tista, ki je malo težko
zapomniti, je seveda inštruktor.
Dajmo zdaj, da vstavite Seveda ID1 je inštruktor ID1
tako da je CS1 in Henry.
ID2 Tečaj je inštruktor ID2 ki je CS50 in Malan.
In potem zadnji, ki smo jih skrbeti je seveda ID3
ki je CS51, se učil
inštruktor za golf 1, ki je Henry.
In tri kot tudi poučeval za 3, ki je Tov.
Torej, upam, da zdaj to smo poustvarili -
Prekleto, sem storil isto stvar.
Tečaj za inštruktorja potrebuje avto prirastek.
Vse je v redu.
Jaz bom to storijo hitreje ta čas, Seveda 1, predmet 1, 2, 2.
In zdaj nazadnje, mi CS51 ki ima seveda ID3 in Henry.
In seveda ID3 in Jesse.
Da izgleda dobro.
OK. Torej, zdaj, gremo nazaj k oknu terminala.
Torej, če sem opisal Tečaji bomo to videli.
Če želim videti tečajev morem zdaj storiti izberite zvezdo iz tečajev,
pol debelega črevesa in zdaj vidimo te vrednote.
In zdaj, kaj Ne bi rad, da naredim?
Izberite zvezdo od inštruktorjev, To je, kot sem pričakoval,
in izberite zvezdo iz tečajev - Seveda inštruktor podčrtaj.
Torej, kako sem zdaj pridružiti te tabele?
Torej lepota izbrale Vrednosti ID na ta način
da če mislite o ob mizo tečaja
in inštruktor Tabela in potem vstavljanje
med tema dvema v vašem umi tečaj za inštruktorja
miza lahko nekako linija up vseh teh osebnih stolpcev
tako da jih združi v en ogromen stolpec, ki ima vse
informacij nam je mar.
SQL sintaksa za to ni nujno očitna,
ampak poglejmo, če lahko to storite.
Torej, izberite zvezda iz tečajev,
in tam je nekaj pot kot smo to lahko storili.
Grem zadeti nastopiti le, da vrsta formata stvari lepo,
ampak to je samo puščica simptom orodje odjemalca,
to nima nič narediti z SQL sama.
Torej, izberite zvezda iz tečajev.
Grem zdaj pridružiti miza tečaji
na mizi inštruktorja seveda.
Kako? Na področju imenovano courses.id višini tečaj
podčrtaj inštruktorja dot kaj je ime
ustreznega polja tukaj, da želim nekaj.
To ni ID.
To je - kaj žal?
>> ID predmeta.
OK, naj pomanjšanje.
Ampak želim, da bi to en korak naprej.
Sem zdaj to naredil miza in to.
Sedaj želim vleči ta tip v kot dobro.
Torej, mi dovolite, nadalje pridruži vso to zadevo
na inštruktorja miza o čem?
Podčrtaj tečaj instructor.instructor id
višini instructors.id.
Tako smo lahko zapišemo to vprašanje na več načinov.
Vrstni red, v katerem sem to storil sploh ni tako pomembno.
Malo sem to storil v moj um od leve proti desni.
Lahko bi to storil v nekaj različnih načinov
ampak če sem zdaj pol debelega črevesa in pritisnite tipko Enter,
Opazil sem dobil nazaj novo Začasna tabela, množica rezultatov
tako rekoč v bazi govoriti.
In kaj imam v tej stvari?
Imam na ID, ime, drugo ID, ki je nekako zmedeno
se mi v tem trenutku, Seveda ID,
inštruktor ID, ID, in ime.
Torej, na koncu dneva imamo prave podatke zdaj.
Vidim, da se je naučil CS1 z Leitner, ki je učil CS51
z Leitner in TOV, in CS50 je učil Malan.
Ampak jaz sem malo živčen To dvoumnost sem jih ustvaril.
Kaj je dvoumnost Jaz sem namiguje?
Ja?
[Neslišno Opomba]
Obstajajo trije ID stolpce.
Tako bomo lahko dejansko popraviti to in bomo dejansko dogaja
da odloži na naš okvir v končni fazi bi nam pomagali pri tem,
vendar se izkaže, da obstaja Ključna beseda v SQL imenuje S,
kjer lahko določite alias, novo ime za polje
tako da bomo lahko temu izognili dvoumnost v celoti.
Vendar je spoznala, da če ne bomo jo obravnava nekako tako kot pri
da ključno besedo ali okvir,
tam je lahko to dvoumnost, če boste poskušali
Za dostop do polja ID ker očitno obstajajo tisti,
s tam podvojenimi imeni.
Torej, to je pridružila, in mislim, v tvoji glavi oko najboljši način
razmišljati o tem res je, da dve tabeli,
jih line up v način, ki ga želite.
In to je tako imenovani Notranja pridružite v smislu
da smo kombiniranje tabele tukaj.
Obstajajo tudi druge vrste pridruži, da bi lahko srečamo
v daljšem časovnem obdobju, kot so zunanji stiki,
toda večinoma tem je verjetno najbolj pogosti
za rekonstrukcijo podatkov.
Kaj smo storili zdaj na splošno, kar se imenuje
normalizira svoje podatke, tako da ni podvajanja nikjer
v tabelah.
In podvajanje, bi jaz pomenilo, da je prvi pristop.
Če smo omenili Leitner in Tov na več mestih
v zbirki podatkov, ki je ni na splošno najboljša odločitev
še posebej, če njihovo ime premoč spremenite nadurnega ali v primeru
zakonske zveze, dekliški priimek moči se je spremenila želite le eno
kanonično mesto za nekatere vrednost podatkov, kot so imena.
Vse je v redu.
Torej, da povzamem, smo imeli Nekaj ​​konstrukcijskih odločitev, da bo
in najpomembnejše Verjetno zmanjša na približno
teh usmeritvah indeksov.
Vendar naj omenim, ena stvar, kot dobro.
Če grem nazaj v phpMyAdmin,
ena funkcija morda ne boste Prišlo preden
naslednje.
Če grem na tečaj za inštruktorja, Sem že podrobneje navedla, da so nekateri
za te stvari imajo indekse.
Ampak naj gredo na strukturo Kartica za tečaj za inštruktorja.
Dovolite mi, kliknite sedaj na Indexes in opazili naslednje.
Sem tukaj navedel, da je primarni ključ
na stolpec imenovano ID.
To je nekoliko zapletena način opredeljuje kardinalnost
in tako naprej, kot da se nanaša velikost igrišča v bajtov.
Ampak zdaj imam tudi drugo polje, seveda ID, ki je -
Seveda ID, ki je narejeno vnaprej in edinstvena, OK.
Jaz sem tale v napredovanje za nas.
Torej, zakaj je to - naj me spusti to zaradi razprave.
Oh, veš kaj sem storil?
OK. Torej, prej, eden Nevarnosti uporabe orodja GUI
kot je ta, ko smo bili Oblikovanje tega pridružijo mizo,
inštruktor miza Seveda, spomniti, da sem določeno
da želim indeks na tem področju
in indeks o tem drugo polje.
Stranski učinek preverjanje obeh teh škatel
na istem zaslonu, da phpMyAdmin sklepati, da je
da želim, ne dve ločene indekse,
da želim pridružiti indeks, ki je na splošno le koristno
ali najbolj koristna, ko ste iskanje po ne eno polje
vendar sta oba od teh področij.
In to je, zakaj smo imeli Povezati jih je
tako da je padel na tla "vzrok, da ni bilo tisto, kar sem nameraval.
Namesto tega bom to redo tukaj.
Jaz grem na tekmovalno ID
in pod bolj sem pravkar reči dodati indeks.
In jaz grem pod inštruktor ID in pravijo, dodamo indeks.
In zdaj, če bomo kliknite tukaj zaznali imamo tri indekse,
eno primarno in kot sem namenjena eno za vsako
tistih tujih ključev.
In pravim, da tuji, saj Seveda ID v tej tabeli kart
na katerega polja, samo da se jasno, v drugi tabeli.
Primarni ključ se imenuje ID, V tabeli so imenovani tečaji,
in enako ponudbo za drugo.
Toda zdaj, je zanimiva trik in res tehniko.
Pravkar sem šel naprej in pustite me to, da malo bolj počasi.
Na istem zaslonu, obvestilo pravi pogled na razmerje tukaj.
I kliknite na to in zdaj sem opazil dobili storiti nekaj omejitev.
Torej, eden izmed upsides tudi
ne le z uporabo konceptualno tujih ključev in drugih tabel
kot da smo pravkar naprej je ki jih opredeljuje indeks
na njih lahko imajo Baza podatkov vam pomaga še bolj
zagotoviti celovitost tega področja.
Natančneje, ne morem zdaj določite prek tega padca
določa, da je polje Seveda ID
v tej tabeli, dejansko Karte na courses.id.
Podobno je inštruktor podčrtaj ID preslikajo v instructors.id.
Zdaj, zakaj je to koristno?
No, opazil na desni strani na desni strani, kar se zdi zdaj.
Sedaj lahko naučil baze podatkov, da če Henry
na primer, kdaj se upokoji in njegova vrstica izgine
iz tabele inštruktorja skupaj torej biti
črta, ne morem preko tega kaskadni pristop zagotovi
da so vsi tečaji Poučuje ni več povezana z njim.
Jaz lahko učiš baze podatkov izbrisati vrstice
v tako imenovanem priključi mizi samodejno, če Henry ali če ena
njegovih tečajev izgine.
Zdaj, zakaj je to nekaj posebnega?
Ja?
[Neslišno Opomba]
Saj je le, da to storite enkrat in dolgoročni, kajne?
To je zelo enostavno, če nekako Ljudje prihajajo in odhajajo, prihajajo tečaji
in gredo, zbirka podatkov lahko samo, da steljo s tečaji
in s fakultete, ki niso več pomembne niza podatkov.
In vaše podatke začne, da bi dobili zelo grdo in umazano in zastarele,
in tako sem lahko razvrstite
za izvršitev nekaterih te omejitve.
Ja?
[Neslišno Opomba]
Ve, s pomočjo tega.
To je zaslon, na katerem smo se podate povezavo
med tujim ključem in primarni ključ.
Torej, vse o poimenovanju konvencij sem namignil
da prej so le konvencije.
Ni inherentni pomen.
To je zaslon ki je uporaben le
po tem, ko je določeno indekse vsako od teh področij, kot smo storili.
In za to spustnem meniju imamo nekaj stvari, na primer
če je seveda črta lahko dejansko preprečuje, da izbris
zgodilo, če obstaja je vrstica v tej tabeli
s samo rekel, Zapore.
Z drugimi besedami, Henry ne more upokojiti
dokler ga prekiniti povezavo od CS51 in CS1.
Torej, to je dobra stvar.
Vendar bi lahko sprožila napake v kodi
če ne predvidevamo, da ali imamo lahko kaskade,
kaskadni podobna všeč kaskadnih slogov
in kaskadno Slap pomeni, da če -
če Henry upokoji tako - ga dobili črta
tako da bo njegov vrstica tukaj se črta.
Noben ukrep ne pomeni nič ali null je nekako koristno, če ste prijazni
of želite nekaj zgodovinskega zapisa of Henry, ki je učil CS51,
ampak si samo želim, da polje je ničen, tako da vrstice tam
vendar pa to ni več povezano z njim.
Torej, to so zelo močni tehnike, ki jih lahko
pa je treba uporabiti, čeprav V interesu posebej
od prihranite od sebe.
Torej, dovolite mi, da omenja Nekaj ​​končnih podrobnosti tukaj,
sestavinami, s katerimi da bi bilo koristno
kot smo načrtovali za oblikovanje baz podatkov.
Imate tudi možnost izbire v motorju baze
, ki ga uporabljate v kodi.
Če ste seznanjeni od CS161 si morda -
ali celo 61, morda vam na splošno biti seznanjeni z datotečnimi sistemi.
In tam je stvari podobno, NTFS in HFS +
in X2FS4 [fonetična] in 3 in tako naprej.
Obstaja več načinov shranjevanja podatkov na mizi.
Podobno so tam Različni načini shranjevanja podatkov
v zbirki podatkov privzeto vsaj v aparatu
z najnovejšo različico MySQL.
Mi smo bili z uporabo baze podatkov motorja pozval, NoDB,
ki podpira nekaj lepih lastnosti.
Ampak še pogost je tudi imenovano MyISAM in še en
, ki se lahko uporabljajo, je pomnilnik, kar pomeni, da ne dajo nič
na disku, samo vztrajati stvari v spomin.
Za večino del, boste verjetno ne bo kaj narobe šele začenja
z NoDB, ampak za vse projekte , ki se nagibajo k vključujejo visoke stopnje
vstavljanja na primer, tako kot veliko hitre sečnje,
sto stvari na sekundo ali pa na tisoče stvari.
Kadarkoli imate Veliko stvari bo
na v podatkovni Potem je ta vrste
Odločitve o nižji ravni začetek, da se vključijo.
Celotno besedilo funkcija za Primerek deluje samo v MyISAM
tako da ima posledic.
Vendar pa lahko to spomni, dajmo vsaj motivirati, zakaj nam ni vseeno
O NoDB posebej.
A razmere dirke Na splošno se nanaša na kaj?
V redu, to je aluzija na primer nekatere
o ste morda slišali v let preteklosti ali 161 ali 50
kjer imate sostanovalko, oba zelo rada mleko,
kdo od vas pride domov najprej odpre hladilnik ni mleko,
zaprite hladilnik sprehodu po ulice do CVS in pridobite
v vrsti za nakup malo mleka.
Medtem, tvoj sostanovalec pride nazaj.
Rada ima tudi mleko.
Odprite hladilnik in spozna, ni mleka.
Tu se je nato prejme shranjevanje, morda drugo CVS.
Hitro naprej nekaj minut kasneje prideš nazaj in zdaj oba
o ste kupili mleko.
Eden od njih bo zdaj pokvari, ker jih ne
kot so mleko, da je veliko in to je problem, kajne?
Ker oba pregledati stanje neke spremenljivke
in sprejeli odločitev, ki temelji na njej, čeprav država
te spremenljivke je bil v bistvu v postopku, ki se spreminjajo,
vse to se počasi Čas, ki je potreben
priti v in iz CVS.
Torej, kaj je nekako neumno realnega svetovno rešitev za ta problem?
Pustil sporočilo, kajne?
To se je zgodilo zadnjič.
Vedno pustiti sporočilo ali Žabica stvar dobesedno.
In rečem ključavnico, saj Če ste vzeli ali je CS161,
zaklepanje je temeljna Ideja v tej vrsti svetu.
Tako lahko pride do dirke pogoji tudi v svetu baze
in ti se verjetno spomnite, morda iz CS50 financiranje, če si vzel 50,
ta oznaka, da smo dejansko dali vidva v specifikaciji
v času, tako da je vaš Operacija je tako imenovana atomska.
Če boste želeli, pri tem primera, nakup deleža zalogi
in da ima stock neke posebne simbol.
Rekli smo, da uporabite kodo, kot so to, ker s pomočjo tega
za dvojnik ključa posodobitvi sintaksa, ki je zgrajen
v MySQL ste dejansko gre bodisi v vložku
ali posodobitve po početje izberite videti
če je stalež že tam.
Z drugimi besedami, Analog Svet nakup zalog
mleka in hladilnika lahko, prvič,
Pred nakupom deleža Google si morda želeli, da izberete
Iz baze vseh Delnice družbe Google, ki ima v lasti David
da vidim, če je lastnik nič ali več.
Ko boste videli, če je lastnik nič ali več imate
da naredite naslednje.
Imate storiti vložek
če je lastnik vzrok nič " ni vrstica za Davidom še ni,
ali boste morali narediti posodobitev če je vsaj v teoriji želite
da ima eno vrstico na uporabnika.
Problem je izbira da je število delnic
in nato posodabljanje oziroma vstavljanje bi se lahko prekine
nekdo drug na drugega računalniški terminal poskuša kupiti
ali prodati nekaj Davidu Delnice zalog bodisi
za dobre namene ali neke zlonamerne namene.
To je kot bi šli v trgovino če vaš sostanovalec vrne
in preveri stanje spremenljivke.
Torej ta skladenjski ob kar je nekako primerno
Za CS50, preprečuje, da problem v celoti.
In to ravno počne vse, da Čar zaklepanje za vas,
zdaj pa s temi vrstami projektov za ta predmet
ki najverjetneje bo gre bolj zapletene podatkovne nize,
ne morete doseči Vedno to Valentnost.
Vse, kar se zgodi naenkrat ali pa sploh ne
brez prekinitve tako elegantno.
In tako MySQL, drugo baze podatkov motorja,
podporne stvari imenovane ključavnice,
, s katerim lahko rekli Zakleni miza, tako da je le eden zdravljenje
in na splošno le en uporabnik lahko dotikajte se v vsakem trenutku
brati ali pisati in potem ga lahko odklenete.
To je primer iz ene lastnih referenc MySQL je,
kjer, če imate kot banka Račun, ki ga poskušate
odšteti denar iz in nato dodamo denar.
Morda boste želeli poskrbite, da sta
od teh stvari se dogajajo skupaj
tako da ni matematične napake
In nihče izgube Denar, nekako.
Problem s ključavnicami čeprav v bazo podatkov je
da je na splošno pomeni celotna tabela je zaklenjena
kar pomeni, če imate sto ljudi, ki skušajo
da poslujejo z banko na spletu ob istem znesku
časa le eden jim lahko greš naenkrat.
, Ki je neumen, še posebej, na strežnikih danes
da imajo osem seveda, 16 Seveda pa imajo ogromno
spomina, ni Razlog za serializirajo vse
vaših transakcij, če tisti, kupci so samo še
za interakcijo s svojimi vrstic.
Torej NoDB vam omogoča, da stvari bolj inteligenten
in to na splošno Pristop ste vzeli v kodi,
kot ste uporabili nekaj imenovano transakcijo.
In to storite na splošno PHP kodo,
Ruby kodo, Python, karkoli.
Vendar je koda SQL, ki je končno uporabi je to
običajno.
Začnite posel potem navedeni dve ali več poizvedb
, ki ga želite izvesti v celoti
brez prekinitve ali pa sploh ne.
Tam lahko celo nekaj izberite izkaze v
ali nekaj izbriše ali posodobitve.
Ampak lepo stvar je, da Baza podatkov bo dovolj pameten
zagotoviti, da bo le zaklepanje vrstic oni dejansko
Pri tem sodeluje posodobitve ali pa izbere ali izbriše.
Torej, če imaš na tisoče vrstic in ste se dotika le tri
od njih, le da podmnožica tabele bo zaklenjen
kar pomeni, da teh drugih 99 kupci lahko dotaknete svoje vrstice
ne da bi serializirajo in upočasnili z vami.
Medtem, to je najlepše vidik transakcij.
So transakcije zaznavajo kot 161 na datotečnem sistemu,
oni poslu
kar pomeni, da lahko roll jim nazaj, jih lahko razveljavite.
To je podobno kot ukaz ali nadzor F baz podatkov.
Če ste odkrili del Pot skozi vse
svojega delovanja različnih podatkov, ustreliti, kaj je šlo narobe.
You dobesedno izvršiti drugačna SQL poizvedb roll nazaj
In vse to samo trend - vse izjav, ki jih izvedenih
Po rekoč začetek Transakcija izginejo
kot da se ni nikoli zgodilo,
kar je presenetljivo močna stvar.
In to so vrste Stvari gotovo v 50 smo nekako
od pomesti pod preprogo in si nekako prevzame
da bo vse dobro.
Toda, ko začnete razmišljanja o realnih projektih
in resnični uporabniki in celovitost zbirke podatkov,
To so vrste konstrukcijskih odločitev
da se bodo pomembna.