>> Poriadku.
Takže, bez ďalších okolkov, SQL, Structured Query Language.
Takže ste asi zvyknutí to na aspoň v CS50, možno v CS165,
Možno vo vašej vlastnej osobné projekty.
A čo sa SQL nechať urobiť, v SQL Server všeobecne?
Jo?
[Nepočuteľný Poznámka]
OK, to bolo veľmi zaistený spôsob, ako to povedať.
Áno. Tak to umožňuje môžete ukladať dáta
a čo je dôležitejšie umožňuje dotazovať na dáta.
A to je krok vpred
používať niečo jednoduchšie ako CSV, vpravo.
Oddelené čiarkami premenné.
Podobné hodnoty.
Rovnako tak umožňujú ušetriť Informácie jeden riadok
v textovom súbore.
Ale čo je to nevýhoda Súbor CSV pre ukladanie dát,
aj keď v skutočnosti sa riadky a stĺpce z neho?
Jo.
>> Nemusíte "majú rovnaké organizácie
Účinnosť [nepočuteľný].
>> Nemáte rovnaký účinnosť organizácie.
Čo tým myslíš?
>> No, ako [nepočuteľný] majú ako primárny [počuť].
>> OK. Jo.
>> Je to relačnej databázy môžete mať viac databáz
navzájom prepojené veľmi špecifickým spôsobom.
>> OK. Dobrá.
>> Je to [nepočuteľný] nastaviť CSV.
>> A dovoľte mi vyladiť trochu terminológie.
Takže viac tabuliek v databáze, určite,
a že ide nad rámec toho, čo môžete to urobiť len s jedným CSV.
Ale v skutočnosti obmedzenia s CSV Tvrdím, je
že neefektívnosť toho všetkého.
Je to veľmi jednoduché rozloženie.
Ale ak si chcete urobiť dotaz, čo je čas beží
z akéhokoľvek výberového dotazu na súbore CSV?
Myslím, že je to veľký starý [počuť], pravdu, pretože v najhoršom prípade,
sa zvýšil na samom dne.
Dokonca aj keď ste mali radené celý Súbor CSV, ak neviete,
že dopredu, dobre, stále budete mať
Ak chcete prehľadať celú vec.
Takže, medzi vecami, budeme mať
používať skutočné databázy s použitím jazyka
ako SQL ich môžeme pýtať to a môžeme dopredu
ako databáza dizajnérov určiť, aké sú polia
ktoré boli pravdepodobne bude mať otázky týkajúce sa tak, že ľudia,
na MySQL alebo Microsoft alebo Oracle,
kto urobil databáze Používate môžete robiť všetko,
tvrdej práce zisťuje, OK,
vzhľadom miliónov týchto IDS.
Ako môžeme rozloženie - je v pamäti?
Nejaký druh stromu štruktúrovať možná,
takže keď robíte skutočne vykonať výber,
je to niečo, čo je logaritmické alebo logaritmickej
z logaritmickej v čase skôr než v skutočnosti premenená
do niečoho lineárne.
Takže máme veľa výkon, ktorý spôsob.
A môžeme tiež uložiť oveľa viac Údaje ľahšie pretože SQL
Server je zvyčajne uložená v pamäti RAM, aj keď diely
z toho môže byť uložený na disku a už asi viete teraz
že RAM je všeobecne rýchlejší než disky,
tak to je dobrá vec.
A tiež môžeme zvládnuť súbežnosť oveľa lepšie.
Ak ste si vzal 165 alebo 161, Viete, že keď dvaja ľudia sa snažia
urobiť rovnakú vec naraz v systéme,
zlé veci sa zvyčajne nestane.
Takže okrem ďalších funkcií sme môžete dostať, ak navrhujeme naše stoly
v správna cesta je lepšia podpora a zabezpečenie
pokiaľ ide o súbežnosti.
Takže, dvaja ľudia v dvoch častiach
na svete pomocou rovnakého webové stránky, ak sa obaja snažiť
kúpiť niečo na rovnakej čas, že objednávka nebude
ísť súčasne.
Nejako by serializovať niekto iný ako naše vlastné -
niekto iný ako my sami.
Databáza bude to, že pre nás.
Takže, keď je to najjednoduchšia forma,
Nám umožňuje SQL dotazu relačnej databázy.
Relačnej databázy je ten, ktorý má jeden
alebo viac tabuliek v ňom obvykle.
A ak je to trochu oboznámení,
môžete naozaj len myslieť to je Excel alebo čísla
alebo Google tabuľky.
Je to len má riadkov a stĺpcov a zvyčajne v hornej časti každej
z týchto riadkov má pre to meno.
Takže by to mohlo byť číslo stĺpec, názov stĺpca,
adresu stĺpca a tak ďalej.
A potom môžete mať viac také tabuľky, ak chcete
začať, ktorým sa rôzne typy dát.
Ale môže vyvolať aspoň od CS50, že sme sa snažili
aby vám GUI založené na Nástroj [nepočuteľný]
pre správu databázy.
Hovorilo sa phpMyAdmin.
Takže je to len náhoda, že to bolo napísaný v PHP, naozaj,
ale to bolo len webový front-end k databáze.
A prostredníctvom rôznych kartách a odkazy, môžete začať
konfigurovať databáze pre seba.
Ale dobrý nástroj začať trochu pohodlnejšie
s je tiež príkazového riadku klienta.
Takže, ak používate CS50 Appliance alebo naozaj pomocou ľubovoľného makra PC
ktorá má príkazového riadku MySQL klient, môžete si tiež urobiť to nejako
zo starej školy, ako je tento.
Ako stranou projektu MySQL, aspoň open source verzia
z toho je teraz nazývané MariaDB pre z rôznych dôvodov si môžete prečítať
sa na Wikipédii, ale je to rovnaký softvér,
je to rovnaké syntaxe a tak ďalej,
skoro rovnaký základný kód.
A tak, keď som sa na to vyzve teraz môžem komunikovať
so svojou databázou oveľa ručne.
Takže prípad v bode, nechaj ma ísť napred
a len otvoriť okno terminálu.
Náhodou som sa s použitím CS50 Zariadenie, ale môžete to urobiť
na väčšine každom systéme ktoré máte nárok
nainštalovaný softvér.
A ja budem robiť MySQL-u k užívateľským menom John Harvard
v tomto konkrétnom systéme, p- na zadanie hesla, že budem typom
v trochu viac bezpečne tým, že udrie Enter.
Teraz som vyzvaný.
Budem písať crimson v CS50 spotrebiče
a teraz vidím v podstate že rovnakej obrazovke.
Ale je tu príkazy teraz že môžeme začať písať
ako ukázať databáz, a že to bude mi všetko ukázať
z databáz, ktoré som už vytvorený v systéme,
skoro rovnaký zoznam mali by ste vidieť v phpMyAdmin.
Je tu pár ďalších, ako je informácie o schéme a test,
ktoré, ak poke okolo CS50 zariadenie, môžeme schovať niektoré
z týchto tabuliek nižšej úrovne
ale oni boli tam celú tú dobu.
MySQL v skutočnosti má nízku úroveň vlastnosti, ako sú užívateľské mená
a hesla pre databázu sama o sebe, nie je pre vašu aplikáciu
že by ste mohli byť beží na vrchole toho.
Takže dopredu, dnes som vytvoril pár databáz,
z ktorých jeden sa nazýva courses50.
Kurzy sú niektorí z vás používajú CS50 samozrejme nakupovanie nástroj,
čo je veľká rozhranie pre Katalóg registrátora kurzu.
A to je vlastne pekný dataset hovoriť o "príčine,
jeden, sme tak nejako všetko samozrejme oboznámení s kurzami
a inštruktori a stretnutia miesta a všetky druh
z obyčajných vecí z vysokej školy,
ale je to tiež dostal nejaké zaujímavé príležitosti
pre dizajn.
Tak sme si mysleli, že by sme použiť Pojem katalóg predmetov
a nákupné nástroje ako napríklad v priebehu dneška triediť
rámu niektoré konštrukcie rozhodnutie, ktoré musíme urobiť.
Takže začnime tam.
Dajme tomu, že som vlastne chcel reprezentovať super najjednoduchšie
Samozrejme nákupy nástrojov.
A najjednoduchšie svet Viem si predstaviť, a jeden je
v ktorom sú kurzy a tam sú inštruktori.
A predpokladajme, že sa sake diskusie
, Že každý predmet má aspoň meno.
Tak poďme začať načrtnúť to.
Budem používať phpMyAdmin rovnako ako pohodlie,
takže sme nemuseli písať von všetky otázky ručne.
Ale tu som v mojom courses50 databázy.
Je-li oboznámení s tým, že bude byť veľmi jednoduché, akonáhle sa ponoríte
do svojho vlastného projektu ak by ste chceli použiť.
Chystám sa vytvoriť tabuľka s názvom kurzy
a ja si len myslím, z jedného poľa
teraz, názov kurzu.
Chystám sa ísť dopredu a povedzme, daj mi jeden stĺpec.
Teraz, ako si spomínam dostanete rozhranie, ktoré je trochu
takto.
A ten druhý hore úprimne z phpMyAdmin je, že druh
self-poučiť a že pomocou rozbaľovacích ponukách, môžete triediť
na čo vaše možné rozhodnutie dizajnu sú.
Tak idem dať Každý kurz meno.
To je názov tohto stĺpca.
A ako je to s jeho dátový typ?
Väčšina z vás by mal vedieť, na aspoň niektoré z týchto dátových typov
z predchádzajúcich skúseností.
Čo je vhodné pre názov kurzu?
Sharon?
>> Varchar.
>> OK, varchar, ktoré je variabilný Char.
A to, čo robí, že znamená viac technicky?
[Nepočuteľný Poznámka]
OK. Takže je to reťazec.
A var aspekt z toho vyplýva čo?
Variabilné. Ale to, čo to znamená?
Jo?
[Nepočuteľný Poznámka]
Presne tak. Takže je to premenná počet znakov
v reťazci hore do určitej maximum.
Tak tu je naša prvá Rozhodnutie designu.
Vlastne sme sa rozhodnúť, koľko bajtov maximálne
prideliť každej takejto reťazca.
Všeobecne povedané, budete chcieť, aby druh nie, aby to príliš malý,
nie, aby to príliš veľký Pretože jasné
ak príliš malý, že ste práve začnú skracovať dát
a stratíte informácie.
A ak je to príliš veľký, si len druh rozprávania databázy
očakávať a na optimalizovať pre viac dát
než by sa mohlo v skutočnosti vôbec dostať.
Takže to, čo je rozumné pocit číslo názov kurzu?
60? OK, takže 60.
To sa zdá celkom rozumné
ak je nie je výnimky, ktoré.
To fakt nie je tvrdé, rýchle pravidlo.
Ak chcete byť úprimný, pre historické dôvody veľa
zo ľudia budú vyberať 255 Pretože po roky, ktorá bola nejako
predvolenú maximálnu použitie 8 bajtov - 8 bitov ako svojho pultu.
Ja by som viac [nepočuteľný] môže použiť sily 2
ale to je trochu irelevantné.
Takže môžeme ísť s 60.
To znie rozumne tak dlho,
ako sme nakoniec neľutujem "Spôsobí, že je horná hranica.
Teraz predpokladajme, že opak rozhodnutie bolo urobené,
Nie je variabilné znaky, ale len char pole.
Takže na rozdiel od C a C + +, char neznamená, že jeden znak
a databázy, ktoré všeobecne znamená pevný počet
znakov v reťazci.
Aký by mal byť hore a / alebo Nevýhodou môjho výberu 60
pre char pole, miesto varchar?
To je presne ten prvý druh rozhodnutie budete musieť urobiť
pri kontrole [fonetický] out na projekte so svojimi partnermi.
Jo, Sharon znova.
[Nepočuteľný Poznámka]
Dobrá. Takže v prípade, že názov je menej
než 60 rokov potom strácate čo že delta je
medzi 60 a skutočná dĺžka.
Tak to proste pripadá plytvanie, viac bajtov, ako budete potrebovať.
Ale prečo to existuje?
Určite tam je nejaký nahor.
Jo?
[Nepočuteľný Poznámka]
Iste. Takže niekedy Možno viete, pevné číslo
znakov, ako je 10 číslic na telefónne číslo napríklad.
Ale koho to zaujíma, rovnako ako dôvod, prečo nie len hovoriť 11 rovnako
alebo prečo nie hovoriť 60 rovnako s varchar?
Aké výhody získame tým, že pozná a navrhovanie
za fixný počet znakov?
[Nepočuteľný Poznámka]
Ste na správnej ceste.
Takže je to optimalizácia, ale je to naozaj z - jo?
[Nepočuteľný Poznámka]
OK. Dobrá. Poďme sa zamerať na tej poslednej časti.
Tak indexovanie.
Tak to dopadá, keď sa vopred vedieť, že všetky
z vašich polí idú byť 60 znakov,
môžete naozaj myslíte, že to stĺpec v databáze Excel
ako mať veľmi rovný, vľavo oprávnené
a zarovnávajú vpravo hrany
pretože každý stĺpec je 60 znakov široký.
To znamená, že v tomto Reťazec je 60 znakov ďaleko
z tohto reťazca, 60 znaky preč od tejto jednej
a toto a toto.
Takže rovnako ako vtedy, keď ste dozvedel, C, mal si náhodný prístup
vo svete polí, Rovnaký nápad tu.
Ak je zastúpená váš stĺpec iba pomocou pevnej dĺžky znakov,
môžete efektívne index náhodne do 60 alebo 120 alebo 180
a môžete dostať na individuálne struny oveľa rýchlejšie.
Potom ak miesto, váš stĺp mal rovná ľavá hrana tak povediac
ale veľmi robustný právo hrana na stĺpci
pretože by ste mohli má 10 znakov,
15 znakov, 5 znakov.
Takže aj toto je jedna z vecí.
A niekedy len prostredníctvom pokusov a omylov
a experimentovanie môžete prísť
to, čo naozaj tá správna výzva je ale to sú druhy
otázok, ktoré treba ísť
prostredníctvom svojej mysle a / alebo tabuľky, keď príde čas
navrhnúť svojej databáze.
Takže, nie je nevyhnutne správne odpoveď, ale mali by ste
mať aspoň nejaké alebo dve vety v mysli
zálohovanie čokoľvek rozhodnutie urobíte.
Dobrá.
Takže poďme sa držať rolovanie na výzvy tu
ktoré sú phpMyAdmin UI.
Takže, predvolená hodnota pre meno, mal by som upresniť
že by malo byť mať Predvolená hodnota null?
Čo si myslíte?
Môže samozrejme mať null meno?
Len sa cíti divne, nie?
Ja si nemyslím, že niektorý nemenovaní kurzy na Harvarde.
A možno tam je nejaký temný kút prípad
kde je samozrejme daná rad
a profesor nemá vybrali meno pre ňu, ale -
Myslím, že sa to sakra s tým,
ako poďme ani obťažovať podporovať to.
Povedal by som, že v záujme pekné čisté databázy,
poďme stanoviť, že nemôžete mať predvolenú hodnotu null.
Prípadne by sme mohli urobiť niečo ako bez názvu kurzu
ktorý nie je na rozdiel od Mac OS a Windows urobiť
pri vytváraní zložky napríklad,
ale tam, že je trochu väčší zmysel
tak, že človek niečo vidieť.
Hovoríme o back-end databázy pravdepodobne
Pre katalógu kurzov.
Takže ja vlastne ani ako s myšlienkou, aby ju
v untitled mená kurzov
pretože to nie je naozaj nepomôže nikomu.
Takže nechajme to ako nikto, čo znamená, že po vložení
do tejto databázy, máte aby každý kurz meno
ktorá sa cíti trochu čistič na mňa.
Dobrá.
Takže rolovanie ďalej, kompletovanie.
To len má čo do činenia s znakovej sady a ktovie čo ešte
ak ste niekedy videli zmienky o švédčine
v phpMyAdmin, ktorý je Pretože ľudí
kto písal phpMyAdmin boli švédskej.
Je to PHP, alebo je to MySQL?
Jeden z tých dvoch, som Zabudol spatří.
Ale je to z historických dôvodov
ale môžete vyjadriť každý charakter v angličtine
že by ste mohli s švédčine takže je to do značnej miery non-záležitosť.
CS50 zariadenie, aj keď je používa - konfigurované pre použitie UTF-8,
tak, že vo všeobecnosti by mala nie pop pre vás.
Atribúty.
Takže žiadna z nich sú naozaj relevantné.
Vidím, binárne, nesignováno, Neprihlásenému zerofill,
a aktualizácie na aktuálnu časovú pečiatku.
Táto oblasť sa týka iba pre niektoré číselné polia
alebo nejaké časové pole.
Takže budeme preskočiť že úplne.
Null. Môže toto pole je null?
Takže nie. Máme už že druh konverzácie.
Takže nechceme Predvolená hodnota.
Nechceme, aby to bolo null.
Čo indexu?
Je tu štyri možnosti tu.
Čo to znamená, keď budeme špecifikovať
že tento riadok sa deje byť primárny kľúč?
Myslenie späť na CS50 alebo CS165, ak ste si ho vziať.
[Nepočuteľný Poznámka]
Presne tak. Takže primárny kľúč podľa definície je pole
, Ktorá jednoznačne identifikuje Každý riadok v tejto tabuľke.
A môžete sa spoľahnúť na to, aby to že jednoznačná identifikácia.
Takže, čo to znamená potom len byť jedinečná?
No, tak nejako z týchto dvoch má triediť
na základe dôsledkov pod kapotou.
Ale všeobecne, primárny kľúč je druh zmluvy, ktoré urobíte
s databázovým vec.
Keď som si otázky hľadá kurzu,
Budem používať tento Najmä poľa.
A vrátime sa Preto by sme mohli mať dva
Tieto voľby tu, primárny alebo jedinečný.
Unikátny len hovorí, to pole bude jedinečná
ale ja som naozaj robiť akékoľvek druh slovného záväzku tu
použitie tohto poľa robiť svoje vyhľadávanie
z dôvodov budeme vidieť len na chvíľu.
Ak by sme namiesto toho určiť index, čo to znamená určiť,
že pole má index na to?
Jo?
[Nepočuteľný Poznámka]
Presne tak. Bolo to optimalizovaný pre dotaz.
Takže vy - databázový server, Oracle, MySQL, čokoľvek,
bude všeobecne pracovať svoje kúzlo v zákulisí, akonáhle kliknete na tlačidlo
že možnosť a potom kliknite na tlačidlo Uložte a bude stavať
sa typicky stromová štruktúra, B-stromy, ak ste videli
alebo počul off, čo je veľmi krátka vyzerajúci strom
ktorý vám dáva veľmi pekné logaritmickej vlastnosti
pri vyhľadávaní na základe údajov.
Ak nezadáte index na poli, čo sa deje
, Že je chod Doba hľadania
pre ľubovoľný [Fonetický] Názov kurzu?
Čo je to?
[Nepočuteľný Poznámka]
Oh, [nepočuteľný], lineárne, nie?
Ak to tam je žiadne optimalizácia poskytnutá do databázy
a vy ste si myslel, databázy, aké
dát očakávať.
Najlepšie, čo môžete urobiť, je kontrola všetko, keď hľadáte
na nejakú hodnotu, a to najmä v prípade, že by
v skutočnosti duplicitné.
Fulltextové medzitým, budeme mávať rukami teraz.
Ale všeobecne, to je typ indexu, ktorý vám umožňuje
optimalizovať pre kľúčové slovo hľadá na poli.
Takže by to mohlo byť vhodným kandidátom
na ako opis kurzu kde by ste mohli mať pár
odsekov a môžete Chcete urobiť podreťazec zápasoch.
Full-text sa všeobecne nechať robíš, že celkom efektívne.
AI, to je hrozný druh vysvetlenie, ale ak budeme vznášať
nad ňou uvidíte Auto prírastok.
Nevzťahuje sa obaja tu ale auto prírastok je užitočný
na ako pole typu int, pretože databáza bude starať
procesu a navyše plusing že zakaždým, keď to vložku.
Takže, aj keď dvaja ľudia doslova na tlačidlo Odoslať
v rovnakom čase a snaží vytvoriť riadok nejako
v databáze, jeden z im dostane číslo I
druhý bude mať číslo I a 1.
Nemusíte sa báť,
o dvoch čísel pridelený rovnako, ak ste boli
ako to urobiť, sa v kóde.
Dobrá.
Takže som tak trochu rád, kde máme meno byť.
Takže poďme na tlačidlo Uložiť.
Je to dobrý dizajn pre databázové tabuľky?
A ako stranou, ak hrdzavé na SQL alebo druh
z práve sa vždy obrátiť na blind oči na to, čo sa deje,
Mohol som napísal presne, že -
tieto tri riadky na ktoré čierna a biela výzva
v príkazovom riadku klient alebo som mohol urobiť
že v kóde programovo.
Takže všetko phpMyAdmin robí pre ma, je mi len uloženie úsilie
pamätať niekedy syntaxe a písanie sa pre
ako nudné príkazy.
Dobrá.
Takže to nie je pocit, Najlepší dizajn, jedno pole tabuľky.
Teraz by sme mohli mať veci, ako sú profesori
a umiestnenie a popisy.
Ale aj potom, iba pomocou mena
identifikovať kurzy necíti ideálne.
Aké majú všeobecne sa v minulosti
ak ste použili databáz jednoznačne riadky?
Nepoužívate varchars zvyčajne.
Jo?
[Nepočuteľný Poznámka]
Jo. Takže typicky kurz ID.
Takže, najčastejšie prístup tu najmä
Pri použití rámca je vlastne len
použiť číslo ako celé číslo.
Tak ma nechaj ísť ďalej a robiť.
A môžeme to robiť v niekoľkých spôsoby, ale uvedomte si, keď som zväčšenie
v na dne tu.
Chystám sa povedať, pridať jeden stĺpy na konci tabuľky,
zvyčajne len pre vizuálnu pohodlie dáte ID
na začiatku tabuľky aj keď to nemá žiadnu skutočnú
funkčné dopad.
Takže som chcel povedať, Pridanie jedného stĺpca
na začiatku tabuľky.
Budem kliknite na tlačidlo Prejsť, že mi dáva späť túto UI tu.
Hovorme toto ID.
Ak si myslíme, že budeme mať nič viac urobiť 4000000 kurzy
pole int je v poriadku.
Mohli by sme dokonca zraziť dole
ale priestor je lacný takže kto naozaj zaujíma.
Ale snažíme sa napísať Facebook teraz,
nemusí byť zlá vec predvídať veľké ints
ktoré by nám 64-bitové ints
ale potom ste doslova zdvojnásobenie počtu bitov
ktoré používate, takže menšie kompromis
ale niečo, aby zvážila.
Teraz, to je mätúce staršie vec.
Tie by mohli vyvolať používať MySQL
že kedykoľvek budete deklarovať int Pole budete často vidieť rad
vedľa nej, ako je číslo 10.
To nemá nič spoločného s veľkosť počtu
alebo počet bitov.
To má čo do činenia s číslom znakov, ktoré sú používané
k vizuálnemu zobrazenie že int pole
pri použití okno terminálu.
Takže vidíme, že v okamihu.
Takže, nenechajte sa zmiasť zadaním čísla
tam, aj keď je to účinne nás s otázkou
pre jedného tu.
Tu, budem choďte do toho a povedal nepodpísané.
Neexistuje žiadny dôvod, aby odpady všetky naše záporných čísel
od databázy Všeobecne sa deje
predpokladať pozitívny hodnoty alebo null.
ID rozhodne nesmie byť null.
A čo si myslíte o index pre toto pole ID?
Poďme robiť to primárny.
Takže, čo keď, keď, ako môžem myslieť len na jednu CS164 samozrejme
na Harvarde a iba jeden CS50 kurz na Harvarde
a to je celkom moc pravda celkovo
že je potrebné výnimky [Nepočuteľné] oba semestre
alebo niečo divného, ​​ako že.
Ale ešte podstatnejšie je, prečo je to lepšie
použiť číselný identifikátor pre integrálne jednoznačne identifikovať kurzy skôr
než len unikátny reťazec?
Jo?
[Nepočuteľný Poznámka]
OK, zaujímavé.
Takže keď sme mali trochu cross-vypísal kurzy.
Tak to je dobrý príklad.
Nie som si istý, že by riešiť, že aj keď
tým, že im to isté Identifikačné číslo, ak je to
kam ideš s tým.
Nie? OK. Ale rozhodne roh prípad, aby zvážila.
Ak je druh - budeme potrebovať nejaký
z aliasing potenciálne.
[Nepočuteľný Poznámka]
Iste.
[Nepočuteľný Poznámka]
To je dobrý príklad.
Názov sa môže zmeniť v priebehu čas, úplne rozumné.
Čo ešte?
[Nepočuteľný Poznámka]
Ospravedlňujeme sa, ešte raz.
[Nepočuteľný Poznámka]
Jo, presne tak.
Takže naozaj, to je skutočný presvedčivý dôkaz je
že používate 32-bitový int je pravdepodobne bude rýchlejší
než nejaké premenné dĺžka char pole.
V prvom prípade sa môže doslova vojde do registra,
nehovoriac o moc menšie nároky na pamäť.
V druhom prípade budete musieť urobiť letovisko [fonetický]
k porovnávanie reťazcov, ktoré samy o sebe s lineárnou
vo veľkosti string potenciálne.
Takže, je to len pekná optimalizácia,
a najmä, že sa deje
aby nám to, čo sa nazýva Spojí efektívnejšie
za chvíľu.
Tak poďme na to.
Budeme sa stanovuje, že To je primárny
pretože som to nijako zvlášť Chcem sa starať alebo si myslíte,
o tom, čo číslo je v kurze.
Len nech sa na bez ohľadu na hodnoty, ktoré chcete.
Chystám sa povedať, auto increment takže môžem zadávať ten detail.
Rovnako ako v stranou by si mohol viem, že Harvard
aspoň má mať jedinečnú čísla kurzov.
Nemám žiadnu spomienku čo tento kurzov je.
Viem, že CS50 je katalógové číslo je 4949,
úplne ľubovoľný.
Ale je to divné, prípady kútik v tom, že aj
v registrarial skládku samozrejme tovar údaje,
niekedy kurzy, starej Kurzy majú rad ako 4.
Ale technicky, že pole char pole
že jednoducho začína 0004.
Takže aj tu, musíte byť pozor na rozlišovanie
medzi vecami, ako je Samozrejme katalógové číslo
ktoré by mohli mať nejaký človeka Pojem pevnej dĺžky, 0004,
a vy by ste nemali uchovávať že napríklad v ints.
Tento druh poľa by byť uložené na inom mieste.
Takže v Harvarde, keď sme boli vlastne robiť kurz
nákupné nástroj, je to asi nestačí
sa počet kurzov len s 1, 2, 3, 4.
Sme pravdepodobne bude mať
mať ďalšie pole tzv katalógové číslo,
, Ktorý je tiež predpokladá byť jedinečný Based
o ľudských dohovorov tu ale nie je to najlepšia voľba
pre jedinečný identifikátor, pretože to by mohlo byť s premenlivou dĺžkou.
To nemusí byť štyri znaky, mohlo by to byť päť.
V skutočnosti si myslím, že pár Pred rokmi sa pohybujú
k príčine tam päť postáv bolo viac ako 999 kurzov
celkom alebo niečo podobné že, alebo 9999 kurzy.
Takže, ktoré by mohli byť príkladom kde pole nie je primárne
ale to by mal byť jedinečný.
A e-mailová adresa je ešte jeden.
Možno budete chcieť, aby bol jedinečný
, Ale nie nevyhnutne Váš primárny kľúč.
Dobrá.
Takže dovoľte mi, aby som vybrnkat ďalšie Tabuľka oveľa rýchlejšie, než je tento.
Takže budem to nazývať jeden Inštruktori a idem
dať to celkom počet stĺpcov dvoch.
Idem sa učiť my Poučenie z poslednej doby.
Idem zavolať Prvý stĺpec ID.
Chystám sa zavolať Druhý stĺpec Názov.
Ja som tiež robiť Varchar.
Budem predpokladať, no profesor má názov dlhší
ako 60 znakov, aj keď Teraz to môže byť zatlačením
s niektorými dlhé názvy, špeciálne ľudia so strednými menami.
To je v poriadku pre dnešok.
Takže poďme prejdite sem.
Poďme urobiť znovu to unsigned.
Poďme urobiť tento primárny.
A my, aby duplicitné názvy
v prípade, že sú dve John Smith, alebo niečo také.
A teraz máme dve tabuľky.
Takže teraz, to vyvoláva otázka, ako môžem spojiť
v inštruktor s kurze?
Mám pocit, že som tak trochu dostal pred seba
pretože ak inštruktor učí kurz,
môj prvý inštinkt by skutočne sa vrátiť
na kurzy realizovať, to nebol dobrý nápad.
Dovoľte mi, aby som vlastne pridať jeden stĺpec na konci tabuľky,
kliknite na tlačidlo Prejsť, a budem zavolajte Tento inštruktor.
A ja budem robiť to varchar a ja budem robiť to 60.
A možno to nechám null teraz
v prípade, že kurz nemá bola unsigned v inštruktor
ktoré sa občas stane pred Termín spustenia a kliknite na tlačidlo Uložiť.
Ktorý z týchto návrhov dávate prednosť?
Prvý z nich, ak máme Tabuľka samostatná inštruktora
alebo druhý, kde sme práve Pridanie poľa do kurzu?
Takže je to úzko prepojiť inštruktor s kurzom.
[Nepočuteľný Poznámka]
OK. Dobrá. Ale dovoľte mi tlačiť späť.
Je to proste tak jednoduché, ako môžem stačí zadať meno osoby
do tejto tabuľky, ako je iste že má nejakú hodnotu, alebo -?
[Nepočuteľný Poznámka]
Dobrá.
No, nechaj ma byť ťažké tu.
Takže mi dovoľte povedať, že Tento kurz je CS51
a ja viem, že to učí v tomto roku dve osoby.
Takže, Henry Leitner a Jesse Tov, ale -
tak som si len dať čiarku medzi nimi, vpravo.
Som naozaj dobrý v CSV z minulosti.
[Nepočuteľný Poznámka]
Presne tak, v poriadku.
Akonáhle sa uchýliť na niečo také,
ktoré by mohli cítiť rozumné a môžete cítiť
ako je tento druh šikovný.
Som trochu požičať Myšlienka, ktorá je dobre fungovať,
požičať novú myšlienku a nejako kombinovať.
Ste trochu totálne poraziť bod pomocou databázy
V prvom rade, páč ak jedna z hodnôt
použitie je rýchlejšie vyhľadávanie z dôvodu rôznych indexov
a tabuliek, ktoré môžu byť vytvorené pre vás
databázový stroj sám.
Teraz, ak chcete hľadať pre všetky kurzy
že Jesse učí, teraz máte aby sa podreťazec odpovedajúci na všetky
inštruktora polí,
čo v praxi znamená, lineárne hľadať znovu, pretože máte
nájsť tento ľubovoľnú sadu z troch postáv kdekoľvek
V inštruktora oblasti predchádzala
v možno nasledovať čiarkou.
Tak to rozhodne neveští nič dobrého.
Tak nechaj ma ísť späť k stolu.
Nechaj ma ísť napred kurzy, vrátiť späť, že.
Budem jednoducho ísť dopredu a pustite toto pole.
A ak chcete to urobiť ručne,
Syntax je ALTER TABLE kurzy DROP inštruktora.
Tak poďme do toho a povedať, áno, že.
A vrátiť sa k tejto staršej myšlienky
kde mám samostatný Tabuľka pre inštruktorov.
Ale teraz to cíti trochu ako by som si dať kurz
v tabuľke kurzu je a inštruktor
v tabuľke inštruktora, ale ja nejako musí prepojiť dva.
A ako by ste Navrhujem, aby sme to?
[Nepočuteľný Poznámka]
Dobrá. Tak poďme na to.
A to môže zavolať Tabuľka teoreticky nič.
Chystám sa zámerne hovorte tomu ako veľa
rámcov by hovoria, medzi nimi,
Laravel ako uvidíte za chvíľu.
Chystám sa to nazvať kurz podčiarkovník inštruktora.
Použitie jednotného čísla v tomto puzdro pre každý zo slov
a všetko malými písmenami znova, a tiež -
potom abecedne radené zľava doprava.
To je úplne ľubovoľné, ale býva konvencie
v mnohých z týchto rámcov PHP v iných jazykoch.
Koľko stĺpcov potrebujem v to, čomu hovoríme spojiť tabuľky,
pripojiť ďalšie dva stoly dohromady?
Tri stĺpce?
Ktorý z nich - čo by to bolo?
[Nepočuteľný Poznámka]
OK. Dobrá. To funguje.
A my sme mohli technicky rez roh tu, ale veľa
rámcov, najmä by ešte dať aj tie riadky
jedinečné ID, aj keď sémanticky riadok
že naozaj záleží, alebo stĺpce, ktoré sme sa naozaj starajú
o sú posledné dve to, čo ste povedal, samozrejme ID
a inštruktor ID.
Tak poďme na to.
Zavolám tento riadok iba ID, rovnako ako sme to urobili predtým.
Ale toto ja idem volať kurz ID.
Tohle budem volajte inštruktor ID.
A ja idem stanovuje, že všetky
z nich sú unsigned "Pretože chcem
maximalizovať svoj 4 miliárd int rozsah.
Žiadny z nich by mal mať hodnotu null.
Chystám sa stanovuje, že ID by malo aj naďalej byť primárna.
A opäť, je to len konvencie,
Mnoho rámcov aj keď nemáte zoradiť
v zásade je potrebné jedinečný identifikátor riadku,
ukázalo sa, že je to výhodné pre kód SQL, ktorý sa deje
sa automaticky generované pre nás.
Takže nechám, že ako primárny.
Ale teraz, som tak trochu má rozhodnutie o návrhu,
Samozrejme ID a inštruktor ID.
Čo indexy ak existuje by mali dostať?
Ak Nechám žiadne indexy, čo je dôsledok?
Čo je dôsledkom?
Výkon ako predtým, nie?
Ak nie je index, Najlepšie, čo môžete urobiť, je druh
z [nepočuteľný] pomocou Celá vec hľadá čísel.
Tak, že sa necíti šikovný.
Malo by to byť primárny?
Tak prečo nie?
Prečo nie primárne?
[Nepočuteľný Poznámka]
Perfect. Tak sme sa vrátiť z [fonetický] primárnej.
Už sme si vybrali, že.
Takže by malo byť jedinečné?
[Nepočuteľný Poznámka]
Dobrá. Takže, ak sa domnievate, jeden inštruktor na kurze,
úplne v pohode.
A to je určite bežný prípad
ale my už odkladať jeden Možno známy príklad.
CS51 dostal dva inštruktormi takže sme trochu
už teraz skrutkované v tomto prípade.
Keby sme povoliť iba jeden inštruktor,
môžeme vlastne robiť cestu sa spojiť tabuľky úplne,
späť na predchádzajúcu prístupu
a dal to meno osoby Možno ale inštruktor ID.
Ak viete, že každý, samozrejme len ako jeden inštruktor môžete mať len
jeden stĺpec.
Ale je variabilita čo nás dostal do problémov.
Dobrá.
Takže by malo byť jedinečné?
Nie Úplný text nie je pocit použiteľné.
Ako sme povedali skôr, že je
na ako podreťazec vyhovujúce pre popis.
Takže čo indexu?
No, index je pravdepodobne náš najlepší kandidát
ktorý hovorí, MySQL optimalizovať pre vyhľadávanie na to
alebo mi dovoľte rozviesť, optimalizácia pre vyhľadávanie, alebo sa pripojí
ako uvidíme za chvíľu
tak, že sú trochu účinnejšie
ako čokoľvek iného čisto lineárny.
Chcem, aby auto zvýši toto pole?
Takže nie, pretože pravda rodičovský element existuje
v tabuľke kurzov.
To je miesto, kde je to dostane plus,
a navyše, keď je to v skutočnosti vložená.
Tu je to všetko deje , Ktoré majú byť vložené ručne
u nás pravdepodobne v kóde.
Takže poďme jednoducho zadať Samozrejme, že ako ID
a inštruktor ID majú indexy.
Teraz budeme pokračovať a ušetrite.
A teraz, len ukázať, môžete korešpondencie
medzi tým, čo je pekné GUI priateľské rozhranie
a rozhranie príkazového riadku.
Nechaj ma ísť ďalej a robiť Nasledujúci v tomto riadku MySQL.
Budem hovoriť použitie courses50
ktorá je ľubovoľný názov Dal som do tejto databázy.
A teraz, ja ani Pamätáš si, čo sme urobili.
Takže dovoľte mi, aby som typ Tabuľkové zobrazenie
a všeobecne bodkočiarky tu bude tvoj priateľ
dokončiť dotazu.
A je to tu.
Tak tu sú riadky alebo skôr Tabuľky, ktoré máme tu.
Teraz som zabudol, čo Samozrejme vyzerá,
tak nech mi to popísať kurzy a teraz vidím trochu z ASCII
alebo verzie toho, čo phpMyAdmin robil
a vidím, že ID je int.
K dispozícii je 10.
Čo to znamená?
To jednoducho znamená, že keď je to Zobrazí sa, že to bude trvať
až 10 znakov na okno terminálu.
Je to s možnou hodnotou Null?
Nie, toto je primárny kľúč.
Môže to mať predvolenú hodnotu?
No a navyše, čo je špeciálny príznaky, ako je automatické prírastok.
Takže poďme jednoducho urobiť pár o rýchle vloženia nájdete tu.
Ja idem hore do - povedzme.
Poďme zmeniť stav na snímke
kde som sa trochu dopredu pripraviť to.
Toto je súhrn potom všetky tri z týchto tabuliek.
Už som len ručne napísal prvý príkaz.
A tu, šiel som do toho a typ ostatné za vás.
To je len štylistické vec.
Všeobecne platí, že mnoho ľudí zadajte príkazy SQL vo všetkých čiapky
a potom sa názvy tabuliek a Názvy polí v dolnej prípade,
aj keby len preto, že druh porastov
čo je váš terminológie a čo je syntax databáze.
Takže tu máme tri stoly, kurzy, inštruktori,
a kurzy inštruktori.
V snímke som dopredu, Nemal som na pole ID
ale to nie je v skutočnosti zlá vec vôbec.
Radi by sme proste vidieť tretí stĺpec tam.
Keby to urobil, že tu?
Takže teraz mi dovoľte navrhnúť, aby robíme veľa vloženie.
Takže tu je niekoľko údajov, Budem zoom palcov
Takže budem navrhovať že v kurzoch,
sa zaoberajú iba o troch chodoch.
A ja som si vybral tieto tri "Príčinou sú reprezentatívne
nejaké pekné - majú niektoré pekné vlastnosti.
CS1, CS50, CS51, ktoré majú rastúci ID
ale to, čo číslo je to, čo je úplne irelevantné.
To je len poradie, v ktorom oni boli auto vložené mnou.
Ako sa o inštruktormi?
Takže teraz, pretože Henry Leitner učí ako CS1 a CS51,
to je celkom vhodné implikácie pre náš návrh.
A Jesse učí CS51 a Malan učí CS50.
Takže teraz - alebo skôr sa jedná o len jedinečné identifikátory týchto ľudí.
A kurzy a inštruktori, - inštruktorov, všimnete tu.
ID1 ihrisko, ktoré bola CS1 je vyučovaný
inštruktora ID1, kto je Henry.
ID2 ihrisko, ktoré som , Že bol CS50 je vyučovaný
inštruktora ID2, ktorý je Malan.
A potom konečne, CS51, a Všimnite si, máme dva riadky.
A teraz to je dôvod, prečo vstúpiť Tabuľka je mocný je vyučovaný
ako Henry a Jesse.
Takže je to všetko v poriadku a dobré,
ale môžem ťažko pamätať z vrcholu
z mojej hlavy, kto je kto tu.
Ako môžete prípadne sa s tým vysporiadať v kóde,
aby bolo nutné tvrdé kódu vecí?
No, to je miesto, kde SQL sám začína byť náš priateľ.
A ja idem navrhnúť, že môžeme zadať nasledujúce.
Budem to robiť na v skutočná výzva.
Nechaj ma ísť dopredu a vložte tieto veci.
Takže, do tabuľky kurzy poďme robiť presne to, čo sme mali
pred chvíľou.
Idem ďalej a povedať, poďme vložiť CS1 a CS50.
Poďme vložiť niekoľko ďalších riadky naraz, CS51.
Teraz mi dovoľte, aby som do toho pustite a ušetrite.
Dobre, tak som len obnovovať tak rýchlo
ako môžem vzťahy sme práve videli na obrazovke.
A tak tu máme Leitner, tu máme Malan.
Dajme sami ďalší riadok, a Tov.
Teraz mi dovoľte zachrániť to.
A ja som im robil zámerne do rovnaké poradie.
Nie, zabudol som dať to auto prírastok.
Dovoľte mi, aby som sa rýchlo opraviť.
Urobím to v on-line kód.
To sa nepodarilo, ako stranou.
Skutočnosť, že som nemohol vložiť Leitner a Malanje
a Tov zlyhal, pretože som nemal zadať identifikačné číslo, aj keď
je to očakával jeden a ja zabudli skontrolovať auto prírastok,
čo znamená, že boli štandardne dostať na nulu.
Ale potom je v rozpore ktoré majetok, ktorý sme zadali.
Primárny kľúč bol porušený tak to ani nechaj ma to urobiť.
Takže dovoľte mi, aby som tento problém odstrániť.
Teraz mi dovoľte, aby som sa vrátiť do Na karte Vložiť kliknite sem a zadajte
že chcem Leitner, Malanje a ešte jeden riadok, Tov.
A teraz konečne, iba ten, ktorý je trochu ťažké
mať na pamäti, je samozrejme inštruktor.
Poďme vložiť teraz, že Samozrejme ID1 je inštruktor ID1
tak to je CS1 a Henry.
ID2 kurzu je inštruktor ID2, ktorá je CS50 a Malan.
A potom posledný z nich máme na starosti, je samozrejme ID3
ktorý je CS51, sa učia
podľa kurzu inštruktora 1, ktorý je Henry.
A za tretie, ako tiež učil o 3, čo je Tov.
Takže dúfajme, že teraz sme znovu to -
sakra, som urobil to isté.
Inštruktor kurzu potrebuje auto prírastok.
Dobrá.
Urobím to rýchlejšie tentoraz, Kurz 1, kurz 1, 2, 2.
A teraz konečne, my CS51 ktorá má samozrejme ID3 a Henryho.
A samozrejme ID3 a Jesse.
To vyzerá dobre.
OK. Takže teraz, poďme späť na terminálovom okne.
Takže keď som sa popísať Kurzy budeme vidieť.
Ak chcem vidieť kurzov môžem Teraz to vybrať hviezdu z kurzov,
bodkočiarka, a teraz vidíme, tieto hodnoty.
A teraz, čo ešte chcem robiť?
Vyberte hviezdu z inštruktorov, To je, ako som očakával,
a vyberte hviezdu z kurzov - Samozrejme podčiarkovník inštruktor.
Tak ako to mám teraz pripojiť Tieto tabuľky?
Tak krása, ktoré sa rozhodli hodnoty ID týmto spôsobom je
že ak si myslíte, že o pričom tabuľku kurzu
a inštruktor Tabuľka a potom vloženie
medzi týmito dvoma vo vašej mysli kurz inštruktor
Tabuľka môžete druh linky sa všetky tieto ID stĺpcov
takže zlúčiť ich do jeden masívny stĺpec, ktorý má všetky
informácií staráme o
SQL syntax pre tento nie je nevyhnutne zrejmé,
ale uvidíme, či sa nám to podarí.
Takže vybrať hviezda z kurzov,
a tam je niekoľko spôsob, ako to môžeme urobiť.
Idem stlačte Enter len druh formátu veci pekne,
ale že šípka je len symptóm na strane klienta nástroje
to nemá nič spoločné čo robiť s SQL samotného.
Takže vybrať hviezda z kurzov.
Chystám sa teraz pripojiť tabuľka kurzy
na stole kurzu inštruktora.
Ako? V oblasti s názvom courses.id rovnajúcu sa samozrejme
podčiarknuť inštruktor dot, čo je názov
zodpovedajúceho poľa tú, že chcem pár.
Nie je to ID.
Je to - čo, je mi ľúto?
>> ID kurzu.
OK, dovoľte mi, aby som oddialiť.
Ale ja chcem, aby sa to ešte o krok ďalej.
Ja som teraz urobil stôl a toto.
Teraz chcem vytiahnuť ten chlap na rovnako.
Takže, ďalšie dovoľte mi, aby som pripojiť celú túto vec
na inštruktora tabuľka na čo?
Podčiarkovník ihrisko instructor.instructor id
rovná instructors.id.
Takže by sme písali tento dotaz v niekoľkých ohľadoch.
Poradie, v ktorom som to urobil nie je tak dôležité.
Aj tak nejako sa to v moja myseľ zľava doprava.
Mohli sme to urobili v niekoľkými rôznymi spôsobmi
ale keď som teraz majú bodkočiarka a stlačte klávesu Enter,
Všimol som si staré nové dočasná tabuľka, sada výsledkov
tak povediac v databáze hovoriť.
A čo mám v tejto veci?
Mám na ID, meno, iné ID, čo je trochu mätúce,
pre mňa v túto chvíľu, Samozrejme ID,
inštruktor ID, ID a názov.
Tak, že na konci dňa máme správne dáta teraz.
Vidím, že CS1 je vyučovaný by Leitner, CS51 je vyučovaný
by Leitner a Tov, a CS50 je vyučovaný Malan.
Ale ja som trochu nervózny Táto dvojznačnosť som vytvoril.
Čo je nejednoznačnosť Ja som sa zmieňovať?
Jo?
[Nepočuteľný Poznámka]
K dispozícii sú tri stĺpce ID.
Takže môžeme skutočne opraviť a budeme skutočne deje
odložiť do nášho rámca nakoniec, aby nám pomohli s tým,
ale ukázalo sa, že je kľúčové slovo v SQL s názvom S,
kde môžete zadať alias, nový názov poľa
takže sa môžete vyhnúť dvojznačnosť vôbec.
Ale uvedomil si, že keď to neurobíme riešiť to nejako ako s
že kľúčové slovo alebo rámec,
tam je potenciálne to nejednoznačnosť, ak sa pokúsite
prístup k ID poľa pretože jasne tam sú tie,
s duplicitnými názvami tam.
Tak to je spojenie, a myslím, že vo svojej mysli najlepší spôsob, ako
premýšľať o tom naozaj je, aby sa dve tabuľky,
zoradí ich do Spôsob, akým budete chcieť.
A to je tak zvaný Vnútorné spojenie v tom zmysle,
že sme kombinovať tabuľky tu.
Existujú aj iné druhy spojenie, ktoré by sme mohli naraziť
v priebehu času, ako je vonkajšie spojenie,
, Ale z väčšej časti tejto je pravdepodobne najčastejšie
pre rekonštrukciu dát.
Čo sme urobili teraz všeobecne, čo sa nazýva
normalizácie dát, takže nie je kopírovanie kdekoľvek
v tabuľkách.
A zdvojením, by som znamenalo, že prvý prístup.
Ak by sme sa zmienil Leitner a Tov na viacerých miestach
v databáze, že to nie je všeobecne najlepšie rozhodnutie
zvlášť ak je ich názov sila zmeniť nadčas alebo v prípade
manželstva, rodenej sily Zmena sa chcete len jednu
kanonické miesto pre niektoré Hodnota údaje ako meno.
Dobrá.
Takže, na rekapituláciu, sme mali niekoľko rozhodnutí, dizajnu, ako zarobiť
a najdôležitejšie pravdepodobne zníži na niektoré
z týchto možností indexov.
Ale dovoľte mi poukázať na to, ešte jedna vec rovnako.
Ak sa mám vrátiť do phpMyAdmin,
jedna funkcia vám nemusí sa stretli pred
nasledujúce.
Ak idem do kurzu inštruktora, Už som to určiť, že niektoré
o tieto veci majú indexy.
Ale nechajte ma ísť do štruktúry Karta samozrejme inštruktora.
Dovoľte mi, aby som teraz kliknite na indexy a všimnite si nasledujúce.
Som tu stanovené, že je primárny kľúč
na stĺpci s názvom ID.
To je trochu zložitejšie spôsob určenia mohutnosť
a tak ďalej tak, že odkazuje na veľkosť poľa v bajtoch.
Ale teraz mám aj ďalšie pole, samozrejme číslo, ktoré je -
Predmet ID, ktoré sa vykonáva dopredu a jedinečná, na tlačidlo OK.
Urobil som túto v dopredu pre nás.
Takže, prečo je to - aby som klesnúť to kvôli diskusie.
Oh, vieš, čo som urobil?
OK. Takže, predtým, jeden z Nebezpečenstvo pomocou GUI nástroj
takto, keď sme boli Vytvorenie tejto spojiť tabuľky,
inštruktor tabuľka Samozrejme, pripomenúť, že som je uvedené
že chcem index na tomto poli
a index na to inej oblasti.
Vedľajším efektom kontrola oboch týchto krabíc
na jednej obrazovke je to, že phpMyAdmin vyvodiť z toho,
že chcem, nie dva samostatné indexy,
že chcem pripojiť index, ktorý je všeobecne len užitočné
alebo veľmi užitočné, keď ste hľadať na nie jedno pole
ale obaja z týchto oblastí.
A to je dôvod, prečo sme mali je spojiť sa
tak som ho upustil "príčinu, ktorá nebolo to, čo som chcel.
Skôr, idem prerobiť to tu.
Chystám sa ísť do kurzu ID
a za viac som len hovoriť pridať index.
A ja pôjdem pod inštruktor ID a hovoria pridať index.
A teraz, ak by sme kliknite sem všimnete máme tri indexy,
jeden primárny a ako ja určený jeden pre každú
z tých cudzích kľúčov.
A hovorím to preto, že zahraničné Samozrejme ID v tejto tabuľke mapách
na ktoré pole, len aby sa jasné, v inej tabuľke.
Primárny kľúč s názvom ID, v tabuľke s názvom kurzy,
a rovnaké riešenia pre druhú.
Ale teraz, je zaujímavý trik a v skutočnosti techniku.
Len som išiel dopredu a nechať ma to, že sa trochu pomalšie.
V rovnakom rozsahu, upozornenia hovorí vzťahov názor tu.
Aj kliknite na to a teraz Všimol som si, sa k tomu niekoľko obmedzení.
Takže jeden z upsides tiež
nie iba pomocou koncepčne cudzie kľúče a ďalšie tabuľky
ako máme práve na je že definuje index
na nich môžete mať môžete dokonca databáze pomoc viac
zabezpečenie integrity z tejto oblasti.
Konkrétne, môžem teraz zadať cez tento pokles
sa, že kurz ID pole
V tejto tabuľke v skutočnosti mapy na courses.id.
Rovnako tak, cvičiaci podčiarkovník ID mapované na instructors.id.
A teraz, prečo je to užitočné?
Dobre si všimnite, na pravej strane strane, čo sa zdá dnes.
Teraz môžem naučiť databázy, ktorá v prípade, Henry
napríklad kedy odíde do dôchodku a jeho riadok zmizne
od stola inštruktora dohromady tak, že
odstránená, môže mi cez tento kaskádové prístup zabezpečiť,
že všetky kurzy vyučuje sa už nie je spájané s ním.
Môžem učiť databáze odstrániť riadky
V tejto takzvanej pripojiť tabuľky automaticky, ak je Henry, alebo ak jeden
z jeho kurzov zmizne.
A teraz, prečo je to presvedčivé?
Jo?
[Nepočuteľný Poznámka]
Musíte to urobiť iba raz a dlhodobejšie, nie?
Je to veľmi jednoduché, ak druh ľudia prichádzajú a odchádzajú, kurzy prísť
a ísť, databáza by mohla len sa hemží kurzy
a fakulty, ktoré nie sú už relevantné dátového súboru.
A vaše dáta začína byť veľmi chaotický a špinavé a stale,
a tak tu môžeme radiť
o presadenie niektorých tieto obmedzenia.
Jo?
[Nepočuteľný Poznámka]
Vie, prostredníctvom tejto.
Toto je obrazovka, kde sme sa zadaním väzby
medzi cudzí kľúč a primárny kľúč.
Takže všetky pomenovanie Konvencie som spomínal
sa predtým sú len konvencie.
Neexistuje žiadny vlastný význam.
Toto je obrazovka ktorá je užitočná iba
potom, čo ste zadali indexy každej z týchto oblastí, ako sme to urobili.
A v tomto rozbaľovacom zozname máme niekoľko vecí, napríklad
ak kurz sa vypúšťa môžete v skutočnosti sa zabránilo, že vypustenie
od deje v prípade, že je riadok v tejto tabuľke
by len hovorím, obmedziť.
Inými slovami, Henry nemôže odísť
kým ho oddeliť od CS51 a CS1.
Tak to je dobrá vec.
Ale mohlo by to vyvolať Chyby v kóde
ak nechcete predvídať, že alebo môžeme mať kaskády,
kaskáda podobný páči kaskádové štýly
a kaskádové vodopád znamená, že v prípade, že -
ak Henry odíde tak - tým, že sa vypúšťa sa
tak bude jeho riadok tu mazané.
Žiadne akcie neznamená nič, alebo null je celkom užitočné, ak ste typ
zo chcieť nejaký historický rekord Henryho, čo učil CS51,
ale len chcem, aby polia byť null, takže tam riadky
ale nie je to už spojené s ním.
Takže sa jedná o veľmi silný techniky, ktoré môžete
a mali by používať, aj keď v záujme najmä
zachrániť vás od seba.
Takže mi dovoľte zmienku o pár záverečných informácií tu,
zložky, s ktorými ktoré by mohli byť užitočné
ako plánujeme pre návrh databázy.
Máte tiež možnosť cez databázový stroj
ktoré používate vo svojom kóde.
Ak ste oboznámení z CS161 by si mohol -
alebo dokonca 61, môžete všeobecne byť oboznámení so systémami súborov.
A je tu veci ako, NTFS a HFS +
a X2FS4 [fonetický] a 3, a tak ďalej.
Je tu rôzne spôsoby ukladanie dát na stole.
Rovnako tak sú tu rôzne spôsoby ukladania dát
v databáze v predvolenom nastavení aspoň v prístroji
s najnovšou verziou MySQL.
Boli sme s použitím databázový stroj volal, NoDB,
ktorý podporuje Niekoľko pekné vlastnosti.
Ale ďalší obyčajný je tiež volal MyISAM a ďalším
, Ktoré možno použiť, je pamäť, čo znamená, nedávajte nič
na disku, len držať veci v pamäti.
Z väčšej časti pravdepodobne nebude pokazí práve začína
s NoDB, ale aj pre všetky projekty ktoré majú tendenciu zahŕňať vysokú mieru
vloženie napríklad, ako veľa rýchle logovanie,
stovky vecí za sekundu alebo tisíce vecí.
Kedykoľvek máte Veľa vecí sa deje
na v databáze potom tento druhy
rozhodnutie o nižšej úrovne začať, aby sa zapojili.
Úplné znenie funkcie pre inštancie funguje len v MyISAM
tak, že má vplyv.
Ale môže vyvolať to, poďme aspoň motivovať, prečo sa staráme
o NoDB najmä.
A závod podmienky všeobecne sa odkazuje na čo?
Dobre, to je narážka na príklad niektoré
z vás možno počuli v minulých rokoch, či 161 alebo 50
kde budete mať spolubývajúci, obaja z vás naozaj rád mlieko,
jeden z vás dostane domov najprv otvorí chladničky nie je mlieko,
zavrieť chladničku prechádzku cez ulice do CVS a získať
v súlade so kúpiť nejaké mlieko.
Medzitým, váš spolubývajúci príde sem.
Ona tiež má rád mlieko.
Otvorte chladničku a si uvedomí, žiadne mlieko.
Tu sa potom ide do ukladať, možno druhý CVS.
Rýchly posun vpred niekoľko minút neskôr sa vrátil a teraz aj
ze ste si kúpili mlieko.
Jeden z nich sa teraz bude pokaziť, pretože nemáte
ako mlieko, ktoré veľa a To je problém, že jo?
Vzhľadom k tomu, ako vás inšpekciu stav určitej veličiny
a urobil rozhodnutie na základe na to, aj keď stať
tejto premennej bol v podstate v procese bolo zmenené,
všetci to pomaly množstvo času to berie
dostať sa do a z CVS.
Takže to, čo je trochu hlúpe skutočné world riešenie tohto problému?
Zanechať odkaz, že jo?
To sa stalo minule.
Vždy zanechať odkaz alebo Visiaci zámok vec doslova.
A ja hovorím, visiaci zámok, pretože ak nechcete mať, alebo sa CS161,
zamykanie je základným nápad v takom svete.
Tak môže vzniknúť aj závodné podmienky taktiež v databázi svete
a môžete vyvolať možná od CS50 financovania, ak sa 50,
Tento kód, ktorý sme vlastne dali vy v špecifikácii
v tej dobe tak, že vaša Prevádzka je tzv atómová.
Ak by ste chceli, v tomto prípad, kúpiť podiel akcií
a že populácia má niektoré konkrétne symbol.
Povedali sme si použiť kód ako to, pretože prostredníctvom tejto
na duplicitné kľúč aktualizáciu syntax, ktorý je postavený
do MySQL ste efektívne robí buď vo vložke
alebo v aktualizácii po robí select vidieť
v prípade nutnosti je už tam.
Inými slovami, v analóg Svet o kúpe akcií
mlieka a chladničky by mohol byť, ako prvý,
pred kúpou podiel Google možno budete chcieť vybrať
z databázy všetkých Akcie spoločnosti Google, že David je vlastníkom
aby zistil, či mu vlastné nula alebo viac.
Akonáhle uvidíte, či je vlastníkom nula alebo viac máte
aby potom vykonajte nasledujúce.
Môžete buď urobiť vložku
v prípade, že vlastníte nulu, pretože neexistuje žiadny riadok pre Davida ešte,
alebo budete musieť urobiť aktualizáciu ak aspoň teoreticky chcete
mať jeden riadok na užívateľa.
Problém je výber že počet akcií
a potom aktualizovať alebo vkladanie mohla byť prerušená
niekto iný na inom počítačový terminál sa snaží kúpiť
alebo predať niektoré z Davida Akcie zásob či
pre dobré účely alebo druh škodlivých účely.
Je to ako ísť do obchodu ak váš spolubývajúci vráti
a kontroluje stav premenné.
Takže táto syntaxe v tej dobe ktorý bol trochu vhodné
pre CS50, vyhýba sa, že problém úplne.
A to jednoducho robí všetko Kúzlo zamykanie pre vás,
ale teraz s týmito druhmi projektov pre tohto kurzu
ktorý s najväčšou pravdepodobnosťou bude zahŕňať zložitejšie dátové sady,
nemôžete dosiahnuť Vždy to Atomicita.
Všetko, čo sa deje naraz alebo vôbec
bez prerušenia tak elegantne.
A tak MySQL, ďalšie databázový stroj,
podpora veci tzv zámky,
kedy si môžete povedať, zámok Tento zámok je tabuľky tak, že iba jeden darček
a to spravidla iba jeden používateľ môže dotknúť sa ho v každom okamihu
čítať alebo písať a potom môžete odomknúť.
Toto je príklad jedného z MySQL vlastných odkazov,
kde máte ako banka účet, ktorý sa snažíte
odpočítať peniaze z a potom pridať peniaze.
Možno budete chcieť, aby Uistite sa, že obe
z tých, čo sa stalo spolu
takže nie je matematické chyby
a bez straty jeden peniaze, nejako.
Problém sa zámky aj keď je v databáze
že to znamená, že vo všeobecnosti Celý stôl je uzamknutý,
čo znamená, že ak máte sto ľudí sa snaží
obchodovať s vašou bankou on-line v rovnakej výške
času iba jeden z im môže ísť naraz.
Čo je hlúposť, a to najmä na serveroch v dnešnej dobe
ktoré majú osem kurzu, 16 Samozrejme, že majú obrovské množstvo
pamäti, že to nie je Dôvodom k serializáciu všetky
z vašich transakcií, ak sú tie Zákazníci budú iba
pre interakciu s ich vlastnými riadkami.
Takže NoDB vám umožní urobiť veci vyššej inteligencie
a to všeobecne bude prístup, budete mať v kóde,
ak budete používať niečo volal transakcie.
A to všeobecne v PHP kóde,
Ruby kód, Python, čokoľvek.
Ale SQL kód, ktorý je nakoniec použitý je to,
obvykle.
Spustite transakciu potom určiť dve alebo viac dotazov
ktoré chcete vôbec spustiť
bez prerušenia alebo vôbec nie.
Tam môžu byť niektoré z nich dokonca vyberte závierku
alebo niektoré odstráni alebo aktualizácie.
Ale pekná vec je, že Databáza bude dosť šikovný
aby sa ubezpečil, že to bude len uzamknúť riadky, ktoré sú vlastne
zapojení do tejto aktualizácie alebo vyberie alebo odstráni.
Takže ak máte tisíce riadkov a vy ste len dotýkať tri
z nich, len to, že podmnožina tabuľky bude uzamknutý
čo znamená, že tie ostatné 99 Zákazníci môžu dotknúť ich riadky
bez toho, aby bola na pokračovanie a spomalil vami.
Medzitým, to je najkrajší aspekt transakcie.
Oni sú transakcie v cítiť ako 161 na súborovom systéme,
sú transakčné
čo znamená, že môžete vrátiť je späť, môžete vrátiť ich.
To je ako príkaz alebo kontrolovať F databáz.
Ak zistíte časť cesta cez všetky
vášho rôznych dátovej prevádzky, strieľať, niečo je zle.
Ste doslova spustiť iný dotaz SQL role späť
a všetky tieto tendencie - všetko z výkazov ste vykonaných
potom, čo hovoria začiatok transakcie zmizne
ako by sa nič nestalo,
, Ktorý je prekvapivo mocná vec.
A to sú druhy veci určite v 50 triedime
z zamiesť pod koberec a stačí trochu predpokladať,
že všetko bude v poriadku.
Ale akonáhle začnete premýšľať o reálnych projektoch
a reálnych užívateľov a integrita databázy,
jedná sa o druhy rozhodnutie dizajnu
ktoré sa bude dôležitý.