[TÓNLIST spila] DAVID Malan: Allt í lagi, þetta er CS50. Þetta er í lok viku átta. Og í dag, byrjum við til að fylla í sumum sundur þegar það kemur að því að byggja sem er á vefnum. Svo, muna að á mánudaginn við eyðum miklu meiri tíma á PHP, sem er þetta dynamic forritunarmál sem leyfir okkur framleiðsla, meðal annars hlutir, HTML og önnur slík efni að við munum vilja til sjá. En við höfum í raun ekki horft á hvernig við erum að fara að geyma allar upplýsingar. Reyndar, næstum allir af að frábær áhugavert vefsíður sem þú skoðar í dag hafa einhvers konar gagnagrunn á bak endir, ekki satt? Facebook vissulega geymir mikið af gögnum um okkur öll og Gmail geymir allar pósti. Og svo eru margar aðrar síður ekki bara truflanir efni sem er til upplýsingar. Það er í raun öflugt á einhvern hátt. Þú veita inntak, endurnýja það síður fyrir aðra. Þú færð skilaboð, senda skilaboð, og svo framvegis. Svo í dag, horfum við nánar á að undirstöður verkefnisins að þú munt kafa í næsta viku, CS50 Fjármál, sem er í raun að fara að hafa að byggja eitthvað ekki í C, en í PHP. A website þessi lítur lítill eitthvað eins og þetta sem gerir að kaupa og selja birgðir sem eru í raun fara að teikna á rauntíma lager gögn frá Yahoo Finance. Og svo að lokum, þú munt hafa blekking fyrir þig og fyrir notendur að þú ert í raun að kaupa og selja birgðir og fá næstum rauntíma uppfærslur, framkvæmdastjóri a eigu, sem öll er að fara að þurfa að hafa, lokum, gagnagrunnur notenda. Svo, í eigin orðum, sérstaklega ef þú ert ekki frábær þekki tölvu vísindi eða gagnagrunna, hvað veistu gagnagrunn til að vera núna, í nontechnical skilmála? Hvað er það? Hvernig myndir þú lýsa því að herbergisfélaga eða vin? Áhorfendur: [inaudible] upplysingar [inaudible] DAVID Malan: Svo, lista af upplýsingum, eða store-- lista af upplýsingum sem þú vilt kannski að geyma um eitthvað, eins notanda. Og hvað gera notendur hafa í tengslum við þá? Ef þú ert notandi á Facebook eða Gmail, hvað eru einkenni sem okkur öllum notendum að hafa? Eins og, hvað gæti verið sumum af dálka í töflunni sem við kennd síðasta skipti? Því aftur, þú getur hugsa um gagnagrunn raun eins og fínum Excel skrá eða Google Töflureiknir eða Apple Numbers skrá. Svo, hvað finnst þér um þegar þú hugsa um notanda? Hvað gera þeir hafa? Hvað er þetta? Áhorfendur: A nafn. DAVID Malan: A nafn. Svo ef nafn, eins og, David Malan væri nafn sumra notenda. Hvað annað er notandi með? Áhorfendur: An ID. DAVID Malan: An ID. Svo, eins og kennitölu, eins og Harvard þinn ID eða þinn Yale Net ID eða þess háttar. Hvað annað gæti notandi hafa? Áhorfendur: Lykilorð. DAVID Malan: A lykilorð kannski heimilisfang, kannski símanúmer, kannski netfang. Svo, það er bunches af sviðum og þetta gæti konar spírall úr böndunum hratt um leið og þú byrjar átta sig á, ó, við skulum geyma þetta og við skulum geyma hitt og þetta. En hvernig eigum við að gera í raun og veru það? Svo aftur, andlega fyrirmynd að hafa fyrir í dag eins og við kafa í raun SQL, Structured Query Language, er gagnasafn sem lítur svona út. Það er bara raðir og dálka. Og þú getur ímyndað Google töflureiknum eða allir tala af öðrum forritum. En hvað er lykillinn um MySQL, sem er gagnasafn hugbúnaður við erum að fara að nota, sem auðveldlega opinskátt available-- Facebook notar það og allir tala um aðrar websites-- Gagnagrunnurinn geymir hluti relationally. Og Venslagagnagrunnur þýðir bara eitt sem bókstaflega geymir gögn í raðir og dálka. Það er eins einfalt eins og þessi. Svo, jafnvel eitthvað eins og Oracle, sem þú gætir hafa almennt heyrt um er Venslagagnagrunnur. Og undir hetta, það geymir gögn í raðir og dálka. Og Oracle rukkar þig með fullt af peningum til að gera það, en MySQL gjöld þú ekkert fyrir það sama. Svo, SQL er að fara að gefa okkur að minnsta kosti fjórar aðgerðir. Hæfni til að velja gögn, eins og lesa gögn, setja, eyða, og uppfæra gögn. Með öðrum orðum, þeir eru virkilega fjórum helstu aðgerðir sem eru að fara að leyfa okkur að breyta efni í þeim línum og dálkum. The tól sem við munum nota í dag sérstaklega að læra SQL og að spila með það er aftur kallað PHP MyAdmin. Það er vefur undirstaða tól. Total tilviljun að það er skrifað í PHP. En það er að fara að gefa okkur myndrænt notandi tengi svo að við getum í raun búa til þessar raðir og dálka og þá tala við þá um kóða. Svo, við skulum nú byrja að það sem ég held er satt góður af gaman ferli byggja aftur enda vefsíður, hlutar sem notendur gera ekki sjá, en örugglega ekki sama um, því það er frekar gögn er að fara. Svo, svipað og C og aðeins minna eins og PHP, SQL, eða gagnasafn sem styður SQL, hefur að minnsta kosti þessi gagnatög og bunches annarra. CHAR, VARCHAR, INT, BIGINT, Tugabrot og DATETIME. Og það er allt fullt af öðrum aðgerðum, en við skulum gera þetta með því að leið raunverulegt dæmi. Ég ætla að fara í CS50 IDE þar fyrirfram, hef ég skráður í og ég hef líka heimsótt vefslóð fyrir þetta tól heitir PHP MyAdmin. Og í vandamál setja sjö, munum við segja þú nákvæmlega hvernig á að komast að þessu tengi einnig. Á the toppur vinstri hönd horn, eftir það segir fyrirlestra. Og það þýðir bara að fyrirfram, bjó ég tómt gagnasafn heitir fyrirlestur sem hefur ekki töflurnar í það enn. Það er engin raðir og dálka. Vegna þess að fyrsta sem við erum að fara að gera er að byrja að búa til töflu það er að fara að geyma notendur okkar. Svo, bókstaflega yfir hér til hægri, ég er ætla að segja gagnagrunninn Ég vil borð heitir notendur. Svo, þetta er eins og skrá sem ég langar að geyma öll gögn mínum í. Og hversu margir dálkar? Jæja, við skulum halda það einfalt fyrir núna. Ég vil bara að geyma eins og notandanafn og nafn fyrir notendur. Við munum byrja smátt. Svo vil ég tvo dálka samtals. Og ég ætla að fara á undan og smelltu á Áfram. Og þá fyrir þessar dálkar, hvað ég er að fara að do-- ef þessari cooperates-- allt í lagi, þannig að við erum að fara að kíkja aftur. Ég ætla að búa til töflu sem heitir Notendur með tveimur dálkum, smellt á Go, OK. Nú höfum við fengið það mjög hratt. Þakka þér, mjög vel gert. Allt í lagi, svo hvað viljum við Þessir dálkar að vera kölluð? Svo, einn er að fara að vera kölluð Notandanafn. Svo, allt sem ég skoða here-- og tengi hreinskilnislega fær lítið ljótur lokum, Þegar þú byrjar að slá í öllum þessum gögnum. En hvað er gott er þessi tegund af Þversögnin, ég er að búa til dálka, en tól hefur heimskulega lagði fram í röðum svo að ég geti stillt þessa dálka. Svo, það er tvær eyðurnar þar undir nafni. Og einn af þessum sviðum I langar að kallast Notandanafn, og öðru sviði sem ég vil nefna. Og nú þarf ég að velja gagnatög fyrir þessum hlutum. Svo, en í Excel og Google töflureiknir, ef þú vilt dálk, þú bókstaflega bara slá Nafn eða notendanafninu, ýttu á Enter. Kannski þú gerir það feitletrað andlit bara fyrir skýrleika, en það er það. Þú tilgreinir ekki tegundir dálkum. Nú í Google töflureikni eða Excel, og þú gæti tilgreina hvernig gögn er veitt. Þú gætir farið í Format valmynd, og þú getur tilgreint sýna þetta eins dollaramerki, sýna þetta eins fleytitölu gildi. Svo er það svipað í anda að að það sem við erum að fara að gera, en þetta er í raun að fara að neyða gögn til að vera viss tegund. Nú, jafnvel þótt í smá stund síðan ég sagði það er aðeins nokkrar tegundir gagna, það er í raun allt fullt, og þeir eru í mismiklum mæli af sérhæfni. Og eins og til hliðar, þú getur jafnvel gert ímynda hlutina eins geymslu löguð inni í gagnagrunninum. Þú getur geymt hluti eins GPS hnit og í raun að finna, stærðfræðilega, stig sem eru nálægt öðrum. En við erum að fara að halda þessu frábær einfalt og fara upp að hér, öll svonefnd band tegundir. Svo, hér er listi yfir a allt fullt af valkostum. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. Og það er góður af yfirþyrmandi. Og því miður, nokkuð Þversögnin í C, a CHAR er í raun ekki CHAR. Ef þú tilgreinir í gagnagrunni að gögn tegund er CHAR, sem þýðir að já, það er CHAR, en það er ein eða fleiri stafir. Og þú verður að tilgreina hversu margir stafir sem þú vilt. Svo, hvað er dæmigert lengd um notandanafn? Er einhver takmörk venjulega? Áhorfendur: [inaudible] DAVID Malan: 16 kannski? Eitthvað svoleiðis. Þú veist, aftur í dag, það er notað til að vera átta. Stundum er það 16 stundum það er jafnvel meira en það. Og svo, þetta er ekki meina gefa mér einn bleikju. Þetta þýðir að ég þarf að tilgreina lengd á sviði, og nú ég gæti sagt eitthvað eins og 16. Og það er a viðskipti burt hér. Svo munum við sjá í smá stund að þetta þýðir að einn, hvert notandanafn þarf að vera 16 stafir. En bíddu í eina mínútu, M-A-L-A-N. Ef það er notendanafnið mitt og ég er bara að nota fimm, hvað myndir þú leggja að gagnagrunnurinn að gera fyrir aðra 11 stafi sem Ég hef áskilinn pláss fyrir? Hvað myndir þú gera? Áhorfendur: [inaudible] DAVID Malan: Já, bara gera þá null. Gera þeim rými. En sennilega null, svo fullt af sviga núllum. Svo, annars vegar, höfum við nú viss um að notendanafnið mitt má ekki meira en 16 stafir. Og bakhlið sem er að ef ég hefði mjög lengi nafn eða vildi mjög lengi username eins og sumir af þú krakkar gætu hafa í þeirri háskóla eða á Yale.edu, getur þú ekki að hafa einn. Og svo í raun, ef þú hefur alltaf skráð fyrir a website og þú færð öskraði á að segja Lykilorðið er of langt eða notendanafnið þitt er of langt, það er einfaldlega vegna þess að forritari, þegar stilla gagnagrunninn sína, ákvað að þessi reitur verður ekki vera lengri en þessari lengd. Allt í lagi, svo hvað ef við getum haldið áfram að nefna? Hversu lengi ætti Nafnið dæmigerðri manneskju vera? Hversu margir stafir, 16? Ég giska að við gátum finna einhvern í þessu herbergi þar með fyrsta plús hans síðasta Nafnið er lengri en 16 stafir. Svo, hvað er betra en það, 17? 18? 25? Stærri? 30? Áhorfendur: [inaudible] DAVID Malan: 5000, ó Guð minn. Svo, það er sennilega ágætis efri bundið, eigum við að segja. Og hér þurfum við að gera dóm hringja. Eins og það er engin rétt svar hér. Infinite er ekki alveg hægt, vegna þess að við erum loksins fara að have-- við erum að fara að keyra út af minni. Svo verðum við að gera dómur kalla á einhverjum tímapunkti. Mjög algengar væri, til dæmis, að use-- og láta mig tilgreina Bleikja hér eins before-- 255 var bókstaflega efri mörk á þessari gagnasafn hugbúnaður fyrir mörgum árum. Og svo, a einhver fjöldi af mönnum vildi bara segja, fínt. 255 er the takmörk. Við skulum nota bara hámarkið. Og þetta er nokkuð fáránlegt. Eins, ef þú ert að skrifa einhver er nafn fyrir 200 plús stafi, að lítið fáránlegt. En mundu að ASCII er ekki eina kerfið fyrir stafi. Og svo, sérstaklega í mikið af asískum tungumálum þar sem það er tákn sem við getum ekki tjá á hljómborð eins og Bandaríkjunum minn hljómborð, sumir stafir raun taka upp 16 bita í stað átta bita. Og svo þetta í raun er ekki allt sem óraunhæft að við þurfum meira rúm ef við viljum að passa stærri stafir en mjög Bandaríkjunum miðlægur þær sem við höfum hafði tilhneigingu til að ræða. Svo þurfum við sumir efri. Ég veit ekki hvað best er, en 255 er yfirleitt algeng einn. 25 finnst lítil. 16, 32 finnst lítil. Ég myndi skjátlast á hlið eitthvað hærra. En það er a viðskipti burt, eins og alltaf. Hvað er kannski augljóst viðskipti burt af áskilið 255 stafir nafni allra í gagnagrunninum mínum? Áhorfendur: [inaudible] DAVID Malan: Hvað er það? Áhorfendur: [inaudible] DAVID Malan: Það er mikið af minni, ekki satt? M-A-L-A-N. Ég hef bara sóun 250 stafir bara að geyma nafn mitt varnarlega, bara ef einhver í bekknum hefur mjög lengi nafn. Það virðist eins og óréttmætan samspils. Svo snýr það út að SQL, þessum gagnagrunni tungumál, reyndar styður eitthvað kallað VARCHAR eða Variable CHAR. Og þetta er góður af gaman í að þetta gerir þér kleift að tilgreina ekki fast breidd, heldur breytilegt breidd. Og nánar tiltekið, er full breidd sviði. Svo, þetta þýðir að nafn getur ekki vera meira en 250 stafir, en það getur vissulega verið færri. Og gagnagrunnurinn er að fara að vera klár. Ef þú setur í M-A-L-A-N, það er bara að fara að nota fimm, kannski sex bytes fyrir eins slæður null karakter, og ekki eyða til viðbótar 249 eða 250 bytes óþörfu. Svo, þetta virðist eins og ég ætti hafa byrjað með þessari sögu. En það er alltaf tradeoff. Svo, annars vegar, notendanafn ég hef tilgreint að vera harður á dulmáli í 16, og kannski það var ekki rétt kalla, kannski það er, en hvers vegna ekki að nota VARCHARs fyrir allt? Það er til fyrir ástæðu. Hvers vegna ekki að nota VARCHARs fyrir hvern reit sem lengd þú veist ekki fyrirfram ef það virðist vera a mikill hlutur, ekki satt? Notið aðeins eins mikið pláss og þú þarft upp að þessu marki? Áhorfendur: Hægari. DAVID Malan: Speller? Áhorfendur: Gerir það hægar? DAVID Malan: Oh, það er hægara. Gott, það er nánast alltaf svarið, hreinskilnislega. Eins og, hvað er tradeoff? Það annað hvort kostar meira pláss eða það kostar meiri tíma. Svo, í þessu tilfelli gæti það verið hægara. Hvers vegna? Áhorfendur: [inaudible] ákvarða [inaudible]. DAVID Malan: Good. Svo, þú might muna frá jafnvel PSED5, spila með nálgun í orðabókina ef þú þarft að úthluta minni virk eða halda vaxandi með buffer, sem geta í raun verið hægur. Ef þú ert að hringja malloc undir hetta og kannski það er það sem MySQL er að gera, svo örugglega það gæti verið raunin. Og ef þú heldur að leiðin aftur til PSet-- eða jafnvel vikur tvær, þegar við gerðum það eins Tvíundarleit eða jafnvel línuleg leit, einn af the ágætur hluti um hvert orð í gagnagrunn eða hvert orð í dálk að vera nákvæmlega sömu lengd, jafnvel ef allt fullt af þeim stafi eru auður, er að þú getur notað handahófi aðgang á gögnunum, ekki satt? Ef þú veist að hver Orðið er 16 stafir í burtu, þú getur notað músina tölur, svo að tala og fara að okkur 16, 32, 48, 64, og þú getur bara hoppað stað með tölur að neinu í gagnagrunninn. En ef það er VARCHAR, hvað þú þarft í staðinn að gera? [PHONE ringing] Ef það er VARCHAR, þú getur ekki notað handahófi aðgang. Það sem þú þarft að leita að eða gera? Já? Áhorfendur: [inaudible] DAVID Malan: Útlit gegnum whole-- rekja í gegnum allt listann leita hvað, líklega? Hvers konar sérstakt gildi? Áhorfendur: [inaudible] DAVID Malan: Útlit fyrir null terminators sem afmarka aðskilnað orðum. Svo aftur, lýsir sambandi, og það er ekki rétt svar. En þetta er þar, sérstaklega þegar notendur fá að vera margir og hlaða þinn á netþjónum þínum, fjöldi fólks með það fær hár, þetta eru í raun nontrivial ákvarðanir. Svo getum við skilið þetta eins og þetta, en skulum fletta niður yfir til hægri hér. Nú, það er a par af dálkum þar sem við verðum að gera dóm hringja. Er það gera vit í að leyfa notanda nafn, notandanafn notandans eða notanda Nafn, til að vera null? Það er bara auður. Líður svolítið nonsensical, þannig að ég er ekki að fara að þá hakað. En það kemur í ljós í gagnagrunni getur þú sagt, einhver getur mögulega hafa þetta gildi. Þessi dálkur er ekki með að raunverulega vera þar. Nú, það er þetta vallista. Og eftir að ég er enn í fyrstu röðinni þar, þannig að ég er að tala um notandanafnið núna. Og það kemur í ljós að gagnagrunni, ólíkt einföldum aðeins töflureikni, hefur öflugur lögun kallast Vísitölur. Og vísitala er leið að segja að gagnasafn fyrirfram að ég, manna er betri en þú. Ég veit hvers konar fyrirspurnir, veldu eða setja inn eða eyða eða uppfæra, sem númerið mitt er að fara að enda upp að gera á þessum gagnagrunni. Ég vil að lesa mikið af gögnum. Ég vil setja mikið af gögnum. Ég vil stöðugt eyða mikið af gögnum. Ef ég veit að ég er að fara að vera aðgang reit eins Notandanafn mikið, Ég get preemptively segja að gagnagrunnur, ég veit meira en þú, og ég vil að úrskurði sem þú ættir Vísitala þennan reit. Þar flokkun reit eða dálk þýðir að gagnagrunni fyrirfram ætti láni nokkrar hugmyndir frá, eins og, viku fjögur og fimm og sex frá CS50 og í raun byggja upp eitthvað eins og tvöfaldur leit tré eða eitthvað almennt kallað B tré að þú myndir læra í bekknum eins og CS124 í Harvard, sem reiknirit bekknum, eða allir tala af öðrum stöðum. Gagnagrunnurinn og klár fólk sem innleitt hana mun reikna út hvernig á að geyma Borð upplýsinga í minni þannig að leit og aðrar aðgerðir eru frábær fljótur. Þú þarft ekki að gera það. Þú þarft ekki að framkvæma línuleg leit eða tvöfaldur leit eða Mergesort eða úrval raða, eitthvað af því. Gagnagrunnurinn gerir það fyrir þig ef þú segir það preemptively að kemba þessi reitur. Og þú getur séð líka, það er sumir önnur einkenni við getum sagt að gagnagrunninum til að framfylgja. Hvað gæti það þýtt ef ég velja Unique Í þessari valmynd er bara innsæi? Já? Áhorfendur: [inaudible] DAVID Malan: Já, Notandanafnið verður að vera einstakt. Er þetta gott eða slæmt fyrir gagnagrunnur, fyrir vefsíðu með notendur? Ætti notendanöfn vera einstakt? Já, sennilega. Ef það er það sem reit við notum til að skrá þig inn, þú í raun ekki vilja til að fólk með sama feel eða sama notandanafn. Svo getum við hafa gagnasafn framfylgja að svo að nú í PHP númerið mitt eða hvaða tungumáli, Ég þarf ekki að, til dæmis, að athuga endilega er þetta notandanafn til áður en ég láta einhvern skrá sig? Gagnagrunnurinn mun ekki láta tvær manneskjur sem heitir David eða Malans skrá sig í þessu tilfelli. Og eins og til hliðar, jafnvel þótt það valmynd veitir aðeins að velja eitt, einstakt vísitalan er eitt sem er verðtryggð fyrir frábær fljótur flutningur, en það knýja einnig sérstöðu. Og við munum koma aftur til hvað Hin tvö meina í bara smá stund. Á sama tíma, ef ég fer að önnur röðin mín er er nafn notanda, ætti ég að tilgreina að nafnið ætti að vera einstakt? Nei, vegna þess að þú gætir örugglega have-- það er engin tveir David Malans í þessu herbergi, líklega. En ef við velja annað nafn, við gætum örugglega hafa árekstra. Hugsa til baka til kjötkássa borð og þess háttar. Svo, vissulega við viljum ekki að gera nafn sviði einstakt. Svo erum við bara að fara að fara að sem þjóta, þjóta, þjóta, ekkert. Og ég ætla að fara allt annað einn. Reyndar flest þessum sviðum við munum ekki þurfa að hugsa um. Og þegar ég er tilbúin til að spara þetta, ef internetið samstarf, Ég smellir á Vista, og mjög, mjög, mjög hægt er gagnagrunnur fá vistuð. Og nú er ég aftur að þessu tengi, sem að vísu, er yfirþyrmandi við fyrstu sýn. En allt sem ég ætla að gera er að smella á orðið Notendur efst til vinstri. Ég ætla að fara upp hér, smelltu Notendur og því sjálfgefið, það hefur framkvæmt einhverja SQL, en meira um það í smá stund. Hér er bara samantekt á því hvað ég gerði. Og ekki að hafa áhyggjur að þú sérð minnst á latínu og sænsku hér. Þeir eru bara sjálfgefið stillingar, vegna MySQL upphaflega, eða PHP MyAdmin, einn af tveimur gerðist að vera skrifuð af einhverjum sænskum fólk. En það er óviðeigandi í okkar tilviki hér. Allt í lagi, svo hvers vegna er þetta allt áhugavert? Það kemur í ljós, get ég setja gögn í gagnagrunn með því að skrifa kóðann. Og ég er að fara á undan og í skrá minni hér, ég er að fara á undan og láta eins og þetta er hlerunarbúnað að þeim gagnabanka, sem það er ekki í augnablikinu, en það mun vera þegar við komum til Heimadæmi sjö. Og ég ætla að fara á undan og framkvæma aðgerð kallast fyrirspurn, sem við munum gefa þér í vanda setja sjö er útbreiðsla kóða, sem tekur að minnsta kosti eitt viðfang, sem er bara band. A band af SQL kóða. Svo, þú ert að fara að læra hvernig á að skrifa Structured Query Language. Ef ég vil að setja inn nýja röð í minn gagnagrunnur vegna þess að einhver hefur lagt form til að númerið mitt, myndi ég bókstaflega skrifa INSERT INTO notendur eftirfarandi sviðum: notandanafn, komma, nafn, gildin, og nú þarf ég að setja eitthvað eins og Malan, og vitna, unquote 'David Malan. Og nú jafnvel fyrir þá sem ókunnur með SQL, hvers vegna er ég að nota einn quotes inni þessa grænu streng? Hvað gæti verið ástæðan hér? Tilkynning Ég er co-mingling tvö tungumál. Fyrirspurn er PHP virka, en það tekur rifrildi. Og að rök hefur að sér að vera skrifað á öðru tungumáli kallast SQL, Structured Query Language. Svo, allt sem ég hafa bara bent hér er þetta tungumál kallast SQL. Svo, hvað er með einn quotes, bara eins og a fljótur andleg heilbrigði stöðva? Gjörðu svo vel. Þeir eru strengi. Svo, vitna, unquote Malan og vitna, unquote David Malan eru strengir. Og bara hugsa innsæi núna, vita það sem þú veist um C og PHP, af hverju gerði ég það ekki þetta, sem ég venjulega Notað gæsalappa fyrir strengi? Af hverju gerði ég vil ekki að gera það? Já? Áhorfendur: [inaudible] DAVID Malan: Einmitt. Þar sem ég er nú þegar að nota gæsalappa á leiðinni utan rök og PHP virka, Ég myndi bara rugla túlkur. Það mun ekki vita, gera þessir fara saman? Ekki þessir fara saman? Ekki þessir fara saman? Svo, varamaður I staðinn. Eða ég gæti gert eitthvað eins og þetta, sviga vitna eða sviga vitna. Frankly, sem bara byrjar að fá mjög ólæsileg og ljót. En það myndi ná sömu niðurstöðu og vel. Svo, ef ég væri að framkvæma þetta fyrirspurn nú, við skulum sjá hvað gerist. Ég ætla að fara á undan núna og frekar en framkvæma PHP kóðann, sem er þar sem þú munt spila í Heimadæmi sjö, Ég ætla að í stað fara til PHP MyAdmin. Og ég er með höndunum að fara að fara í SQL flipann, og láta mig stækka á viðmóti. Og ég ætla að líma inn það sem ég gafst bara. Og lit erfðaskrá hefur breytt svolítið núna, bara vegna þess að forritið snið það svolítið öðruvísi. En eftir því að allt sem ég hef gert er ég hef sagt, setja inn notendur. Ég hef tilgreint, þá á kommu aðskilin svigaður listi tveir sviðum sem mig langar til að setja, og þá hef ég bókstaflega sagt gildi eftir öðru paren, Og þá tvö gildi Ég vil stinga-í, og nú gott mál, Ég ætla að setja inn semíkommu í lokin. Svo, þetta er ekki C. Þetta er ekki PHP. Þetta er nú SQL, og ég er að líma það inn í þennan vefur undirstaða tengi sem er bara að fara að láta mig, um leið og ég smellt á Go, framkvæma þessa fyrirspurn í gagnagrunninn gangi inni CS50 IDE. Svo er þetta gott. Tilkynning um það að það röð sett, fór frábær fljótur, 0.0054 sekúndur til að setja þessi gögn. Svo, það hljómar nokkuð heilbrigð. Það umbót fyrirspurn mína fyrir mig hér bara til að sjá það í einhverskonar lit dulmáli útgáfu. En nú ef ég smelli Browse, taka eftir því, jafnvel þó að það er mikið af ringulreið á skjár, mitt borð er með tvær raðir. Svo, láta mig fara á undan og gera annað. Í stað þess að þetta, láta mig fara í SQL flipann aftur. Og að þessu sinni ég setja eitthvað eins Rob og nafn hans mun vera ræna Bowden. Bowden. Skulum smella á Vista. Oops, frekar fara. Smelltu á Browse aftur, og nú eftir að ég hef tvær raðir. Svo, þetta er bara leið flóknari leið opna Google töflureikni og bara að skrifa röð í dálki. En hvað er lykillinn er að við höfum nú setningafræði sem að skrifa kóða þannig að lokum, gætum við í raun gera sumir og þetta. Muna að PHP styður frábær alþjóðlegt breytur. Hvað er inni dollara undirrita undirstrik GET í PHP? Við kíktum á eitt eða tvær einfaldar dæmi. Og í PSet6, minnist þú halló punktur PHP sem notar þessa breytu. Hvað fer í það? Eða hvað er það? Smá hávær. Áhorfendur: [inaudible] DAVID Malan: Það er snjór afsprengi array, sem er bara fínt leið til að segja að array sem hefur helstu gildi pör. Og takkarnir eru ekki tölustafir. Þeir eru orð eða strengi. Og sérstaklega hvað eru þessir helstu gildi pör? Hvar þeir koma frá? Sorry? Áhorfendur: [inaudible] DAVID Malan: Nei? Hvar þeim helstu gildi pör koma frá? Hvað sagðiru? Aftur? Er ég sú eina heyrn eitthvað? [Hlátur] Það er rétt, já? Áhorfendur: [inaudible] DAVID Malan: Já, þeir koma frá fyrirspurn band. Svo, ef þú til baka í tíma til að þegar við höfum spilað með Google og við höfum farið á google.com skástrik Leita spurningamerki q jafngildir ketti, ef ég væri að ýta á Enter og ef Google var hrint í framkvæmd í PHP, PHP kóða sem Google skrifaði hefðu aðgang að dollaramerki undirstrika GET inni sem er lykill sem heitir Q og gildi kallast kettir sem það getur síðan notað er notað til að gera raunverulegt leit við. Svo, í raun, hvað ég ætla að gera núna er að fara aftur til PHP númerið mitt að þú munt aftur sjá meira af í PSet7. Og í stað þess að tengja í harða dulmáli gildi sem ekki virðast eins og a mjög dynamic website, Ég ætla að gefa þér beitu af hvað raunveruleg númerið þitt myndi gera. Þú vildi setja í tvo spurningarmerkjum svona. Ég veit ekki hvað er notandanafn. Ég veit ekki hvað ég á Nafnið er að fara að vera, en ég veit að ég get fá þá virk. Svo, ef númerið sem við erum að skrifa núna er kóðinn gangi á netþjónum Google, eða hvort þetta er halló punktur PHP, sem kemur með PSet6, Ég ætla að fara inn í fyrirspurn virka bara eins printf, tvö önnur rök. FÁ, vitna, unquote notandanafn, og FÁ, vitna, unquote nafn. Og nú, eftir hvað á Almennt uppbygging er hér. Ég hef fengið til vinstri hönd hlið af the kalla, þessi aðgerð kallað fyrirspurn í PHP. Ég hef enn sem fyrsta rök, bara band af texta. En að strengur af texta er skrifað á tungumáli sem heitir SQL. Og hreinskilnislega, er það ekki stórt mál. Við erum bara að fara að tala um það formlega í dag, í raun. Og þá í Heimadæmi sjö, það er tiltölulega nokkrar aðgerðir sem við erum fara til að nýta. The spurningarmerki, þó meina stinga í gildi hér og stinga í öðru verðmæti hér. Og takið eftir, hef ég sleppt því frá í kring the quote-- fjandinn it-- um tilvitnun markar að þessu sinni. Ég hef sleppt tilvitnun markar kringum spurningarmerki, Því miður, í þetta sinn í kring. Svo, hvað er gott um þetta spurningarmerki eiginleiki sem PHP hefur tilhneigingu til að styðja, Ruby og Python og öðrum tungumálum, þetta þýðir bara stinga í sumum gildi hér og þú veist hvað? Þú reikna út hvort nota einn vitna eða gæsalappa. Nennir ekki mig með þeim vitsmunalega uninteresting upplýsingar. En vertu viss um að það er rétt þannig að númerið mitt er á endanum rekstri og öruggur, sem mun hafa merkingu fyrir löngu. Nú, hvernig margir rök samtals, bara til að að vera ljóst, er fyrirspurn virka taka? Einhver vilja til að kjósa fleiri en tvo? Three? Jú, hvers vegna? Hvers þremur? Áhorfendur: [inaudible] DAVID Malan: Einmitt. Fyrsti hluti er band. Önnur rökin er dollaramerki undirstrika GET krappi notandanafn. Og þriðja rifrildi er sama, en bara nafn. Svo í öðrum orðum, nú ef ég hefði vefform sem þurfti að texta sviðum, einn fyrir notandanafn notandans, einn fyrir hans eða nafn hennar, bara eins og þú myndir sjá í viðbót þegar þú skráir þig fyrir sumir website, gæti þetta vera kóðann á bak endir sem í raun er innsetning nú inn í gagnagrunninn. Nú hins vegar skulum hratt áfram. Segjum sem svo að notandi er nú skrá þig inn og þú vilt að skrifa PHP kóða sem athugar hvort sá sem er bara skráður inn er í raun notandi, þú getur nota frekar einföld setningafræði. Þú getur sagt að velja, við skulum segja stjörnu, þar stjörnu þýðir allt. Ég veit ekki hvað ég vilt, svo bara gefa mér allir dálkarnir frá borðinu kallað notendur þar, og þetta er ágætur. Veldu styður hvað er kallað eiginleikann, sem er eins og a vegur af tímatakan það sem þú vilt. Hvar notandanafn jafngildir vitna, unquote Malan. Svo hér líka, ég hef fellt inni í rifrildi til PHP virka, línu af SQL kóða. Og að SQL kóða þetta Klukkan er bókstaflega að fara til að leita að vitna, unquote MALAN. Nú er það ekki allt sem gagnlegt, þannig að ég ætla að sleppa því að og ég ætla að setja í burtu Þessi ábending frá Brady, og fara og stinga í staðinn spurningarmerki hér. Svo, bara til að vera skýr, það ætti annað rök mín að ef einhver hefur bara skráður inn og I langar að athuga hvort hann eða hún er í raun notandi? Áhorfendur: [inaudible] DAVID Malan: Já. Ég heyri dollaramerki undirstrik GET quote, unquote notandanafn. Og það ætti að skila til mín einhverju raðir hjá mér sem hafa notendanafn á Malan. Nú vonandi, ég ætla að fá aftur núll ef Malan hefur aldrei verið hér, eða einn ef hann hefur. Ég ætti ekki að fá aftur tveir eða þrír eða fjórir. Hvers vegna? Áhorfendur: [inaudible] DAVID Malan: Ég sagði einstakt, ekki satt? Ástæðan er einföld. Vegna þess að ég sagði að það er got að vera einstakt, bara rökrétt, þú getur aðeins hafa núll eða einn Malans í þessu tiltekna gagnagrunni töflunni. Nú sem innskot, bara svo þú hefur séð það, jafnvel þó að ég halda áfram að nota GET og jafnvel þó PSet6 aðeins notaðar GET, getur þú vissulega hafa POST. Og muna að Post er annar tækni til að skila upplýsingum frá formi, en það ekki mæta í vefslóðinni. Það er svolítið öruggari vissulega fyrir hlutir eins og notendanöfn og lykilorð, sem PSet7 mun í raun falið. Svo, við skulum gera þetta í PHP MyAdmin og sjá hvað gerist. Ég ætla að fara að MySQL flipann. Og eftir að sjálfgefið gildi fyrir PHP MyAdmin, bara að reyna að vera hjálpsamur, er að velja stjörnuna frá notendum þar sem maður. Jæja, maður er alltaf satt, svo þetta er kjánalegt árangri þess bara að velja allt. En ég ætla að vera svolítið meira smámunasamur og með höndunum slá út SELECT stjörnuna frá notendum. Nú tæknilega, þú getur vitna nafn borðum. Það er sjaldgæft að þú þarft að, en taka þetta eru ekki eðlilegt vitna þínar á bandaríska lyklaborðinu. Þetta er svokölluð backtick, sem er yfirleitt á the toppur vinstri hönd horn á lyklaborðinu. En það er sjaldgæft að þú munt reyndar að standa við það, þannig að ég ætla bara að sleppa þeim engu að síður. Svo nú, láta mig fara á undan og högg fara. Og hversu margir raðir ætti ég að fá aftur þegar ég velja stjörnuna frá notendum? Áhorfendur: [inaudible] DAVID Malan: Fjöldi lína, viss. En hversu margir í þessum steypu saga núna? Tvö, því það var ég og það var Rob. Svo ef ég smelli fara, ég sjá sjónrænt sem Ég hef fengið til baka, reyndar tvær raðir. There 'a einhver fjöldi af ringulreið á skjár, en ég sé bara tvær raðir. Á hinn bóginn, ef ég geri þetta aftur og gera SELECT stjörnu notendur, þar notandanafn jafngildir vitna, unquote Malan, nú ef ég smellir á Áfram Ég er bara að fara að komast aftur eina röð. Og loks, ef ég geri eitthvað eins og þetta, býst sem ég er alveg sama um fá allt, sem er eins konar tilgangslaust nú, vegna þess að það er aðeins tveimur dálkum. Það er ekki eins og ég að velja a gríðarstór magn af gögnum. Segjum ég fara á undan og Ekki velja nafn úr notendur, þar notandanafn samsvarar MALAN, hvað er gott um SQL heiðarlega, er að það er í raun bara gerir hvað þú segir það að gera. Það er nokkuð gagnorðar, en þú bókstaflega bara segja það hvað þú vilt gera. Veldu nafn frá notenda þar notendanafn jafngildir MALAN. Og það er í raun að skýr. Svo, nú ef ég högg Go, hversu margir raðir er ég að fara að fá til baka? Einn, því það er bara Malan, vonandi. Eða núll ef hann er ekki það, en einn hámarks. Og hversu margir dálkar ég fá til baka? Hversu margir dálkar? Í þetta sinn, sem ég ætla bara að fara að fá einn af því að ég gerði það ekki velja stjörnuna, sem er allt. Nú er ég að velja bara nafn, svo ég bara komast aftur einn dálk og eina röð. Og það lítur svona viðeigandi fáránlegt, bara að leita frábær lítið eins og þetta. Svo, hvað er raunverulega að gerast? Þegar þú framkvæma SQL fyrirspurn með því að velja, hvað þú ert að fá Aftur úr gagnagrunninum er eins og tímabundna borð með línum og dálkum, kannski, en það sleppt neitt sem var í raun ekki valið af þér. Svo, það er eins og ef einhver hefði stór töflureikni allra nemenda skráð fyrir suma Nemendahópurinn og þú segir, gefa mér allt freshman sem hefur skráð fyrir hópinn nemenda okkar, hvað samstarfsmaður þinn í Nemendahópurinn gæti gert er þeir gætu bara hendi þú allt töflureikni. Það er eins og að segja að velja stjörnu. Og það er svolítið pirrandi ef þú vildir aðeins freshman. Og svo, ef þú segir í staðinn, Veldu stjörnu frá gagnagrunn borð þar árið jafngildir vitna, unquote freshman, það er eins og vinar í nemendahópinn bókstaflega hápunktur og afrituð aðeins freshman raðir, límt þá inn í nýja Google Töflureiknir eða Excel skrá, og afhent þér aftur leiðir skrá aðeins. Það er allt sem er að gerast á eðli hér. Svo í lok, getum við gert sumir laglegur ímynda atriði með því að geyma hluti eins og notendanöfn og lykilorð og þess háttar. En það kemur í ljós, ættum við að gera svolítið öðruvísi en þetta. Það er ekki að sviði að aðeins geyma upp notandanafn og lykilorð. Einhver fyrr, held ég hérna, leiðbeinandi kenni. Nú ID gæti verið eins og a Harvard ID eða Net ID Yale, en það gæti verið jafnvel einfaldara í gagnasafn okkar tilviki. Og reyndar, sameiginlegt mál er að hafa annan dálk. Og ég ætla að fara undan og breyta mitt borð. Og ef þú spilar í kring með þetta tengi fyrir PSet7, þú munt sjá að þú getur athugað á þennan hnapp hér og bæta reit í upphafi töflunnar. Og nú ef ég smelli fara, það er að fara að gefa mér einn af þeim formum frá fyrr. Ég ætla að bæta við reit sem heitir ID. Og ég ætla að gera það tölustafir tegund. Ég hafa a heild búnt gilda fyrir Tölustafir. Ég ætla bara að fara að velja INT og ekki hafa áhyggjur óður í ólíkum stærðum. Ég þarf ekki að tilgreina a lengd eða gildi, vegna þess að það er að fara að vera 32 bita sama hvað. Eigindir, höfum vér ekki sjá áður. Allir áhuga á einhverjum af þessum valmyndir þessum tíma? Fyrir INT? Hvað gerðir þú leggja? Nei? Gert eitthvað af þessum skynsamleg? Já. Já, óundirritaður, ekki satt? Almennt, ef við erum að fara að gefa allir einstakt númer sem er þar sem þessi saga er fara, ég virkilega bara vil maður að hafa fjölda eins núll og einn og tveir og þrír og fjórir. Ég þarf ekki að takast á með neikvæðum tölum. Það virðist bara eins ástæðulauss flókið. Ég vil fjóra milljarða möguleg gildi, ekki fjóra milljarða möguleg gildi, svo ég tvöfaldast bara getu INT mínum. Sem innskot, ef þú vilt tengjast þetta eitthvað eins og Facebook, aftur í einhverskonar mínum degi þegar Facebook kom fyrst út, Ég tel það sem þeir voru nota í MySQL gagnagrunni sínum að geyma a notandi Auðkenni, var bara INT. En auðvitað, það er mikið af alvöru fólk í heiminum. There 'a einhver fjöldi af falsa Facebook reikninga í heiminum. Og svo að lokum, Facebook overflowed stærð int a fjóra milljarða gildi. Hver er ástæðan, ef þú lítur um og það er vefsíður sem getur sagt þér hvað einstakt auðkenni þitt er. Og ef þú hefur aldrei valdi notandanafn í Facebook, munt þú sjá einkvæmt kenni. Ég held að það er prófíll punktur PHP spurningarmerki ID jafngildir eitthvað. Það er nú eitthvað eins og stór INT, eða lengi lengi ef þú vilt, sem er 64-bita gildi eða eitthvað sambærilegt. Svo, jafnvel í hinum raunverulega heimi að gera þetta mál lokum stundum máli. Og það kemur í ljós hér, ef ég er gefa öllum notendum mínum einstakt auðkenni, Ég vil vera frábær skýr og óverulega gera þessi reitur einstakt. En það kemur í ljós að það er eitt stykki af flokkunarkerfinu dag líka það er aðal lykill. Ef þú ert að hanna gagnagrunn borð og þú veist fyrirfram sem einn af dálka í töflunni ætti og mun einstaklega þekkja raðir í töflunni, þú vilt tilgreina það og segja gagnagrunninn, þetta er aðal lykillinn minn. Það gæti verið afrit á öðrum sviðum, en ég ætla að segja í gagnagrunni sem þetta er aðal minn, mikilvægasta sviði mín, sem er tryggt að vera einstakt. Nú, þetta virðist óþarfi. Ég er nú að leggja að við bæta við, með því að smella á Vista hér, reit called-- og ég ætla að fara á undan og smelltu AI, við munum koma aftur til það í smá stund, Vista. Ég er að leggja nú sem mitt borð líta svona út. Ég er með INT sviði heitir ID, a CHAR sviði heitir Notandanafn, a VARCHAR sviði nefndi, en ID, ef það er aðal og því einstakt, hvers vegna gerði ég sóa bara tími kynna hvað í raun er annað einstakt reit kallað ID sem er int? Notandanafn, muna, var þegar einstakt, sagði við. Svo bara rökrétt, þú þarft ekki allir gagnasafn reynslu ástæðu í gegnum þetta, hvers vegna gæti ég hafa kynnt An INT eins einkvæmt kenni mér eins vel? Hvað er this-- segja aftur? Áhorfendur: [inaudible] DAVID Malan: Random aðgangur er auðveldara, hvers vegna? Áhorfendur: [inaudible] DAVID Malan: Já, það er bara aðgang tölur. Svo, ef þú heldur að þetta sannarlega er borð, eins og fylki, nú hef ég einstaka auðkenni að ég get hoppað í kring. Og betri en samt er það hversu stór er int fara að vera aftur? 32 bita eða fjögur bæti. Hversu stór er notendanafnið mitt að fara að vera? Hámarks? 16 bytes. Svo, ef þú ert virkilega umhyggju um árangur númerið þitt, hugsa til baka til PSet5, myndir þú vilja til að leita til fjögurra bæti gildi eða 16 bæti gildi, ekki satt? Það er í raun eins einfalt eins og þessi. Þú þarft að gera fjórum sinnum eins mikið vinna til að leita að notendanöfnum vegna þess að þeir eru 16 bæti. Svo, þú þarft að bókstaflega bera saman allar 16 bytes til að vera viss já, þetta er notendanafnið sem ég vil. En fyrir INT, þú getur gera það með aðeins fjórum bæti. Og sem innskot fyrir þá áhuga á vélbúnaði tölva, það kemur í ljós að þú getur passa eitthvað eins An INT eða 32-bita gildi í eitthvað kallað skrá í tölvu CPU, sem þýðir að það er frábær, frábær fljótur, jafnvel á lægsta stigi vélbúnaði tölvunnar. Svo, það er bara kostur um allt. Svo, hvað þýðir þetta? Í raun, þegar þú ert að hanna gagnasafn borð, næstum allan tímann þú ert að fara að hafa ekki aðeins gögn sem þér þykir vænt um, en einnig eitthvað eins sérstakt kennimerki vegna þess að þetta er að fara að skulum gera aðra hluti. Og við skulum hnjóta um eitt vandamál hér. Gerum ráð fyrir að notendur hafa ekki bara notendanöfn og nöfn, en þeir hafa einnig hluti eins borgum og ríki og númer zip, amk hér í Bandaríkjunum. Svo er ég að fara að fara á undan og bara fljótt segja, gefa mér þrjú fleiri dálka í lok töflunnar. Og þetta er að fara að vera City, þetta er að fara að vera State, og þetta er að fara að vera Zip. Nú City, hvað gagnatög ætti þetta að vera, kannski? VARCHAR? Ég veit ekki hvað ég á Lengsta nafn borgarinnar er. Einhvers staðar í Ameríku, það er líklega einhver hlægilegur lengi orð, þannig að við skulum bara fara með 255, nokkuð sögulega eða geðþótta. State, hvað þú vilt gera? Dómur kalla, ekki satt? Hvað er kannski mest duglegur? Hversu margir stafir? Kannski bara tveir, ef við getum komast upp með að gera bara, eins, MA fyrir Massachusetts og svo framvegis. Svo er ég að fara að fara bleikju gildi tveimur. Póstnúmer er áhugavert einn. Við erum hér í 02138, þannig að bendir við ættum að nota það? Það er INT, ekki satt? INT, INT, stutt? Short myndi vinna. Nei? CHAR eða fimm, en ég vil int. Hvers vegna ýta aftur á INT? Sannfæra mig frá þessu. Hvað er heimskulegt um int hugmynd mína? Já. Áhorfendur: Taka upp meira minni. DAVID Malan: Taka upp meira minni. Fjögur bæti, en þú ert leggja inn póstnúmer sem fimm bæti eða einhver var sem bleikju, sem er eins og eh, það er í raun ekki raunin. Jæja, gaman saga. Árum síðan, þegar ég notaði til að nota Microsoft Outlook fyrir tölvupóst minn, Ég vildi að lokum að skipta yfir í Gmail. Og svo, ég flutt öll mín tengiliði úr Outlook sem CSV skrá. Comma aðskilin gildi, sem bara ætlað I hafði alla mína vini nöfn og síðast nöfn og símanúmer og númer zip og allt það. Og þá er ég gerði mistök að opna það upp í Excel, sem er töflureikni forrit sem skilur CSV skrá eins og við höfum séð. En þá verð ég að hafa högg, eins og, Command eða Control S á einum stað. Og Excel virðist á þeim tíma hafði lögun að félag hvenær það sá fjöldi, það reyndi að vera gagnlegt. Og ef þessi tala byrjaði með núll, það myndi bara losna við þá. Hvers vegna gera þú þörf leiðandi núll á heiltölur? Þeir eru hégómi, stærðfræðilega. Þeir eru ekki tilgangslaust í US póstkerfi. Svo, ég hef haft í mörg ár, til þessa dags, ég er enn hefur vini sem þegar sjaldgæf tilfelli sem ég þarf einhver er takast þessa dagana, Ég ætla samt að sjá að ég hafa a vinur í Cambridge, Massachusetts, 2138. Og það er pirrandi ef þú ert reyna að raða á kerfisbundið mynda umslag eða bara hripa það niður. Og það er vegna þessa ástæðu, Ég valdi rangt gögn tegund. Svo elska ég hugmyndina. Við skulum nota char sviði. Fimm stafir, nema það er horn raunin. Ef þú sendir enn póst, stundum zip kóða þessa dagana, þeir eru, eins og, auk fjögurra. Svo þurfum við bandstrik og þá við þurfum fjóra tölustafi. Svo til að vera heiðarlegur, það gæti fara margar mismunandi leiðir. Fyrir nú, ég ætla að halda það einfalt og ég er bara að fara að segja að það er fimm CHAR gildi og við erum að fara að sleppa öllu sprettinn plús fjórir. En þetta eru tegundir af tradeoffs. Og þú getur hugsa um að Sömu vandamál skapist með númerum eða öðrum sviðum. Og nú, þetta er í raun heimska vegur að fara niður. Segjum bæði Rob og ég og Hannah og Maria og [? Davon?] Og Andy og öðrum á starfsfólki, býr í Cambridge, Massachusetts, 02138. Þetta finnst reyndar heimskur að ég er bæta við notenda töflu mínu, borg, ríki, og zip. Hvers vegna? Áhorfendur: [inaudible] DAVID Malan: Segðu þetta aftur Áhorfendur: [inaudible] DAVID Malan: Þeir eru alltaf að fara saman, ekki satt? Þegar það kemur í ljós, sem við notuðum til að hugsa þetta var raunin fyrr en við tæmandi leitaði alla Bandaríkjunum, og kemur í ljós að það að einhvers ósamræmis þar sem margar borgir hafa sama zip, sem er undarlegt. En, ef við kveða nú að 02138 er alltaf Cambridge, Massachusetts, hvers vegna í heiminum myndi þú geymt í gagnasafninu Cambridge og MA og 02138 fyrir mig og fyrir Hönnu og fyrir Rob og fyrir [? Davon?] Og fyrir aðra sem búa hér í Cambridge, það er fullkomlega óþarfi. Við ættum að komast burt með bara geyma það? Bara Póstnúmer. En þá, ef við geyma bara Póstnúmer, ég vil, sennilega, fyrir vefsvæðið mitt að vita hvar 02138 er. Svo þarf ég annað borð. Og það er allt í lagi. Og í raun er þetta einn af hönnun ferli að hanna borðum að þú munt gera í PSet7 eins vel þar þú vilt að þáttur algeng gögn. Rétt eins og við höfum verið að þátta út algeng kóða og þátta út sameiginlegt stíll frá CSS, hér of í gagnagrunninum, ef ég þarf bara 02138 til einstaklega þekkja heimabæ einhvers, Geymið ekki við Cambridge, Mass fyrir hvert fjári notandi í töflunni. Þess í stað hafa sérstakt töflu sem heitir Zips sem ættu að hafa það dálka? Líklega ID sviði, bara vegna þess, að meginreglur við erum að tala um núna. Sennilega zip reit fyrir 02138. Og þá líklega hvað annað dálka? Borg og ríki, en aðeins hafa einn röð fyrir 02138, ein röð fyrir 02139, ein röð fyrir 90210. Og það er bókstaflega allt zip númer ég veit. Svo nú, hvað getur þú gert? Þetta er erfið, því nú hef ég fengið tvær töflur. Svo eru notendur mínir mestu hérna, en upplýsingar borg ríki þeirra er hérna. Svo snýr það út með SQL, það er í raun leið til að taka þátt í upplýsingar, og þú munt sjá þetta í pset. En það kemur í ljós að þú getur gera eitthvað eins og this. SELECT stjörnu frá notendum, JOIN þjappaðar ON notendur punktur Service jafngildir zips punktur zip. Sem er lítið wordy, að vísu, en þetta bara þýðir velja allt frá Ferlið tekur notendur mitt borð og zips mitt borð. Taka þátt í þeim á einn reit þeir hafa úr dálki. Svo, bókstaflega að gera eitthvað eins og þetta, og gefa mér aftur ný tímabundin borð það er breiðari, það er stærri, sem hefur alla dálkum frá þeim báðum. Og það, einfaldlega, væri setningafræði fyrir að gera eitthvað eins og this. Svo, það er þetta framundan, en það er að fara að vera aðrar ákvarðanir hönnun sem þú munt að gera, ekki aðeins með vísitölur en einnig í gangi í áskorunum. Í raun, það er áskorun í öllum gagnagrunni hönnun þar stundum tveir fólk might vilja fá aðgang að sömu raðir gagnagrunninum borð. Svo, þetta er eitthvað sem við munum lenda í PSet7 eins og heilbrigður. En ég hélt að ég myndi líta á einn árás sem er mögulegt í SQL. Hvað eru nokkrar af þeim vandamál sem geta komið upp? Svo verður þú lendir þetta í PSet7. Og við segjum þér beinlínis hvað erfðaskrá lausn á þessu vandamáli er. En ef þú tekur meiri bekknum, sérstaklega í stýrikerfum, þú ert að fara að lenda í spurning um atomicity, vandamálið að reyna að gera margar hlutir allt í einu án truflana. Og ég hélt að ég myndi kynna þetta Hugmyndin um PSet7 með samlíking sem ég lærði sjálfur í Margo Seltzer er CS164 stýrikerfi flokks árum. Segjum sem svo að þú ert einn af þessum dorm fridges í herbergi dorm eða hús, og þú ert með alvöru penchant fyrir mjólk. Og svo kemur þú heim úr flokkum einn daginn, opna þú ísskápur. Oh, fjandinn það. Það er engin mjólk í ísskápnum. Svo, loka þú ísskápur, læsa dyrunum, læsa dorm þinn, ganga handan við hornið að CVS, komast í línu, og byrja að skoða að mjólk. Og það er að fara að taka smá stund, vegna þess að þeir fjandans sjálf með kaup einkennisorð taka að eilífu að nota engu að síður. Svo á meðan, herbergisfélagi þinn kemur heim. Hann eða hún finnst í raun mjólk eins og heilbrigður. Þeir koma inn í dorm herbergi, opna ísskápinn, ó, fjári það. Það er ekkert meiri mjólk. Svo, hann eða hún einnig fer handan við hornið. En nú, þar sem það er eins og tveir eða þrjár eða fjórar CVSes nágrenninu, þeir koma til að fara til einn af mismunandi sjálfur á torginu. Og svo nú, nokkrar mínútur síðar, bæði þú koma heim og ugh, versta vandamálið alltaf. Nú þú ert með of mikið mjólk vegna þess að það er að fara að fara súr. Og þú eins og mjólk, en þú í raun ekki eins mjólk. Svo nú, þetta var dýrt mistök því að þið tekið ákvörðun byggist á ástand sumra breytu sem var í því ferli breytt af þér, frumkvöðull að fara að fá mjólk. Svo, hvað er kannski mannlegt lausn á því vandamáli? Áhorfendur: [inaudible] DAVID Malan: Skildu eftir athugasemd, ekki satt? Fara alltaf í huga, ef þú ert þekki þá tónleika. Já, það eru tveir af okkur. Svo, fara alltaf í huga, eða bókstaflega læsa ísskápur með einhvers konar hengilás eða eitthvað á toppinn eins og þessi. En það er í raun að fara að vera lykill vandamál með hönnun gagnasafn, sérstaklega þegar þú gætir hafa Margir vafrar, margar fartölvur, mörgum notendum allir að reyna að uppfæra upplýsingar í einu. Sérstaklega viðkvæm upplýsingar eins fjárhagslegar upplýsingar, þar með birgðir viðskipti website eins og þú munt vera að byggja, hvað ef þú vilt að athuga hversu mikið fé þú ert og svo ef þú átt nóg, kaupa lager? En hvað ef einhver annar sem hefur sameiginlega reikning með þér er samtímis að reyna að kaupa lager? Svo, hann eða hún er að haka við Viðskiptajöfnuður, bæði þig fá aftur sama Svarið, það er engin mjólk. Eða báðir af þú fá til baka svar, þú hefur $ 100 í reikninginn. Bæði þú að reyna að gera ákvörðun til að kaupa einn hlut af einhverju fyrirtæki lager. Og nú, hvað gerist? Þú hefur tvo hluti? Þú hefur enga hluti? Vandamál eins og þessi geta komið upp. Svo munum við lenda að. SQL innspýting árásir, sem betur fer, eru eitthvað sem við munum hjálpa þér með, en þetta eru atrociously algengar þessa dagana enn. Svo, þetta er bara dæmi. Ég geri engar kröfur sem Harvard PIN kerfi er viðkvæmt þessu tiltekna árás. Við höfum reynt. En, þú veist að við með reit svona. Og Net ID Yale hefur svipað leita skjáinn þessa dagana. Og það kemur í ljós, að kannski PIN kerfi er innleitt í PHP. Og ef það were-- það er not-- þeir gæti hafa kóða sem lítur svona út. Þeir hafa tvær breytur. Gefðu mér notandanafn og lykilorð frá eftir frábær alþjóðlegum breytu sem við ræddum um áðan. Kannski hefur Harvard fyrirspurn eins VELJA stjörnu notendur þar notandanafn jafngildir að og lykilorð jafngildir það. Og eftir að ég er bara tengja það í notkun hrokkið Brace táknið frá öðru dag, sem þýðir bara stinga í gildi hér. Ég ætla ekki að nota spurningarmerki tækni. Ég hef ekki neina annað eða þriðju rök. Ég er bara bókstaflega byggja band sjálfur. Vandamálið, þó, er að ef einhver eins og a scroob, sem er tilvísun til kvikmynd, skráir sig með eitthvað eins og þetta, og ég hef eytt punkta sem venjulega ná upp lykilorð, hvað ef hann er sérstaklega illgjarn og lykilorð hans kannski er 12345, á myndinni heitir "Spaceballs" en hann gagnrýninn tegundir a einn vitna eftir fimm, þá bókstaflega orðið eða í rúm, og þá vitna, unquote einn jafngildir vitna einn, En taka hann sleppt því? Hann er sleppt tilvitnunina á hægri og hann er sleppt vitna til vinstri. Því ef þetta árásarmaður Stolt scroob er er að fólk sem skrifaði þetta PHP kóða voru ekki svo björt, Kannski hafa þeir bara sumir einn vitna um brúun breytu í hrokkið axlabönd? Og svo kannski, gæti hann góður af ljúka hugsun þeirra fyrir þá, en á þann hátt sem er að fara til að láta hann brotist inn PIN kerfið. Með öðrum orðum, gera ráð fyrir að þetta er kóðinn og við stinga nú í hvað scroob slegið. Og það er rautt, vegna þess að það er slæmt. Og undirliggjandi texta er það sem hann slóst í, scroob gæti plata miðlara Harvard í byggingu SQL fyrirspurn band sem lítur svona út. Lykilorð jafngildir 12.345 eða einn jafngildir einn. Niðurstaðan sem rökrétt, er að þetta mun tengja scroob í ef lykilorð hans er 12345 eða ef einn jafngildir einn, sem er auðvitað alltaf satt, sem þýðir scroob fær alltaf í. Og svo, hvernig til festa þetta, eins og í fullt af tilvikum, væri að skrifa meira mótherjanum. Til að nota eitthvað eins og okkar Raunveruleg fyrirspurn virka, sem þú munt sjá í PSet7, þar sem við stinga í eitthvað eins og spurningarmerkjum hér. Og fegurð sem fyrirspurn virka sem við gefið þér er það ver gegn þeim svokölluð SQL innspýting árásir, þar einhver er svikull kóðann þinn inn sprauta eigin SQL sitt númer. Vegna þess hvað fyrirspurn virka við gefum þú verður í raun að gera, ef þú ert að nota spurningarmerki setningafræði og annað og þriðja rök hér, er hvað gerði það að bæta við inntak sem notandinn veitt? Þeir sviga vitna. Svo, sleppur það allir hugsanlega hættuleg stafir. Þetta lítur skrítið núna, en það er ekki viðkvæmt vegna þess að það er ekki breyta rökfræði lengur því að heil lykilorð er nú einn tilvitnun sem er ekki, í raun, lykilorð scroob er. Svo, það er verið nokkrar brandara um þetta í gegnum árin. Svo, þetta var mynd tekin sumir gáfuð í bílastæði þar sem þú gætir vita að sumum borgum og ríki reyna að skanna leyfi þinn disk til að senda þér reikning eða að miða sem þú ef þú ferð í gegnum án þess að, eins og, E-Z Pass hlutur. Svo, þessi manneskja gert ráð fyrir að kannski fólk að skrifa E-Z Pass kerfi voru ekki svo björt, og kannski þeir bara concatenated saman band, svo að hann eða hún gat ekki illgirni ekki bara ljúka hugsun þeirra, en í raun framkvæma slæm stjórn, sem við höfum ekki nefna, en þú getur sennilega giska á. Sem auk þess að eyða og setja og uppfæra og velja, það er líka leitarorð heitir falla, sem bókstaflega eyðir allt í dag, sem er sérstaklega slæmt. Við getum súmma inn á þetta ef það er svolítið erfitt að sjá. Þetta, nú er frægur teiknimynd það er frábærlega snjall nú og skiljanlegt. [Hlátur] Já, flott. Konar geeking út. Svo þetta, þá eru SQL innspýting árásir. Og þeir eru svo auðvelt að forðast með því að nota rétt númer eða rétt bókasöfnum. Og þú munt sjá í PSet7, það er hvers vegna við gefum þér fyrirspurn virka. Svo, a par af styttingu sem við héldum að við myndum gefa þér hér í okkar eftir mínútum saman. Svo, eins og þú manst frá viku núll, við kynnti þessar tvær ljósaperur sem eru ágætur, ekki bara vegna þess að þeir eru nokkuð og eru litrík, heldur vegna þess að þeir styðja eitthvað kallað API, er umsókn Forritun Interface Og í CS50 svona langt, höfum við að mestu leyti verið fá og POST, en það kemur í ljós það er önnur HTTP sagnir eins sett. Og í raun, þetta var renna frá viku núll þar ef þú skrifar kóðann sem sendir a la PSet6 HTTP beiðni sem lítur út eins og þetta með þessum klumpur af texta neðst, sem heitir JSON, eða JavaScript Object Ritháttur sem við munum tala um næstu viku, þú getur snúið eða slökkva eða breyting litur ljós eins og þeim. Þannig að ef CS50 hefur einnig svo og ýmis þessara ljósaperur hér í New Haven ef þú vilt að láni þá fyrir lokaverkefni, einnig nokkur Microsoft Hljómsveitir, sem eru eins og áhorfandi að þú gengur um úlnliðinn sem álíka hafa API þannig að þú getur skrifað eigin hugbúnað fyrir þá. Við höfum reikning hjá IOS kóðann Apple svo að ef þú ert með Apple Watch eða iPhone eða iPad eða iPod, þú getur skrifað kóða sem í raun keyrir á þeim. Við hafa a heild búnt af Arduinos, sem eru litla tölvur án tilvikum, í raun, að þú getur tengt í gegnum USB, yfirleitt að eigin Mac eða PC, skrifa kóða sem keyrir á þessi líkamlega tæki sem oft hafa skynjara á þeim svo þú getur samskipti við raunverulega heimi. Við hafa a heild búnt af Leap Motion tæki, sem eru USB tæki fyrir Macs og PCs, hér og aftur, í New Haven. Og ef þú tengir það við þinn Lagsi, þú getur raunverulega stjórna tölvunni með því að skrifa hugbúnað sem um IR geislar, tölur út hvar mönnum hendurnar eru, jafnvel án þess að snerta lyklaborðið. Við héldum að við myndum deila fljótleg svipinn á þessu, til dæmis. [TÓNLIST spila] Svo höfum við í heild fullt af þessum hlutum, of, kallaði Myo handlegg hljómsveitum sem þú setur yfir framhandlegg þinn og þá er hægt að stjórna raunverulegur heimurinn eða raunverulegur veröld eins og þetta. [TÓNLIST spila] Eða höfum við einnig nokkur Google Pappi, sem er bókstaflega, eins og, pappakassa þú gætir sett á þinn andlit, en renna í símanum í það þannig að þú setur glas af þinn Síminn mjög nálægt augun. Og Google Pappi er frekar ódýr á $ 10 eða $ 20. Og það hefur litla linsur sem örlítið burt vakt myndin á skjánum fyrir mönnum þínum augu til að gefa þér tilfinningu fyrir dýpt svo að þú hafir í raun 3D umhverfi fyrir framan þig. Við höfum einnig nokkra Samsung Gear, sem er dýrari útgáfa af þessu, en það getur álíka renna í að Android síma og gefa þér þá ímynd of-- eða gefa reynslu af sýndarveruleika. Og í okkar síðustu tvær mínútur, við héldum að við myndum reyna að gera þetta. Ef ég get verkefni það Colton hefur hér bara brýni matarlyst, láta mig fara á undan og henda upp á tjaldinu hér. Leyfðu mér að drepa ljósin. Colton, viltu fara á undan og setja á þinn klefi um stund og koma á yfir til miðja af sviðinu? Og viltu project-- þetta er það Colton sér. Nú, Wi-Fi í hér er ekki svo sterk fyrir þetta tæki að þetta er frábær sannfærandi, en Colton er bókstaflega í þessum töfrandi framúrstefnulegt stað. Hann sér aðeins eina mynd. Þú ert að sjá vinstri og hægra auga hans að heilinn hans er saumað saman í þrívíðu umhverfi á andliti hans. Hann er bara að velja valmyndarvalkost hér. Og svo aftur, er hann þreytandi þetta höfuðtól með Samsung síma á það sem er þráðlaust miðla til kostnaður okkar. Nú þú ert á Mars, held ég? COLTON: Ég held það. Ég er ekki viss um [inaudible]. [Hlátur] DAVID Malan: Skrúfjárn út Mars hefur þessar valmyndir. COLTON: [inaudible] sumir kaldur stöðum ef við viljum fara to-- DAVID Malan: Hvar viljum við fara? COLTON: [inaudible] DAVID Malan: Og við skulum sjá þar Colton er að taka við okkur núna. COLTON: [inaudible] DAVID Malan: Svo það er svo margir mismunandi stöðum sem þú getur tekið sjálfur. Það er FAPIs um sem þú getur skrifa leiki eða milliverkanir sem hlaupa í raun á símanum. Svo, þú í raun bara skrifa farsíma app. En þökk sé hugbúnaði og grafík getu, nú er Colton í þetta agnarsmár sumarbústaður. Og í hættu á yfirþyrmandi okkur, Colton og ég kyrr fyrir en á lok bekknum hér í dag ef þú vilt koma upp og leika. Og við munum koma þeim aftur í næstu viku eins og heilbrigður. Án frekari, ado það er það í dag. Við munum sjá þig í næstu viku. [TÓNLIST - RAGGA Twins, "BAD MAN"]