>> Bone.
Do, sen plua prokrasto, SQL, Strukturita Query Language.
Do, vi probable uzis tiun ĉe Almenaŭ en CS50, eble en CS165,
eble en via propra personaj projektoj.
Kaj kion signifas SQL lasu vin fari, en SQL Server pli ĝenerale?
Jes?
[Inaudibles Remark]
OK, kiu estis tre sekurigita maniero diri ĝin.
Jes. Do permesu vi stoki datumoj
kaj pli grave permesas vin demandi por datumoj.
Kaj tio estas paŝo antaŭen
uzi ion simpla kiel CSV, dekstra.
Komo Disigitaj Variabloj.
Similajn valorojn.
Simile lasu vin savi informoj unu vico
en teksta dosiero.
Sed kio estas la malfacilaĵo de CSV-dosiero por stoki viajn datumojn,
eĉ se vi efektive get vicoj kaj kolumnoj de ĝi?
Jes.
>> Vi ne 'havas la sama organizo
efikeco [inaudibles].
>> Vi ne havas la saman organizo efikeco.
Kion vi signifas?
>> Nu, kiel [inaudibles] havi kiel primara [inaudibles].
>> OK. Jes.
>> Ĝi estas rilata datumbazo vi povas havi plurajn datenbazojn
ligita al ĉiu alia en tre specifaj manieroj.
>> OK. Bona.
>> Estas [inaudibles] fiksi CSV.
>> Kaj lasu min tweak iom terminologio.
Do multaj tabloj ene datenbazo, sekura,
kaj kiu iras trans kio vi povas fari per nur unu CSV.
Sed vere la limigo kun CSV Mi argumentus estas
ke la ineficiencia de gxi.
Ĝi estas tre facila al aranĝo.
Sed se vi volas fari informpeto, kio estas la rula tempo
de iu unuaranga informpeto sur CSV-dosiero?
Mi volas diri estas granda maljuna [inaudibles], rajton, ĉar en la plej malbona kazo,
Ili levigxis je la tre malsupron.
Eĉ se vi estis ordigitaj la tuta CSV-dosiero, se vi ne scias,
ke upfront, bone, vi ankoraŭ tuj havi
por esplorrigardi la tutan aferon.
Do, inter la aferoj Ni tuj akiri
uzu realan datumbaza uzanta lingvo
kiel SQL estas ni povas demandi tio kaj ni povas anticipe
kiel datumbazo diseñadores specifi kio estas la kampoj
ke oni kredeble tuj havi demandojn pri tia, ke homoj
ĉe MySQL aŭ Microsoft aŭ Oracle,
Kiu faris la datumbazon vi uzas povas fari ĉiujn
de la laboremo de elŝeligi, OK,
donis milionon de tiuj IDS.
Kiel ni povas Layout - ilin en memoro?
Ia arbo strukturi eble,
por ke kiam vi faros fakte ekzekutas Select,
ĝi estas io kion estas logaritma aŭ logaritmaj
de logaritma ĝustatempe prefere ol reale devolving
en iu lineara.
Do ni havas multajn agadon laux tiu vojo.
Kaj ni ankaŭ povas stoki multe pli datumo pli facile 'kaŭzi la SQL
Servilo estas tipe stokitaj en RAM kvankam partoj
de ĝi povus esti stokita en disko kaj vi verŝajne scias por nun
ke RAM estas ĝenerale rapida ol diskoj,
do tio estas bona afero.
Kaj ni ankaŭ povas manipuli konkurenco multe pli bone.
Se vi jam prenita 165 aŭ 161, vi scias, ke se du homoj provos
fari la saman aferon samtempe en sistemo,
malbonaj aferoj povas ĝenerale okazos.
Do inter la aliaj trajtoj ni povas akiri, se ni desegnos niaj tabloj
en la ĝusta vojo estas bona apogo kaj sekureco
kiam temas pri konkurenco.
Do, du personoj en du partoj
de la mondo per la sama TTT-ejo, se ili ambaŭ provi
aĉeti ion ĉe la sama tempo, tiu celo ne tuj
iri samtempe.
Iel ili estus serializado de iu alia ol nia propra -
iu alia ol ni mem.
La datumbazo volo fari tion por ni.
Do, kiam ĝi estas plej simpla formo,
SQL lasas ni konsulto oni rilata datumbazo.
A rilata datumbazo Estas tiu kiu havas unu
aux pli tabuloj en ĝi tipe.
Kaj se tio estas iom nekonataj,
vi povas vere nur pensas de tiu kiel Excel aŭ nombroj
aŭ Google kalkultabelojn.
Ĝi nur havas vicoj kaj kolumnoj kaj tipe la supro de ĉiu
de tiuj vicoj havas nomon por tio.
Do eble ĉi ID kolumno, la nomo kolumno,
la adreso kolumnon kaj tiel plu.
Kaj tiam vi povas havi multoblajn tiaj tabloj se vi volas
komenci jalonando malsamaj tipoj de datumoj.
Sed vi eble memoras almenaŭ el CS50 ke ni provis
doni al vi gui-bazita ilo [inaudibles]
mastrumi vian datumbazon.
Ĝi estis nomita phpMyAdmin.
Do estas nur koincido ke Ĝi estis skribita en PHP, vere,
sed gxi estis nur ttt-bazita interfacon al datenbazo.
Kaj tra la diversaj langetoj kaj ligiloj, vi povus komenci
konfiguri datumbazo cxar vi mem.
Sed bona ilo por komenci preni iom pli komforta
kun estas ankaŭ la komandlinion kliento.
Do, se uzi la CS50 Aparato aux vere uzi ajnan makro PC
kiuj havas komandan linion MySQL kliento, vi povas fari ĝin ankaŭ speco
de malnova lernejo, kiel ĉi tio.
Kiel flanken la MySQL-projekto, almenaŭ la malferma fonto versio
el tio oni nun nomas MariaDB por diversaj kialoj oni povas legi
supren en Vikipedio, sed ĝi estas la sama programaro,
ĝi estas la sama sintakso ks,
preskaux la saman kodon bazo.
Kaj do, kiam mi estas en ĉi tiu suflori mi povas nun interagi
kun mia datumbazo multe pli permane.
Do trafa, lasu min iri antaŭen
kaj simple malfermi terminalo fenestro.
Hazarde mi uzos la CS50 Aparato sed vi povas fari tion
en plej ajnan sistemon en kion vi havas la rajton
softvaro instalita.
Kaj Mi faros MySQL-u por uzantnomo John Harvard
en ĉi aparta sistemo,-p por pasvorto, ke mi tajpas
en iom pli sekure batante Eniru.
Nun mi instigis.
Mi tuj tajpi rugxa en la CS50 Aparato
kaj nun mi vidas esence ke la sama ekrano.
Sed estas komandoj nun ke ni povas ektajpu
kiel montras datumbazoj, kaj ke tuj montri al mi ĉiujn
de la datumbazoj ke mi devas jam kreitaj en la sistemo,
preskaux la sama listo vi vidus en phpMyAdmin.
Ekzistas kelkaj aliaj kiel informoj skemo kaj provo,
kion se vi poke ĉirkaŭ la CS50 Aparato, ni kaŝi iun
de tiuj malsupra nivelo tabloj
sed ili estis tie ĉiuj ĉi tempo.
MySQL reale havas malaltan nivelon propraĵoj kiel salutnomoj
kaj pasvortojn por la datumbazo mem, ne por via kandidatiĝo
ke vi povus esti kurante sur gxian supron.
Do anticipe, hodiaŭ, mi kreis paron datumbazojn,
unu el kiu estas nomata courses50.
Probabloj estas iuj el vi jam uzis CS50 Kompreneble komercaj ilo,
kio estas granda interfaco por la matrikulisto kurson katalogo.
Kaj tio estas fakte bela dataset paroli pri 'aferon,
unu, ni estas speco de ĉiuj evidente familiara kun kursoj
kaj instruistoj kaj kunveno lokoj kaj la tuta varo
de ordinaraj aferoj de universitato,
sed ĝi ankaŭ ricevis kelkajn Interesa ŝancojn
por dezajno.
Do ni pensis ke ni uzus la nocio de kurso katalogo
kaj komerca ilo kiel ekzemple tra hodiaŭ ordigi
de Kadro kelkaj el la dezajno decidoj ni devas fari.
Do ni komencu tie.
Supozu, ke mi vere volis reprezenti la super simpla
kompreneble butikumado iloj.
Kaj la plej simplaj mondo Mi povas imagi la unu estas
en kiuj estas kursoj kaj tie estas instruistoj.
Kaj ni supozu por pro diskuto
ke ĉiun kurson havas almenaŭ unu nomon.
Do ni komencu skizi ĉi eksteren.
Mi tuj uzos phpMyAdmin ĝuste kiel oportuneco,
do ni ne devas tajpi ekstere ĉiuj el la pridemandojn permane.
Sed ĉi tie mi estas en mia courses50 datumbazo.
Se ne konas ĉi tion, ĝi malebligos esti tre facila unufoje vi plonĝi
en via propra projekto se vi ŝatus uzi ĝin.
Mi tuj krei tablo nomata Kursoj
kaj mi povas pensi nur de unu kampo
nuntempe, la nomo de kurso.
Mi tuj iros antaŭen kaj diru al mi unu kolumno.
Nun, kiel vi memoras vi ricevas interfaco kiu estas iom
kiel ĉi tio.
Kaj la aliaj upside sincere de phpMyAdmin estas ke gxi speco
de mem-instruante kaj ke tra la dropdowns, vi povas ordigi
de vidi kion via ebla dezajno decidoj estas.
Do mi tuj donos CXiu apartajxo nomon.
Tio estas la nomo de tiu kolumno.
Kaj kiel pri ĝia datumtipo?
La plejparto de vi devus scii en almenaŭ kelkaj el tiuj datumtipoj
el antaŭan sperton.
Kio estas taŭga pro paso nomo?
SXaron?
>> Varchar.
>> OK, varchar kio Estas Variablo Char.
Kaj kion faras tiu signifas pli teknike?
[Inaudibles Remark]
OK. Do ĝi estas kordo.
Kaj la var aspekto de ĝi implicas kio?
Variablo. Sed kion tio signifas?
Jes?
[Inaudibles Remark]
Ekzakte. Do estas variablo numeron de gravuloj
en la kordo supren al iu maksimumo.
Do jen nia unua dezajno decido.
Ni fakte devas decidi kiom da bitokoj maksimume
atribui al ĉiu tian kordo.
Ĝenerale parolante, ke vi volas speco de ne fari gxin tro malgranda,
ne fari ĝin tro granda 'Kaŭzi evidenta
se tro malgrandaj, vi estas nur tuj komenci detranĉante datumoj
kaj vi perdos informo.
Kaj se ĝi estas tro granda, vi estas nur ia rakontanta al la datenbazo
atendi kaj optimumigi por pli da datumoj
ol ĝi povus efektive iam ricevis.
Do kio estas racia sento numeron por la nomo de iu kurso?
60? OK, do 60.
Tio ŝajnas bela racia
kiel longe estas tie estas neniu esceptoj al tiu.
Tie estas vere neniu malmola, rapida regulo.
Por esti honesta, por historiaj kialoj multe
de homoj elektos 255 'Kaŭzus por jaroj, kiuj estis speco
de la defaŭlta maksimuma uzante 8 bitokoj - 8 bitojn kiel via vendotablo.
Mi tute pli [inaudibles] povus uzi potencoj de 2
sed ĝi estas speco de pala.
Do ni povas iri kun 60.
Tio ŝajnas akceptebla tiom longa
kiel ni eventuale ne pentos 'Kaŭzi ke estas supera baro.
Nun, supozu ke la malo decido estis farita,
Ne variablo signoj sed nur la Char kampo.
Do malkiel C kaj C + +, char ne signifas unu signo
kaj datumbazojn kiujn ĝenerale signifas fiksita nombro
de signoj en cxeno.
Kio estus la inversita kaj / aŭ malavantaĝo de mia elektante 60
por char kampo, anstataŭ varchar?
Tiu estas ĝuste la unua speco de la jugxo vi devos fari
kiam inspekti [fonetika] el de projekti kun viaj kompanianoj.
Yeah, Sharon denove.
[Inaudibles Remark]
Bona. Do, se la nomo estas malpli
ol 60 tiam vi malŝparas kion ajn tio delto estas
inter 60 kaj la reala longa.
Por ke ĝuste sentas malŝparema, pli bitokoj ol vi bezonas.
Sed kial ĝi ekzistas?
Certe estas iu inversita.
Jes?
[Inaudibles Remark]
Certe. Do iam vi sciu, ke la fiksita nombro
de gravuloj kiel 10 ciferoj por telefonnumero ekz.
Sed kiu zorgas, kiel tio Ne nur diru 11 ĉiuokaze
aŭ kial ne diri 60 ĉiukaze kun la varchar?
Kio avantaĝo cxu ni preni per scio kaj desegni
por fiksa nombro de karakteroj?
[Inaudibles Remark]
Vi estas sur la ĝusta vojo.
Do estas optimumigo sed gxi vere estas de - yeah?
[Inaudibles Remark]
OK. Bona. Ni fokuso sur tiu lasta parto.
Do indeksado.
Do rezultas, se vi scii anticipe, ke ĉiuj
de viaj kampoj iras esti 60 signoj,
vi povas vere pensi pri tio kolumno en la Excel datumbazo
kiel havanta tre rekta, forlasis pravigitaj
kaj dekstra pravigita lateroj
ĉar ĉiu kolumno estas 60 signoj larĝa.
Tio signifas, ke tiu kordo estas 60 signoj for
el tiu ĉi ŝnuro, 60 karakteroj for de ĉi tiu
kaj ĉi tiu kaj ĉi tiu.
Do simple ŝatas reen kiam vi lernis C, vi devis senvica atingo
en la mondo de sensilo, sama ideo tie.
Se via kolumno estas reprezentita uzante nur fiksa longeco signoj,
vi povas efike indekso hazardo al 60 aŭ 120 aŭ 180
kaj vi povas ricevi ĉe individue kordoj multe pli rapide.
Tiam se anstataŭ via kolumno havis rekta maldekstra bordo por tiel diri
sed tre malglata dekstra rando al la kolumno
ĉar vi multobligita havas 10 signojn,
15 signoj, 5 signoj.
Do ĉi tro estas tradeoff.
Kaj kelkfoje nur per provo kaj eraro
kaj eksperimentado Ĉu vi povas diveni
el kio vere rajtas nomi estas sed ĉi tiuj estas la specoj
de demandoj kiuj devus iri
tra viaj mensoj kaj / aŭ tabloj kiam venas tempo
desegni vian datumbazon.
Do, ne nepre rajto respondi sed vi devus
almenaŭ havi iun frazo aŭ du en menso
savkopii ajn decido kiun vi farus.
Ĉiuj pravas.
Do ni observu movo en la pelas tien
ke estas phpMyAdmin la UI.
Do, la defaŭlta valoro por nomon, mi devus specifi
ke ĝi devas esti havi defaŭlta valoro de nula?
Kion vi opinias?
Ĉu kurson havas nulan nomon?
Nur sentas strangan, ĉu ne?
Mi ne povas pensi pri iu sennoma kursoj ĉe Harvard.
Kaj eble estos kelkaj obskura angulo kazo
kie oni kompreneble estas donita nombro
kaj la instruisto ne havas elektis nomon por gxi sed -
Mi volas diri, aĥ kun tio,
kiel ni eĉ ne bother subtenas tion.
Mi dirus en la intereso de belan puran datenbazo,
ni specifi ke vi ne povas havi defaŭlta valoro de nula.
Alternative, ni povus fari iu kiel Untitled kurson
kio ne estas kontraste kun Mac OS, kaj Vindozo fari
kiam vi kreas dosierujo, ekzemple,
sed kiu faras iom pli da senco
tiel ke la homa vidi ion.
Ni parolas pri back-end datumbazo supozeble
pro paso katalogo.
Do mi ne vere eĉ kiel la ideo de donante ĝin
en Untitled kurson nomoj
ĉar tio ne estas vere tuj helpos al iu ajn.
Do ni lasu tion kiel neniu, kio signifas ke kiam vi enmetas
en cxi tiu datenbazo, vi havas doni ĉiun kurson nomon
kiuj sentas iom purigisto al mi.
Ĉiuj pravas.
Do rulumado plui, kodoprezento.
Ĉi nur devas vidi per signaroj kaj whatnot
se vi iam vidis mencioj de sveda
en phpMyAdmin tio 'Kaŭzi la popolo
kiu verkis phpMyAdmin estis sveda.
Estas ke PHP aŭ trovas gxin MySQL?
Unu el la du, mi forgesis momente.
Sed tio estas nur por historiaj kialoj
sed vi povas esprimi ĉiun karaktero en la angla
ke vi povis kun sveda tial estas plejparte ne-afero.
La CS50 Aparato kvankam estas uzata - agordita por uzi UTF-8,
tiel ke ĝenerale devus Ne pop ĉe vi.
Atributoj.
Do neniu el tiuj estas vere grava ĉi tie.
Mi vidas Duuma, sensigna, Sensigna zerofill,
kaj sur ĝisdatigo nuna tempstampo.
Tio kampo nur validas por iu nombra kampo
aŭ iam kampoj.
Do ni devos salti super ke tute.
Nula. Ĉu ĉi tiu kampo estus nula?
Do ne. Ni jam havas tiaj konversacioj.
Do ni ne volas defaŭlta valoro.
Ni ne volas ke ĝi estu nula.
Kio pri indekso?
Ekzistas kvar elektojn tie.
Kion tio signifas, se oni specifu
ke tiu vico tuj esti primara ŝlosilo?
Pensante reen al CS50 aŭ CS165 se vi jam prenis ĝin.
[Inaudibles Remark]
Ekzakte. Do primara ŝlosilo per difino estas la kampo
kiuj unike identigas ĉiu vico en ĉi tiu tabelo.
Kaj vi povas fidi lin fari ke unika identigo.
Do, kion tio signifas tiam al esti simple solaj?
Nu, speco de tiuj du havas specon
el sub implikaĵoj sub la kapuĉo.
Sed ĝenerale, primara ŝlosilo estas speco de kontrakto vi faros
kun la datumbazo afero.
Kiam mi faras pridemandojn serĉas kurson,
Mi tuj uzos ĉi aparta kampo.
Kaj ni revenos al kial ni havu du
tiajn elektojn ĉi tie, ĉefa aŭ sola.
Unika nur diras, tiu kampo tuj esti unika
sed mi ne vere farante ajnan speco de verbaj devontigo tien
uzi tiun kampon fari mian serĉoj
pro kialoj ni devos vidi en nur unu momento.
Se ni difini anstataŭ indico, kion tio signifas por specifi
ke kampo havas indicon pri tio?
Jes?
[Inaudibles Remark]
Ekzakte. Jam pasis optimumigita por konsulto.
Do vi - datumbaza servilo, Oracle, MySQL, kio ajn,
estos ĝenerale labori lia magio malantaux la scenoj unufoje vi klaku
tiun eblon kaj poste klaku Konservi kaj konstruos
supren tipe arbo strukturo, B-arboj, se vi jam vidis
aŭ aŭdis ekstere kio estas tre mallonga rigardante arbon
kiu donas al vi tre belan logaritma propraĵoj
kiam serĉado sur la datumoj.
Se vi ne specifas indekso sur kampo, kio okazas
esti la kurado tempo de serĉado
por ajna [Fonetika] Kompreneble nomo?
Kio estas tio?
[Inaudibles Remark]
Ho, [inaudibles], lineara, ĉu ne?
Se ĝi ne estas optimumigaĵoj donita al la datenbazo
kaj vi ne kredis la datumbazo kia
de datumoj por atendi.
La plej bona vi povas fari estas ĉeko ĉiun kiam vi serĉas
por iu valoro, speciale se tie povis
fakte esti duobligitaj.
Tutteksta dume, ni skuu niaj manoj ĝis nun.
Sed ĝenerale, ĉi tiu estas tipo de indekso kiu permesas vin
por optimumigi por ŝlosilvorto sercxojn sur kampo.
Do povas esti tiu bona kandidato
cxar kiel kurson priskribo kie vi povus havi paro
de alineoj kaj vi eble volas fari subĉeno alumetoj.
Kompleta teksto estos ĝenerale lasu vi faras tion sufiĉe efike.
AI, ĉi tiu estas horora speco de klarigo, sed se ni ŝvebi
super gxi, vi vidos Aŭto pliigo.
Ne aplikebla ambaŭ tien sed aŭtomata pliigo estas utilaj
cxar kiel int kampon pro la datumbazo prizorgos
de la procezo de plus plusing ĝi ĉiufoje vi faros insert.
Por ke eĉ se du personoj laŭvorte klaku Submetu
en la sama tempo kaj provi krei vicon iel
en la datenbazo, unu el ili ricevos la numeron mi,
la aliaj ricevos la nombro mi plus 1.
Vi ne devas maltrankviligi
pri du nombroj estas atribuita idente se vi estus
fari tion mem en kodo.
Ĉiuj pravas.
Do mi specon de like kie ni hvas nomon esti.
Do ni klaku Save.
Ĉu ĉi tiu estas bona dezajno por datumbazo tabelo?
Kaj kiel flanken se rusta en SQL aŭ vi speco
de ĵus ĉiam dikan okulo al kio estis okazanta,
Mi povus esti tajpita ĝuste tio -
tiuj tri linioj ĉe tio nigra kaj blanka prompto
en la komandlinio kliento aŭ mi povus esti farinta
ke en kodo programmatically.
Do ĉiuj phpMyAdmin faras por mi estas nur ŝparas al mi la peno
memori iam la sintakso kaj tajpado ekstere por
kiel teda komandoj.
Ĉiuj pravas.
Do tio ne sentas kiel la bona dezajno, unu kampo tablo.
Nun ni povus havi aferoj kiel instruistoj
kaj lokoj kaj priskribojn.
Sed eĉ tiam, uzanta nomo nur
identigi kursoj ne sentas idealo.
Kio ĝenerale havas ni faris en la pasinteco
se vi jam uzis datumbazoj por unike vicojn?
Ne uzante varchars tipe.
Jes?
[Inaudibles Remark]
Jes. Tiel tipe kurson ID.
Do, la plej komuna alproksimigi tie speciale
uzinte kadro estas fakte nur
uzi numeron kiel entjero.
Do lasu min antaŭeniri kaj fari tion.
Kaj ni povas fari tion en kelkaj manieroj, sed avizo se mi zomi
en sur la fundon ĉi tie.
Mi tuj diros aldoni unu kolumnoj ĉe la fino de la tablo,
ĝenerale nur por vida oportuneco vi metis IDs
komence de la tabelo eĉ se tiu ne havas veran
funkcian efikon.
Do mi tuj diros aldoni unu kolumnoj
komence de la tablo.
Mi iras al klaku Iru, ke donas min denove ĉi UI tie.
Ni nomas tiun ID.
Se ni opinias, ke ni tuj havos plu farita 4 milionoj kursoj
an int la kampo estas belaj.
Ni povus eĉ hezitis gxin malsupren
sed spaco estas malmultekosta do, kiuj vere zorgas.
Sed, ni provas skribi Facebook nun,
eble ne malbona afero anticipi big ints
kiu donos al ni 64-bita ints
sed tiam vi estas laŭvorte duobligante la nombro de bitoj
ke vi uzas, tiom malgranda tradeoff
sed ion por konsideri.
Nun, ĉi tiu estas konfuza legaco afero.
Vi povus memori el uzanta MySQL
ke iam ajn vi rakontos an int kampo vi ofte vidas nombro
apud tio kiel la numero 10.
Ĝi havas nenion komunan kun la grandeco de la nombro
aŭ la nombro de bitoj.
Tio devas fari kun la nombro de karakteroj kiuj estas uzataj
al vide ekrano ke int kampo
uzinte fina fenestro.
Do ni povas vidi ke en momento.
Do, ne estos trompitaj tajpante nombroj
en tie kvankam estas efektive demandi al ni
cxar tie.
Super cxi tie, mi tuj iru antaŭen kaj diru sensigna.
Tie ne estas kialo por forĵetaĵoj ĉiuj niaj negativaj nombroj
ekde la datumbazo Estas ĝenerale irante
supozi pozitiva valorojn aŭ nula.
La ID definitive devus ne esti nulaj.
Kaj kion vi opinias pri la indekso por ĉi ID kampo?
Ni faru ĝin primara.
Do, kio, se, tamen, kiel mi, facile nur pensas pri unu CS164 kurson
ĉe Harvard kaj nur unu CS50 kurson cxe Harvard
kaj tio estas bela multa vera entuta
ke estas eble esceptoj [Inaudibles] ambaŭ sesmonatoj
aŭ io stranga ŝatas tion.
Sed pli fundamente, kial estas pli bone
uzi numerajn integralo ID por unike identigi kursoj prefere
ol nur unika kordo?
Jes?
[Inaudibles Remark]
OK, interesaj.
Do, se ni havis ian transversa listigitaj kursoj.
Do, tio estas bona ekzemplo.
Mi ne certas se mi havus solvi tiun kvankam
donante al ili la saman ID nombro se tio
kie vi iras kun tio.
Neniu? OK. Sed definitive angulo kazo por konsideri.
Se tie estas speco de - ni bezonas ian
de aliasing potenciale.
[Inaudibles Remark]
Certe.
[Inaudibles Remark]
Tio estas bona ekzemplo.
La nomo povus ŝanĝi super tempo, tute racia.
Kion alian?
[Inaudibles Remark]
Pardonu, diru denove.
[Inaudibles Remark]
Jes, ĝuste.
Do vere, tio estas la reelaj clincher estas
ke uzante 32-bitan int estas probable tuj estos rapida
ol kelkaj variabloj longeco char kampo.
En la unua kazo, la tedaĵo laŭvorte persvadis en registro,
ne mencii multe malgrandaj memoro piedsigno.
En la lasta kazo, vi tuj devi fari feriejo [fonetika]
al kordo komparoj kiujn en si kun la lineara
en la grandeco de la kordo potenciale.
Do, estas nur bela optimumigo,
kaj aparte tio okazas
al ni fari kion oni nomas Kunigas pli kompetente
en nur unu momento.
Do ni faru tion.
Ni devos specifi ke tio estas primara
ĉar mi ne aparte volas zorgi nek opinias
pri kio la nombro estas de kurso.
Ili prenu en kion ajn valorojn ili volas.
Mi tuj diros auto pliigo do mi povas subcontratar tiu detalo.
Kiel en flanken vi multobligita scias ke Harvard
almenaŭ ja havas unika numerojn por kursoj.
Mi havas neniun rememoro kion ĉi kursoj estas.
Mi scias ke CS50 la Katalogo nombro estas 4949,
tute arbitra.
Sed estas bizara angulo kazoj en kiuj eĉ
en la registrarial escorial kompreneble katalogo datumojn,
kelkfoje kursoj, malnovaj kursoj havas numeron kiel 4.
Sed teknike tio kampo estas char kampo
ke simple komencas per 0004.
Do ĉi tie tro, vi devas esti zorgu pri karakterizajn
inter aferoj kiel Kompreneble katalogo nombro
kiuj havu iom da homa nocio de fiksa longeco, 0004,
kaj vi ne devus stoki ke ekzemple en ints.
Tia kampo devus esti stokita aliloke.
Do, en Harvard, se ni efektive fari kurson
komerca ilo, ĝi estas probable ne sufiĉa
number kursoj kun nur 1, 2, 3, 4.
Ni probable tuj havi
havi alian kampon vokis katalogo numeron,
kiu ankaux supozis esti sola Based
je la homaj konvencioj tien sed ĝi estas ne la plej bona elekto
por sola ensalutilo ĉar gxi estu variablo longa.
Ĝi povus ne esti kvar signoj, gxi estu kvin.
Fakte, mi pensas kelkaj jarojn movas
kvin karakteroj 'kaŭzas tie Estis pli ol 999 kursojn
entute aŭ io simila ke, aŭ 9.999 kursoj.
Do, tio povus esti ekzemplo kie la kampo ne estas primara
sed ĝi devas esti unika.
Kaj retpoŝta adreso estas alia.
Vi eble volas gxin esti unika
sed ne nepre via primara ŝlosilo.
Ĉiuj pravas.
Do lasu min bang alian tablo multe pli rapide ol ĉi tiu.
Do mi tuj, por voki ĉi unu Instruistoj kaj mi tuj
doni tiu tuta nombro de kolumnoj de du.
Mi iras al lernu mia leciono de lasta tempo.
Mi iras por voki la unua kolumno ID.
Mi iras, por alvoki dua kolumno Nomo.
Mi ankaŭ faros Varchar.
Mi tuj supozi neniu instruisto havas nomon plu
ol 60 signoj, kvankam nun tio povus esti puŝas ĝin
kun kelkaj longaj nomoj, speciala homoj kun meza nomoj.
Tio estas bone hodiaŭ.
Do ni rulumi pli ĉi tie.
Ni faras ĉi sensigna denove.
Ni faras ĉi primara.
Kaj ni vidos permesi duplikatajn nomoj
en kazo ekzistas du John Smith aŭ io kiel tio.
Kaj nun ni havas du tabloj.
Do nun, ĉi petegas al la demando kiom mi asocii
en instruisto kun la kurso?
Mi sentas kiel mi specon de akiris antaŭ min
ĉar se instruisto instruas kurson,
mia unua instinkto volis efektive estus reiri
por kursoj rimarki, tiu Ne estis bona ideo.
Permesu al mi efektive aldoni unu kolumno ĉe la fino de la tablo,
klaku Iru, kaj mi nomas tiun Instructor.
Kaj Mi faros ĉi varchar kaj Mi faros ĉi 60.
Kaj eble mi devos lasi gxin nula nun
en kazo la kurso havas ne estis sensigna en instructor
kio kelkfoje okazas antaŭe termino komenciĝas kaj klaku Save.
Kiuj el tiuj dezajnoj ĉu vi preferas?
Unua unu kie ni havi apartan instruisto tablo
aŭ la dua kie ni ĵus aldoni kampon por la kurso?
Do ĝi estas intime kunligi edukanto kun kurso.
[Inaudibles Remark]
OK. Bona. Sed lasu min puŝi malantaŭen.
Estas nur tiel simplan kiel mi, facile nur tajpu en la nomo de persono
en ĉi tiu tablo, kiel certe Kiu havas iun valoron aŭ -?
[Inaudibles Remark]
Ĉiuj pravas.
Bone, lasu min esti malfacila tie.
Do lasu min diri, ke ĉi kurso estas CS51
kaj mi scias, ĝi estas instruata tiu jaro por du personoj.
Do, Henry Leitner kaj al Jisxaj Tov sed -
do mi simple metis komo inter la du, dekstre.
Mi estas vere bona ĉe CSV el pasintaj tempoj.
[Inaudibles Remark]
Ekzakte, dekstra.
Tuj kiam vi veni por ion kiel tion,
kiun povus senti racia kaj vi eble sentas
kiel tiu estas speco de inteligenta.
Mi ia pruntado unu ideo, kiu estas por labori bone,
prunti novan ideon kaj speco de kombini ilin.
Vi estas ia tute venki La punkto de uzi la datumbazon
en la unua loko 'kaŭzo se unu el la valoroj
uzi gxin estas pli rapida serĉoj ĉar el la diversaj indeksoj
kaj tabloj kiuj neniom esti konstruata por vi
per la datumbaza motoro mem.
Nun, se vi volas serĉi por ĉiuj la kursoj
ke Jesse instruas, nun vi devos al vi subĉeno kongruas je ĉiuj
de la instruisto kampojn,
kio efektive signifas lineara serĉu denove 'aferon vi havas
trovi ĉi ajna aro de tri gravuloj ie
en la instructor kampo antaŭis
ene eble sekvis per komo.
Do tio definitive ne aŭguras bone.
Do lasu min iri reen al la tablo.
Permesu al mi iri antaŭen al kursoj, malfari tion.
Mi tuj ĝuste iri antaŭen kaj faligis tiun kampon.
Kaj se vi volas fari tion permane,
La sintakso estas Alter TABLE kursoj DROP edukanto.
Do ni iru antaŭen kaj diru jes al tio.
Kaj reiri al tiu pli frua ideo
kie mi havas apartan tablo por instruistoj.
Sed nun ĉi sentas iom kiel mi povas meti kurson
en la kurso tablo kaj instructor
en la instruisto tablo sed mi iel bezonas por ligi la du.
Kaj kiel vi proponas ke ni faru tion?
[Inaudibles Remark]
Bona. Do ni faru tion.
Kaj vi povus voki ĉi tablo en teorio nenion.
Mi iras al intence nomas tion kio multe
de kadroj farus nomas, inter ili,
Laravel kiel vi vidos en iom.
Mi iras por voki lin kurson substreko edukanto.
Uzanta singularo en ĉi kazo por cxiu el la vortoj
kaj ĉiuj minuskloj denove, kaj ankaŭ kun la -
tiam alfabete ordo el maldekstre al dekstre.
Ĉi tio estas plene arbitra sed ĝi emas esti konvencio
en amaso de tiuj kadroj en PHP en aliaj lingvoj.
Kiom da kolumnoj mi bezonas en tio, kion ni nomas aliĝi tablo
kunigi du aliaj tabloj kune?
Tri kolumnoj?
Which one - kion ili estas?
[Inaudibles Remark]
OK. Bona. Tio funkcias.
Kaj ni povis teknike tranĉi angulo tie sed multe
de kadroj en aparta estus ankoraŭ doni eĉ tiuj vicoj
unika IDs kvankam semantike la vico
ke ni vere zorgas pri aŭ la kolumnoj, ke ni vere zorgas
pri estas la lasta du el kion vi diris, la kurso ID
kaj la edukanto ID.
Do ni faru tion.
Mi vokos ĉi vico nur ID, ĝuste kiel ni faris antaŭe.
Sed ĉi tiu Mi iras voki kurson ID.
Ĉi tiu mi tuj voki instructor ID.
Kaj mi tuj specifi ke ĉiuj
el ili estas sensigna Ĉar mi volas
maksimumigi mia 4 miliardo int gamo.
Neniu el ili estos la nula.
Mi iras al precizigi ke ID devus ankoraŭ esti primara.
Kaj denove, ĉi tiu estas nur konvencio,
multe da kadroj eĉ se vi ne ordigi
el funde bezonas unika identigilo por la vico,
rezultas ĝi estas konvena por la kodo, la SQL ke okazas
esti aŭtomate generitaj por ni.
Do mi lasos ke kiel primara.
Sed nun, mi specon de havas dezajno decido,
Kompreneble ID kaj instructor ID.
Kio indeksas se iu devus ili havos?
Se mi ne lasos indeksoj, kio estas la implico?
Kio estas implikacio?
Agado kiel antaŭe, ĉu ne?
Se estas nenia indico, la plej bona vi povas fari estas afabla
de [inaudibles] tra la tuta afero serĉi nombroj.
Por ke ne sentas inteligenta.
Devus esti primara?
Do kial ne?
Kial ne primara?
[Inaudibles Remark]
Perfekta. Do ni ruliĝi el [fonetika] primara.
Ni jam elektis tion.
Do, cxu tio estos solaj?
[Inaudibles Remark]
Bona. Do, se vi supozas unu instruisto por Kompreneble,
tute bone.
Kaj tio estas definitive la komuna kazo
sed ni jam demetu unu eble familiara ekzemplo.
CS51 havas du instruistoj tial ni estas afabla
de nun ŝraŭbitaj en tiu kazo.
Se ni farus tion permesus nur unu instruisto,
ni povus efektive fari vojon kun la aliĝi tablo aro,
reiru al la antaŭa alproksimiĝo
kaj ne metis la nomo de persono sed eble la instruisto ID.
Se vi konas ĉiun direkton, kiel ĝuste unu instruisto povas havi nur
unu kolumno.
Sed la variebleco estas kio akiris al ni problemojn.
Ĉiuj pravas.
Do, cxu tio estos solaj?
No Plena teksto ne sentas aplikebla.
Kiel ni antauxe diris, ke estas
cxar kiel subĉeno kongruas por priskribojn.
Do kio pri indekso?
Nu, indico estas probable nia plej bona kandidato
kiu diras al MySQL optimumigi por serĉoj pri tiu
Aux mi ellabori, optimumigi por serĉoj aŭ kunigas
kiel ni vidos en nur unu momento
por ke ili estas iom pli efika
ol io pure lineara.
Ĉu mi volas auto pliigas tiu kampo?
Do ne, ĉar la vera patro elemento ekzistas
en la kursoj la tablo.
Tie estas kie gxi estas tuj ricevi pli,
krom kiam tio vere enmetita.
Jen, tio estas ĉiuj irante esti permane enigita
por ni supozeble en kodo.
Do ni simple specifis ke ambaŭ kompreneble ID
kaj instructor ID havas indeksoj.
Nun ni iru antaŭen kaj helpos.
Kaj nun, nur por montri vi la korespondadon
inter kio estas agrabla GUI amika interfaco
kaj la komandlinia interfaco.
Lasu min, kaj faru la jenaj ĉe ĉi MySQL prompto.
Mi tuj diros uzo courses50
kiu estas la arbitra nomo Mi donis al cxi tiu datumbazo.
Kaj nun, mi ne faras eĉ rememoru, kion ni faris.
Do lasu min tajpi show tabloj
kaj ĝenerale punktokomojn Estos via amiko tie
por fini la pridemando.
Kaj tie ĝi estas.
Do jen la vicoj aŭ pli ĝuste la tabloj, ke ni havas ĉi tie.
Nun, mi forgesas, kion kurso aspektas kiel,
do lasu min do priskribi kursoj kaj nun mi vidas specon de Askio
aŭ versio de kio phpMyAdmin estis faranta
kaj mi vidas ke ID estas int.
Tie estas ke 10.
Kion tio signifas?
Tio simple signifas, ke kiam ĝi estas montris ĝin tuj kapti
ĝis 10 signojn sur la terminala fenestro.
Ĉu ĝi nullable?
No tio estas la primara ŝlosilo.
Cxu gxi havas defaŭlta valoro?
No Kaj ekstra kiu estas speciala flagoj kiel auto pliigo.
Do ni nur faru kelkajn de rapida interpolaciones tie.
Mi tuj iros supren al - ni simple diri.
Ni ŝanĝi stato al slide
kie mi ian pre-prepari ĉi.
Jen resumo tiam de ĉiuj tri el tiuj tabeloj.
Mi jam simple permane tajpis la unua ordono.
Kaj tie, mi iris antaŭen kaj tajpi la aliaj por vi.
Tiu estas ĝuste la stila afero.
Ĝenerale, multaj homoj tajpi SQL asertoj en ĉiuj caps
kaj tiam tablo nomoj kaj kampo nomoj en minusklo,
se nur ĉar ĝi speco de stands
el kio estas via terminologio kaj kio estas la datenbazo de sintakso.
Do ĉi tie ni havas tri tabloj, kursoj, instruantoj,
kaj kursoj instruistoj.
En la glito mi faris anticipe, Mi ne havis la ID kampo
sed tio ne estas vere malbona aĵo ajn.
Ni estus nur vidas tria kolumno tie.
Se mi faris tion ĉi tie?
Do nun mi proponas ke ni faru faskon de interpolaciones.
Do jen kelkaj datumoj, Mi zomi in
Do mi tuj proponi ke en kursoj,
ni nur pritrakti tri kursoj.
Kaj Mi elektis tiujn tri 'Tial ili estas reprezentanto
de iu bela - ili havas iuj belaj ecoj.
CS1, CS50, CS51, ili havi kreskantan IDs
sed kion ID estas kion estas tute pala.
Tio estas ĝuste la ordo en kiu ili auto enigita per mi.
Kion pri instruistoj?
Do nun, ĉar Henry Leitner instruas ambaŭ CS1 kaj CS51,
tio estas speco de oportuna implikacio por nia dezajno.
Kaj Jisxaj instruas CS51 kaj Malan instruas CS50.
Do nun - aŭ pli ĝuste tiuj estas ĝuste tiuj homoj unika IDs.
Kaj kursoj kaj instruantoj, - Kompreneble pedagogojn, rimarki tie.
Kurso ID1, kiuj Estis CS1 estas instruata
per instructor ID1 kiuj estas Henriko.
Kurso ID2, kiun mi pensas estis CS50 estas instruata
per instructor ID2, kio estas Malan.
Kaj poste persiste, CS51, kaj rimarki ni havas du vicojn.
Kaj jen estas, kial la aliĝi tabulo estas potenca estas instruata
per ambaŭ Henry kaj Jisxaj.
Do tio estas tute pura kaj bona,
sed mi apenaŭ povas memori la supro
de mia kapo kiu estas kiu ĉi tie.
Kiel vi povas eble trakti kun tiu en la kodo,
sen devi malfacile kodo aferojn?
Nu, tio estas kie SQL mem komencas fariĝi nia amiko.
Kaj mi tuj proponi ke ni povas tajpi la sekvan.
Mi faros tion je en reala prompto.
Permesu al mi iri antaŭen kaj enmeti tion.
Do, en la kursoj tablo ni faru precize kion ni havis
antaŭ momento.
Mi tuj antaŭen, kaj diros: ni enŝovu CS1 kaj CS50.
Ni enmeti kelkaj pli vicoj samtempe, CS51.
Nun, lasu min antaŭeniri kaj savi.
Enorde, do mi estas nur amuzante kiel rapide
kiel mi povas la interrilatoj ni ĵus vidis, sur la ekrano.
Kaj tiel en ĉi tie ni havas Leitner, ĉi tie ni havas Malan.
Ni donu al ni mem alia vico, kaj Tov.
Nun lasu min konservi ĉi.
Kaj mi faras ilin intence en la sama ordo.
Ne, mi forgesis doni tiu auto pliigo.
Permesu al mi rapide ripari tion.
Mi riparos tion en la reta kodo.
Tio malsukcesis kiel flanken.
La fakto, ke mi ne povis enŝovu Leitner kaj Malan
kaj Tov malsukcesis, ĉar mi ne specifi ID nombro kvankam
ĝi estas atendante unu kaj mi forgesis kontroli auto pliigo,
kio signifas ke ili ĉiuj estis defaŭlte ricevas nulon.
Sed kiu tiam kontraŭdiras kion propraĵo, ke ni specifitaj.
La primara ŝlosilo estis seksperfortita do ecx ne lasis min tiucele.
Do lasu min korekti tiun.
Nun, lasu min iri reen al la Enŝovu langeto tie kaj specifi
ke mi volas Leitner, Malan kaj, pli vico, Tov.
Kaj nun fine, la sola Kiu estas iom malfacila
memori estas kompreneble edukanto.
Ni enmeti nun ke Kompreneble ID1 estas instruisto ID1
tial jen CS1 kaj Henriko.
Kurso ID2 estas instruisto ID2 kiu estas CS50 kaj Malan.
Kaj tiam la lastaj ni havas maltrankviligi estas kompreneble IRU3
kio estas CS51, estas instruata
lauxvice instructor 1, kio estas Henriko.
Kaj tri kiel ankaux instruis per 3, kiu estas Tov.
Do espereble nun ni amuzis tiu -
damn it, mi faris la samon.
Kurso instructor bezonas auto pliigo.
Ĉiuj pravas.
Mi faros tion pli rapide tiu tempo, Kompreneble 1, kurso 1, 2, 2.
Kaj nun laste, ni faru CS51 kiuj havas kurson IRU3 kaj Henriko.
Kaj kompreneble IRU3 Jisxaj.
Tio aspektas bona.
OK. Do nun, ni iru reen al la fina fenestro.
Do se mi priskribus kursoj ni vidos tion.
Se mi volas vidi kursoj mi povos nun faru elektu stelon de kursoj,
duon colon, kaj nun Ni vidas tiujn valorojn.
Kaj nun, kion alian mi volas fari?
Elektu stelo de instruistoj, jen kiel mi atendis,
kaj elektu stelon de kursoj - Kompreneble substreko edukanto.
Do kiel mi nun kunigi ĉi tiuj tabloj?
Do la beleco de elektinte la ID valorojn en ĉi vojo estas
ke se vi opinias pri prenante la kurso tablo
kaj la instruisto tablo kaj poste la enmeto
en inter tiuj du en via mensoj la kurso instructor
tablo vi povas speco de linio CXiujn tiuj ID kolumnoj
por ke vi kunigi ilin en unu masiva kolumno kiuj havas ĉiujn
de la informo Ni zorgas pri.
La SQL-sintakson por tiu ĉi ne estas nepre evidentaj,
sed ni vidu, se ni povas fari ĝin.
Do unuaranga stelo de kursoj,
kaj tie estas kelkaj vojon kiel ni povas fari ĉi tion.
Mi tuj trafis Entajpu nur por speco de formato tion bele,
sed tio sago estas nur simptomo de la kliento flanko ilo,
Ĝi havas nenion faru kun SQL mem.
Do unuaranga stelo de kursoj.
Mi tuj nun kunigi la kursoj tablo
pri la kurso instructor tablo.
Kiom? Sur la kampo nomata courses.id egalante kurson
substreko instructor dot kio estas la nomo
de la rilataj kampo ĉi tie ke mi volas paron.
Ĝi ne estas identigilo.
It's - kio, sorry?
>> Kurso ID.
OK, lasu min malzomi.
Sed mi volas preni plupaŝi.
Mi nun faris tiun tablo kaj ĉi tiu.
Nun mi volas tiri ĉi ulo en tiel.
Do, lasu min plu kunigi ĉi afero
sur la instruisto tablo sur kio?
Kurso substreko instructor.instructor identigilo
egalante instructors.id.
Do ni povis esti skribita tiu demando en kelkaj manieroj.
La ordo kiun mi faris tion ne estas ĉiuj kiuj gravas.
Mi nur ia faris ĝin en mian menson de maldekstre al dekstre.
Ni povis esti farita ĉi en la kelkaj diversaj manieroj
sed se mi nun havas la duon colon kaj batis Enter,
Notice mi reiri nova provizora tabelo, Escepte aro
por tiel diri en datumbaza ekparolos.
Kaj kion mi havas en ĉi tiu aĵo?
Mi havas sur ID, nomo, alia ID, kiu estas speco de konfuzante
al mi ĉe la momento, kurson ID,
edukanto ID, ID, kaj nomo.
Do, je la fino de la tago ni havas la rajton datumoj nun.
Mi povas vidi ke CS1 estas instruata per Leitner, CS51 estas instruata
per Leitner kaj Tov, kaj CS50 estas instruata per Malan.
Sed mi estas iom nervoza pri tiu ambigueco mi kreis.
Kio estas la ambigueco Mi aludas al?
Jes?
[Inaudibles Remark]
Ekzistas tri ID kolumnoj.
Do ni povas efektive ripari tion kaj ni iras al reale irante
prokrasti nian kadro finfine helpi nin per tio,
sed ĝi rezultas, ke ekzistas ŝlosilvorton SQL nomata Su,
kie vi povas specifi alias, nova nomo por kampo
tial ke ni povas eviti ĉi ambigueco entute.
Sed rimarkis ke se ni ne trakti gxin iel kiel ĉe
ke ŝlosilvorton aux kadron,
tie estas potenciale tiu ambigueco, se vi provos
aliri la ID kampo ĉar klare ne estas tiuj,
kun duobligitaj nomoj tie.
Do tiu estas kunigi kaj mi kredas en via menso la plej bona vojo
pensi pri vere estas preni la du tabeloj,
vicigi ilin en la maniero kiun vi volas.
Kaj tio estas tiel nomata ena aliĝi en la senco
ke ni kombinante la tabloj tie.
Ekzistas ankaŭ aliaj tipoj de kunigas ke ni renkontas
tra la tempo kiel ekstera kunigas,
sed plejparte tio estas probable la plej komuna
por rekonstrui la datumoj.
Kion ni faris nun estas Ĝenerale, kion oni nomas
normaligo viajn datumojn, tiel ke ne estas duobligo ie
en via tabeloj.
Kaj per duobligo: Mi volus signifinta tiu unua alproksimiĝo.
Se ni estis menciita Leitner kaj Tov en multnombraj lokoj
en via datenbazo, ke tio ne ĝenerale la plej bona decido
speciale se ilia nomo forteco ŝanĝi sobretiempo aŭ en la kazo
de geedzeco, fraŭlino forteco ŝanĝi mem vi volas nur unu
kanona lokon pro iuj datumoj valoro kiel nomo.
Ĉiuj pravas.
Do, al recap, ni havis malmultaj dezajno decidoj fari
kaj la plej gravaj verŝajne reduktita al iu
de tiuj elektoj de indeksoj.
Sed permesu al mi atentigi unu alia afero ankaŭ.
Se mi reirus al phpMyAdmin,
unu trajto vi ne fariĝu renkontis antaŭe estas
la jena.
Se mi iras al la kurso instructor, Mi jam ne specifas, ke iuj
pri tiuj aferoj havi indeksoj.
Sed permesu al mi iri al la strukturo langeton kompreneble edukanto.
Lasu min premas nun indeksoj kaj rimarkis la sekvan.
Mi specifita ĉi tie ke estas primara ŝlosilo
sur la kolumno nomita ID.
Tio estas iomete komplika vojo de preciziganta kardinalo
kaj tiel plu, kiel aludo al la grandeco de la kampo en bajtoj.
Sed nun mi havas ankaŭ alian kampo, kurso ID, kiu estas -
Kompreneble ID kio estas farita anticipe kaj sola, OK.
Mi faris ĉi tiun en antaŭi por ni.
Do, kial estas tio - lasu min faligi tion por la bono de diskuto.
Ho, vi jam scias, kion mi faris?
OK. Do, pli frue, unu el la dangxeroj de uzi la GUI ilo
kiel tiu, kiam ni estis kreante ĉi aliĝi tablo
la kurso instructor tablo memoras ke mi specifita
ke mi volas indekso sur tiu kampo
kaj indekson sur tiu aliloken.
La flanka efiko de kontrolanta ambaŭ el tiuj skatoloj
en la sama ekrano estas ke phpMyAdmin konkludita el tiu,
ke mi volas ne du apartaj indeksoj,
ke mi volas aliĝi indekso kio ĝenerale nur helpema
aŭ plej helpema kiam vi estas serĉado pri ne unu kampo
sed ambaŭ el tiuj kampoj.
Kaj tio estas kial ni devis ilin conjoin tie
do mi lasis ĝin fali 'kaŭzas ke ne estis kion mi intencis.
Prefere, mi tuj refari ĉi tie.
Mi tuj iros al la kurso ID
kaj sub pli mi estas nur dironta aldonu indekso.
Kaj mi tuj iri sub edukanto ID kaj diru aldonu indekso.
Kaj nun se ni klaku tie ĉi, Notice ni havas tri indeksojn:
unu ĉefa kaj kiel mi intencita por ĉiu
el tiuj eksterlandaj ŝlosilojn.
Kaj mi nomas gxin fremda ĉar Kompreneble ID en tiu tabelo mapoj
al kiu kampo, nur esti demeti, en alia tabelo.
La primara ŝlosilo nomata ID, en la tabulo nomitaj kursoj,
kaj sama traktado por la aliaj unu.
Sed nun, estas interesa trompi kaj vere tekniko.
Mi nur iniciatis kaj lasu min faru, ke iom pli malrapide.
En la sama ekrano, avizo diras Rilato view tie.
Mi klaku ĉi kaj nun rimarkas mi get fari kelkaj limigoj.
Do, unu el la upsides ankaŭ
de ne nur uzante koncepte eksterlandaj klavoj kaj aliaj tabloj
kiel ni ĵus on estas ke per difinanta indekso
sur ili vi povas havi la datumbaza helpo vi eĉ pli
certigi la integrecon de tiu kampo.
Specife, mi nun povas specifi tra tiu guto
malsupren, ke la kurso ID kampo
en ĉi tiu tabelo reale mapoj sur courses.id.
Simile, instruisto substreko ID mapita al instructors.id.
Nu, kial estas tiu utila?
Nu, rimarki, dekstre mana flanko, kio aperas nuntempe.
Mi povas nun instruas la datumbaza ke se Henriko
ekzemple iam retiriĝas kaj lia vico malaperas
de la instruisto tablo tute tiel esti
forigita, mi povos per tio kaskada alproksimiĝo certigi
ke iu kursoj instruas trovas ne plu asociitaj kun li.
Mi povas instrui al la datumbazo forviŝi la vicoj
en ĉi tiu tiel-nomita aliĝi tablo aŭtomate, se Henriko aux se unu
de siaj kursoj malaperas.
Nu, kial estas ĉi konvinka?
Jes?
[Inaudibles Remark]
Vi nur devas fari tion unufoje kaj pli longa termino, right?
Ĝi estas tre facila, se ia personoj venas kaj iras, kursoj venas
kaj iru, via datumbazo povis nur get disĵetitaj kursoj
kaj kun fakultato kiu estas plu rilatajn al la datuma aro.
Kaj viajn datumojn komencas akiri tre senordaj kaj malpura kaj malfreŝa,
kaj tial ĉi tie ni povas ordigi
de efikigi kelkaj el tiuj devigoj.
Jes?
[Inaudibles Remark]
Ĝi scias pere de ĉi.
Tiu estas la ekrano kie ni preciziganta ligo
inter fremdaj ŝlosilon kaj primara ŝlosilo.
Do ĉiu el la nomanta konvenciojn mi aludis
por pli frue estas nur konvencioj.
Ne estas imanenta signifon.
Tiu estas la ekrano kiu estas nur utila
post vi specifitaj indeksoj en ĉiu el tiuj kampoj, kiel ni faris.
Kaj pro tio dropdown ni havas kelkon ekzemple
se iu kurso estas forigita vi povas fakte malhelpi ke forigo
okazas, se ekzistas estas vico en ĉi tiu tabelo
per nur diras, Limigi.
En aliaj vortoj Henry ne povas retiriĝi
gxis ni decouple li el CS51 kaj CS1.
Do, tio estas bona afero.
Sed ĝi povis pafi eraroj en via kodo
se vi ne anticipas, ke, aŭ ni povas havi akvofalo,
akvofalon similan ŝati kaskadan stilo littukojn
kaj la akvofalo akvofalo signifas ke se a -
se Henriko retiriĝas do - per iĝi forigita
do staros lia vico tien get forigita.
Neniu Agado signifas nenion aŭ nula estas speco de utila, se vi afabla
el deziras iom historian rekordon de Henry esti instruata CS51,
sed vi nur volas, ke kampo estu nula por ke la vicoj tie
sed ne plu asociitaj kun li.
Do ĉi tiuj estas tre potenca teknikoj kiujn vi povas
kaj devus uzi eĉ kvankam en intereso aparte
savi vin de vi mem.
Do lasu min fari mencio pri paro de fina detalojn ĉi tie,
ingrediencojn kun kiu ke povus esti utila
kiel ni planu por datumbazo dezajno.
Vi ankaŭ havas elekton super la datumbaza motoro
ke vi uzas en via kodo.
Se vi konas de CS161 vi povus -
aŭ eĉ 61, vi eble ĝenerale esti familiara kun dosiersistemoj.
Kaj estas aĵojn kiel, NTFS kaj HFS +
kaj X2FS4 [fonetika] kaj 3, ks.
Ekzistas diversaj manieroj stoki datumoj sur tablo.
Simile estas tie malsamajn manierojn de stoki datumoj
en datumbazo defaŭlte almenaŭ en la Aparato
kun la plej lastan version de MySQL.
Ni jam estas uzanta la datumbaza motoro vokis, NoDB,
kiu eltenas kelkaj agrablaj trajtoj.
Sed alia komuna estas ankaŭ vokis MyiSAM kaj ankoraŭ alia
kiu eblas uzo estas Memoro, kio signifas ne metas ion
sur diskon, simple observu aĵojn en memoro.
Plejparte vi verŝajne ne iros malbone ĵus komencas
kun NoDB, sed pro ajna projektoj kiuj emas implici altaj impostoj
de inserción ekzemple, kiel multe rapida tala,
centoj da aferojn por dua aŭ miloj da aĵoj.
Anytime vi havas multe da taskoj irante
sur la datumaron tiam ĉi specoj
de malsupra nivelo decidoj komenci impliki.
La tuta teksto trajto por Ekzemple funkcias nur en MyiSAM
tiel, ke ĝi havas implikacio.
Sed vi povas memori tion, ni almenaŭ motivi kial ni gravas
pri NoDB en aparta.
Raso kondiĉoj ĝenerale referencas al kio?
Enorde, tio ĉi estas aludo al ekzemplo iuj
el vi eble auxdis en jaroj pasintaj, cxu 161 aŭ 50
kie vi havas kunloĝanto, ambaŭ de vi vere ŝatas lakto,
unu el vi ricevas hejmon unue malfermas la fridujo ne estas lakto,
fermi la fridujo promeno trans stratoj al CVS kaj instigi
en linion por aĉeti lakton.
Dume, via kunloĝanto revenos tien.
Ŝi ankaŭ ŝatas lakto.
Malfermu la fridujon kaj rimarkas neniu lakto.
Jen ŝi tiam iras al la stoki, eble la alia CVS.
Rapida antaŭen kelkajn minutojn poste vi revenos kaj nun ambaŭ
vi jam aĉetis lakton.
Unu el ili estas nun iri difekti ĉar vi ne faras
kiel lakto kiu multe kaj tio estas problemo, ĉu ne?
Ĉar vi ambaŭ inspektis la stato de iu variablo
kaj farita decido bazita sur ĝi eĉ kvankam la ŝtato
de tiu variablo estis esence en la procezo de esti ŝanĝita,
cxiuj estu ĝi malrapide super la kvanto da tempo prenas
akiri de kaj al CVS.
Do kio estas speco de stultaj reala mondo solvon por tiu problemo?
Lasi noton, ĉu ne?
Ĝi okazis lastan fojon.
Ĉiam lasi noton aŭ pendseruro la afero laŭvorte.
Kaj mi diras pendseruro, ĉar se vi faros preni aŭ prenis CS161,
Fermo estas fundamenta ideo en tiu speco de mondo.
Do raso kondiĉoj povas ekesti Ankaŭ en la datumbazo mondo
kaj eble vi memoras eble el CS50 financi se vi prenis 50,
tiu kodo kiuj ni efektive donis vi uloj en la specifo
en la momento por ke via operacion estas tiel nomata atoma.
Se vi volas, en ĉi tiu kazo, aĉeti parton de trunko
kaj tio de valoroj havas iu aparta simbolo.
Ni diris al vi uzi la kodo kiel tio, ke pere de tiu
sur duplikatajn klavo ĝisdatigo sintakso, kiu estas konstruita
en MySQL vi estas efektive faranta ĉu en insert
aŭ en ĝisdatigo post faras unuarangan vidi
se sako estas jam en ekzistas.
En aliaj vortoj, la analogo en la mondo de la aĉeti stoko
da lakto kaj la fridujo povus esti, unua,
antaŭ aĉeti parton de Google vi eble volas elekti
el la datumbazo ĉiuj la agoj de Google kiu Davido posedas
por vidi, ĉu li posedas nulo aŭ pli.
Iam vi vidos se li posedas nul aŭ pli vi havas
tiam faru la sekvan.
Vi devas aŭ fari insert
se li posedas nulo 'kaŭzo ne estas vico por Davido tamen,
aŭ vi devos fari ĝisdatigo se almenaŭ teorie vi volas
havi unu vico por uzanto.
La problemo estas elektanta ke nombro de agoj
kaj tiam ĝisdatigi aŭ insertando povus esti interrompita
de iu alia en alia komputilo fina provas aĉeti
aŭ vendi iujn de David agoj de akcioj ĉu
por bonaj celoj aŭ varo de malicaj intencoj.
Ĝi estas kiel iri al la vendejo kiam via kunloĝanto gets reen
kaj kontrolas la staton de la variablo.
Do tiu sintakso tiutempe kio estis ia taŭga
por CS50, evitu ke problemo entute.
Kaj tio nur faras ĉiu el tiu magio de blokado por vi,
sed nun per tiuj specoj de projektoj por ĉi tiu kurso
kio plej verŝajne volas engaĝi pli kompleksa datenaroj,
vi ne povas atingi Ĉiam ĉi atomicidad.
Ĉio okazas senprokraste aŭ tute ne
seninterrompe tiel elegante.
Kaj tiel MySQL, alia datumbaza motoron,
subteno aferoj alvokis seruroj,
per kio vi povas diri seruro ĉi tablo tiel ke nur unu regalo
kaj ĝenerale nur unu uzanto povas tuŝi ĝin en ajna punkto en la tempo
legi aŭ skribi kaj tiam vi povas malŝlosi ĝin.
Ĉi tio estas ekzemplo de unu de MySQL mem referencoj,
kie se vi havas kiel banko Pro kiu vi provas
por dedukti monon el kaj tiam aldoni monon al.
Vi eble volas certigi ke ambaŭ
el tiuj aferoj okazas kune
tiel, ke tie estas neniu matematika eraroj
kaj neniu perdoj mono, iel.
La problemo kun kluzoj kvankam en datumbazo estas
ke tio ĝenerale signifas la tuta tabulo estas ŝlosita,
kio signifas, ke se vi havos cent homoj provantaj
fari negocon kun via banko linio je la sama kvanto
el tempo nur unu el ili povas iri samtempe.
Kio estas pli stultaj, speciale sur serviloj nuntempe
kiuj havas ok kurso, 16 Kompreneble, ili havas grandegan kvanton
de memoro, ne estas kialo por serializado ĉiuj
de via transakcioj se tiuj klientojn nur tuj
interagi kun siaj propraj vicoj.
Do NoDB permesas vin fari aferojn pli inteligentaj
kaj tio ĝenerale estos la alproksimiĝo vi prenos en kodo,
kiel vi uzas ion vokis la transakcio.
Kaj vi faru tion ĝenerale en PHP-kodo,
Rubeno kodo, Python, kio ajn.
Sed la SQL kodo tio finfine uzata estas tiu,
tipe.
Komenci transakcio tiam vi specifi du aŭ pli pridemandojn
ke vi volas ekzekuti tute
seninterrompe aŭ tute ne.
Tie povas eĉ esti iu selektu asertoj en
aŭ iu forigas aŭ ĝisdatigojn.
Sed la bela afero estas ke la datumbazo estos sufiĉe lertaj
por certiĝi, ke ĝi volas nur ŝlosi la vicoj ili estas reale
implikita en ĉi ĝisdatigojn aŭ selektu aŭ forigas.
Do se vi havas milojn da vicoj kaj vi estas nur tuŝi tri
el ili, nur ke subaro de la tabelo estos ŝlosita
kio signifas tiuj aliaj 99 klientoj povas tusxi iliajn vicojn
sen esti serializado kaj malrapidiĝis de vi.
Dume, tiu estas la plej bela aspekto al transakcioj.
Ili estas transakciojn en sentas kiel 161 en dosiersistemo,
ili estas transaccionales
kio signifas ke vi povas ruliĝi ili revenis, vi povas malfari ilin.
Ĉi tio estas kiel la komando aŭ kontroli F de datumbazoj.
Se vi malkovras parto vojo tra la tuta
de via diversaj datumoj operacio, pafi, io iras malbone.
Vi laŭvorte ekzekuti malsamaj SQL query skribrulajxon reen
kaj ĉiuj el tiuj tendenco - ĉiuj de la asertoj vi ekzekutita
post diri komenco transakcio malaperas
kvazaux ili neniam okazis,
kio estas mirige potencan aferon.
Kaj jen estas la specoj de tion certe en 50 ni speco
de balai sub la tapiŝeto kaj vi nur speco de supozi
ke ĉiuj estos bone.
Sed iam vi komencas pensante pri reala projektoj
kaj realaj uzantoj kaj la senkulpeco de via datenbazo,
jen estas la specoj de dezajno decidoj
kiuj tuj esti grava.