>> Pořádku.
Takže, bez dalších okolků, SQL, Structured Query Language.
Takže jste asi zvyklí to na alespoň v CS50, možná v CS165,
Možná ve vaší vlastní osobní projekty.
A co se SQL nechat udělat, v SQL Server obecně?
Jo?
[Neslyšitelný Poznámka]
OK, to bylo velmi zajištěný způsob, jak to říct.
Ano. Tak to umožňuje můžete ukládat data
a co je důležitější umožňuje dotazovat na data.
A to je krok vpřed
používat něco jednodušší jako CSV, vpravo.
Oddělené čárkami proměnné.
Podobné hodnoty.
Stejně tak umožňují ušetřit Informace jeden řádek
v textovém souboru.
Ale co je to nevýhoda Soubor CSV pro ukládání dat,
i když ve skutečnosti se řádky a sloupce z něj?
Jo.
>> Nemusíte "mají stejné organizace
Účinnost [neslyšitelný].
>> Nemáte stejný účinnost organizace.
Co tím myslíš?
>> No, jako [neslyšitelný] mají jako primární [slyšet].
>> OK. Jo.
>> Je to relační databáze můžete mít více databází
navzájem propojeny velmi specifickým způsobem.
>> OK. Dobrá.
>> Je to [neslyšitelný] nastavit CSV.
>> A dovolte mi vyladit trochu terminologie.
Takže více tabulek v databázi, jistě,
a že jde nad rámec toho, co můžete to udělat jen s jedním CSV.
Ale ve skutečnosti omezení s CSV Tvrdím, je
že neefektivnost toho všeho.
Je to velmi snadné rozložení.
Ale pokud si chcete udělat dotaz, co je čas běží
z jakéhokoliv výběrového dotazu na souboru CSV?
Myslím, že je to velký starý [slyšet], pravdu, protože v nejhorším případě,
se zvýšil na samém dně.
Dokonce i když jste měli řazeny celý Soubor CSV, pokud nevíte,
že předem, dobře, stále budete mít
Chcete-li prohledat celou věc.
Takže, mezi věcmi, budeme mít
používat skutečné databáze s použitím jazyka
jako SQL je můžeme dotazovat to a můžeme předem
jako databáze designérů určit, jaké jsou pole
které byly pravděpodobně bude mít otázky týkající se tak, že lidé,
na MySQL nebo Microsoft nebo Oracle,
kdo učinil databázi Používáte můžete dělat vše,
tvrdé práce zjišťuje, OK,
vzhledem milionů těchto IDS.
Jak můžeme rozložení - je v paměti?
Nějaký druh stromu strukturovat možná,
takže když děláte skutečně provést výběr,
je to něco, co je logaritmická nebo logaritmické
z logaritmické v čase spíše než ve skutečnosti převede
do něčeho lineární.
Takže máme spoustu výkon, který způsob.
A můžeme také uložit mnohem více Údaje snadněji protože SQL
Server je obvykle uložena v paměti RAM, i když díly
z toho může být uložen na disku a už asi víte teď
že RAM je obecně rychlejší než disky,
tak to je dobrá věc.
A také můžeme zvládnout souběžnost mnohem lépe.
Pokud jste si vzal 165 nebo 161, Víte, že když dva lidé se snaží
udělat stejnou věc najednou v systému,
špatné věci se obvykle nestane.
Takže kromě dalších funkcí jsme můžete dostat, pokud navrhujeme naše stoly
v správná cesta je lepší podpora a zabezpečení
pokud jde o souběžnosti.
Takže, dva lidé ve dvou částech
na světě pomocí stejného webové stránky, pokud se oba snažit
koupit něco na stejné čas, že objednávka nebude
jít současně.
Nějak by serializovat někdo jiný než naše vlastní -
někdo jiný než my sami.
Databáze bude to, že pro nás.
Takže, když je to nejjednodušší forma,
Nám umožňuje SQL dotazu relační databáze.
Relační databáze je ten, který má jeden
nebo více tabulek v něm obvykle.
A pokud je to trochu obeznámeni,
můžete opravdu jen myslet to je Excel nebo čísla
nebo Google tabulky.
Je to jen má řádků a sloupců a obvykle v horní části každé
z těchto řádků má pro to jméno.
Takže by to mohlo být číslo sloupec, název sloupce,
adresu sloupce a tak dále.
A pak můžete mít více takové tabulky, pokud chcete
začít, kterým se různé typy dat.
Ale může vyvolat alespoň od CS50, že jsme se snažili
aby vám GUI založené na Nástroj [neslyšitelný]
pro správu databáze.
Říkalo se phpMyAdmin.
Takže je to jen náhoda, že to bylo napsaný v PHP, opravdu,
ale to bylo jen webový front-end k databázi.
A prostřednictvím různých kartách a odkazy, můžete začít
konfigurovat databázi pro sebe.
Ale dobrý nástroj začít trochu pohodlnější
s je také příkazového řádku klienta.
Takže, pokud používáte CS50 Appliance nebo opravdu pomocí libovolného makra PC
která má příkazového řádku MySQL klient, můžete si také udělat to nějak
ze staré školy, jako je tento.
Jako stranou projektu MySQL, alespoň open source verze
z toho je nyní nazýváno MariaDB pro z různých důvodů si můžete přečíst
se na Wikipedii, ale je to stejný software,
je to stejné syntaxe a tak dále,
skoro stejný základní kód.
A tak, když jsem se na to vyzve nyní mohu komunikovat
se svou databází mnohem ručně.
Takže případ v bodě, nech mě jít napřed
a jen otevřít okno terminálu.
Náhodou jsem se s použitím CS50 Zařízení, ale můžete to udělat
na většině každém systému které máte nárok
nainstalovaný software.
A já budu dělat MySQL-u k uživatelským jménem John Harvard
v tomto konkrétním systému, p- k zadání hesla, že budu typem
v trochu více bezpečně tím, že udeří Enter.
Teď jsem vyzván.
Budu psát crimson v CS50 spotřebiče
a teď vidím v podstatě že stejné obrazovce.
Ale je tu příkazy nyní že můžeme začít psát
jako ukázat databází, a že to bude mi všechno ukázat
z databází, které jsem již vytvořen v systému,
skoro stejný seznam měli byste vidět v phpMyAdmin.
Je tu pár dalších, jako je informace o schématu a test,
které, pokud poke kolem CS50 zařízení, můžeme schovat některé
z těchto tabulek nižší úrovně
ale oni byli tam celou tu dobu.
MySQL ve skutečnosti má nízkou úroveň vlastnosti, jako jsou uživatelská jména
a hesla pro databázi sama o sobě, není pro vaši aplikaci
že byste mohla být běží na vrcholu toho.
Takže předem, dnes jsem vytvořil pár databází,
z nichž jeden se nazývá courses50.
Kurzy jsou někteří z vás používají CS50 samozřejmě nakupování nástroj,
což je velká rozhraní pro Katalog registrátora kurzu.
A to je vlastně hezký dataset mluvit o "příčině,
jeden, jsme tak nějak vše samozřejmě obeznámeni s kurzy
a instruktoři a setkání místa a všechny druh
z obyčejných věcí z vysoké školy,
ale je to také dostal nějaké zajímavé příležitosti
pro design.
Tak jsme si mysleli, že bychom použít Pojem katalog předmětů
a nákupní nástroje jako například v průběhu dneška třídit
rámu některé konstrukce rozhodnutí, které musíme udělat.
Takže začněme tam.
Dejme tomu, že jsem vlastně chtěl reprezentovat super nejjednodušší
Samozřejmě nákupy nástrojů.
A nejjednodušší svět Dovedu si představit, a jeden je
ve kterém jsou kurzy a tam jsou instruktoři.
A předpokládejme, že se sake diskuse
, že každý předmět má alespoň jméno.
Tak pojďme začít načrtnout to.
Budu používat phpMyAdmin stejně jako pohodlí,
takže jsme nemuseli psát ven všechny dotazy ručně.
Ale tady jsem v mém courses50 databáze.
Je-li obeznámeni s tím, že bude být velmi snadné, jakmile se ponoříte
do svého vlastního projektu pokud byste chtěli použít.
Chystám se vytvořit tabulka s názvem kurzy
a já si jen myslím, z jednoho pole
teď, název kurzu.
Chystám se jít dopředu a řekněme, dej mi jeden sloupec.
Nyní, jak si vzpomínám dostanete rozhraní, které je trochu
takhle.
A ten druhý vzhůru upřímně z phpMyAdmin je, že druh
self-poučit a že pomocí rozbalovacích nabídkách, můžete třídit
na co vaše možné rozhodnutí designu jsou.
Tak jdu dát Každý kurz jméno.
To je název tohoto sloupce.
A jak je to s jeho datový typ?
Většina z vás by měl vědět, na alespoň některé z těchto datových typů
z předchozích zkušeností.
Co je vhodné pro název kurzu?
Sharon?
>> Varchar.
>> OK, varchar, které je variabilní Char.
A to, co dělá, že znamená více technicky?
[Neslyšitelný Poznámka]
OK. Takže je to řetězec.
A var aspekt z toho vyplývá co?
Variabilní. Ale to, co to znamená?
Jo?
[Neslyšitelný Poznámka]
Přesně tak. Takže je to proměnná počet znaků
v řetězci nahoru do určité maximum.
Tak tady je naše první Rozhodnutí designu.
Vlastně jsme se rozhodnout, kolik bajtů maximálně
přidělit každé takové řetězce.
Obecně řečeno, budete chtít, aby druh ne, aby to příliš malý,
ne, aby to příliš velký Protože jasné
pokud příliš malý, že jste právě začnou zkracovat dat
a ztratíte informace.
A pokud je to příliš velký, jsi jen druh vyprávění databáze
očekávat a na optimalizovat pro více dat
než by se mohlo ve skutečnosti vůbec dostat.
Takže to, co je rozumné pocit číslo název kurzu?
60? OK, takže 60.
To se zdá docela rozumné
pokud je není výjimky, které.
To fakt není tvrdé, rychlé pravidlo.
Chcete-li být upřímný, pro historické důvody hodně
ze lidé budou vybírat 255 Protože po léta, která byla nějak
výchozí maximální použití 8 bajtů - 8 bitů jako svého pultu.
Já bych více [neslyšitelný] může použít síly 2
ale to je trochu irelevantní.
Takže můžeme jít s 60.
To zní rozumně tak dlouho,
jak jsme nakonec nelituju "Způsobí, že je horní mez.
Nyní předpokládejme, že opak rozhodnutí bylo učiněno,
Není variabilní znaky, ale jen char pole.
Takže na rozdíl od C a C + +, char neznamená, že jeden znak
a databáze, které obecně znamená pevný počet
znaků v řetězci.
Jaký by měl být vzhůru a / nebo Nevýhodou mého výběru 60
pro char pole, místo varchar?
To je přesně ten první druh rozhodnutí budete muset udělat
při kontrole [fonetický] out na projektu se svými partnery.
Jo, Sharon znovu.
[Neslyšitelný Poznámka]
Dobrá. Takže v případě, že název je méně
než 60 let pak ztrácíte co že delta je
mezi 60 a skutečná délka.
Tak to prostě připadá plýtvání, více bajtů, než budete potřebovat.
Ale proč to existuje?
Určitě tam je nějaký vzhůru.
Jo?
[Neslyšitelný Poznámka]
Jistě. Takže někdy Možná víte, pevné číslo
znaků, jako je 10 číslic na telefonní číslo například.
Ale koho to zajímá, stejně jako důvod, proč ne jen říkat 11 stejně
nebo proč ne říkat 60 stejně s varchar?
Jaké výhody získáme tím, že zná a navrhování
za fixní počet znaků?
[Neslyšitelný Poznámka]
Jste na správné cestě.
Takže je to optimalizace, ale je to opravdu z - jo?
[Neslyšitelný Poznámka]
OK. Dobrá. Pojďme se zaměřit na té poslední části.
Tak indexování.
Tak to dopadá, když se předem vědět, že všechny
z vašich polí jdou být 60 znaků,
můžete opravdu myslíte, že to sloupec v databázi Excel
jak mít velmi rovný, vlevo oprávněné
a zarovnávají vpravo hrany
protože každý sloupec je 60 znaků široký.
To znamená, že v tomto Řetězec je 60 znaků daleko
z tohoto řetězce, 60 znaky pryč od této jedné
a tohle a tohle.
Takže stejně jako tenkrát, když jste dozvěděl, C, měl jsi náhodný přístup
ve světě polí, Stejný nápad zde.
Pokud je zastoupena váš sloupec pouze pomocí pevné délky znaků,
můžete efektivně index náhodně do 60 nebo 120 nebo 180
a můžete dostat na individuálně struny mnohem rychleji.
Pak-li místo, váš sloup měl rovná levá hrana tak říkajíc
ale velmi robustní právo hrana na sloupci
protože byste mohli má 10 znaků,
15 znaků, 5 znaků.
Takže i toto je jedna z věcí.
A někdy jen prostřednictvím pokusů a omylů
a experimentování můžete přijít
to, co opravdu ta správná výzva je ale to jsou druhy
otázek, které je třeba jít
prostřednictvím své mysli a / nebo tabulky, když přijde čas
navrhnout své databázi.
Takže, není nutně správné odpověď, ale měli byste
mít alespoň nějaké nebo dvě věty v mysli
zálohování cokoliv rozhodnutí uděláte.
Dobrá.
Takže pojďme se držet rolování na výzvy zde
které jsou phpMyAdmin UI.
Takže, výchozí hodnota pro jméno, měl bych upřesnit
že by mělo být mít Výchozí hodnota null?
Co si myslíte?
Může samozřejmě mít null jméno?
Jen se cítí divně, ne?
Já si nemyslím, že některý nejmenovaní kurzy na Harvardu.
A možná tam je nějaký temný kout případ
kde je samozřejmě dána řada
a profesor nemá vybrali jméno pro ni, ale -
Myslím, že se to sakra s tím,
jako pojďme ani obtěžovat podporovat to.
Řekl bych, že v zájmu pěkné čisté databáze,
pojďme stanovit, že nemůžete mít výchozí hodnotu null.
Případně bychom mohli udělat něco jako bez názvu kurzu
který není na rozdíl od Mac OS a Windows udělat
při vytváření složky například,
ale tam, že je trochu větší smysl
tak, že člověk něco vidět.
Mluvíme o back-end databáze pravděpodobně
Pro katalogu kurzů.
Takže já vlastně ani jako s myšlenkou, aby ji
v untitled jména kurzů
protože to není opravdu nepomůže nikomu.
Takže nechme to jako nikdo, což znamená, že po vložení
do této databáze, máte aby každý kurs jméno
která se cítí trochu čistič na mě.
Dobrá.
Takže rolování dále, kompletování.
To jen má co do činění s znakové sady a kdoví co ještě
pokud jste někdy viděli zmínky o švédštině
v phpMyAdmin, který je Protože lidi
kdo psal phpMyAdmin byly švédské.
Je to PHP, nebo je to MySQL?
Jeden z těch dvou, jsem Zapomněl spatra.
Ale je to z historických důvodů
ale můžete vyjádřit každý charakter v angličtině
že byste mohli s švédštině takže je to do značné míry non-záležitost.
CS50 zařízení, i když je používá - konfigurovány pro použití UTF-8,
tak, že obecně by měla ne pop pro vás.
Atributy.
Takže žádná z nich jsou opravdu relevantní.
Vidím, binární, nesignováno, Nepřihlášenému zerofill,
a aktualizace na aktuální časové razítko.
Tato oblast se týká pouze pro některé číselné pole
nebo nějaké časové pole.
Takže budeme přeskočit že zcela.
Null. Může toto pole je null?
Takže ne. Máme již že druh konverzace.
Takže nechceme Výchozí hodnota.
Nechceme, aby to bylo null.
Co indexu?
Je tu čtyři možnosti zde.
Co to znamená, když budeme specifikovat
že tento řádek se děje být primární klíč?
Myšlení zpět na CS50 nebo CS165, pokud jste si ho vzít.
[Neslyšitelný Poznámka]
Přesně tak. Takže primární klíč podle definice je pole
, která jednoznačně identifikuje Každý řádek v této tabulce.
A můžete se spolehnout na to, aby to že jednoznačná identifikace.
Takže, co to znamená pak jen být jedinečná?
No, tak nějak z těchto dvou má třídit
na základě důsledků pod kapotou.
Ale obecně, primární klíč je druh smlouvy, které provedete
s databázovým věc.
Když jsem si dotazy hledá kurzu,
Budu používat tento Zejména pole.
A vrátíme se Proto bychom mohli mít dva
Tyto volby zde, primární nebo jedinečný.
Unikátní jen říká, to pole bude jedinečná
ale já jsem opravdu dělat jakékoliv druh slovního závazku zde
použití tohoto pole dělat své vyhledávání
z důvodů budeme vidět jen na chvíli.
Pokud bychom místo toho určit index, co to znamená určit,
že pole má index na to?
Jo?
[Neslyšitelný Poznámka]
Přesně tak. Bylo to optimalizovaný pro dotaz.
Takže vy - databázový server, Oracle, MySQL, cokoliv,
bude obecně pracovat své kouzlo v zákulisí, jakmile klepnete na tlačítko
že možnost a potom klepněte na tlačítko Uložte a bude stavět
se typicky stromová struktura, B-stromy, pokud jste viděli
nebo slyšel off, což je velmi krátká vypadající strom
který vám dává velmi pěkné logaritmické vlastnosti
při vyhledávání na základě údajů.
Pokud nezadáte index na poli, co se děje
, že je chod Doba hledání
pro libovolný [Fonetický] Název kurzu?
Co je to?
[Neslyšitelný Poznámka]
Oh, [neslyšitelný], lineární, ne?
Pokud to tam je žádné optimalizace poskytnuta do databáze
a vy jste si myslel, databáze, jaké
dat očekávat.
Nejlepší, co můžete udělat, je kontrola všechno, když hledáte
na nějakou hodnotu, a to zejména v případě, že by
ve skutečnosti duplicitní.
Fulltextové mezitím, budeme mávat rukama teď.
Ale obecně, to je typ indexu, který vám umožňuje
optimalizovat pro klíčové slovo hledá na poli.
Takže by to mohlo být vhodným kandidátem
na jako popis kurzu kde byste mohli mít pár
odstavců a můžete Chcete udělat podřetězec zápasech.
Full-text se obecně nechat děláš, že docela efektivně.
AI, to je hrozný druh vysvětlení, ale pokud budeme vznášet
nad ní uvidíte Auto přírůstek.
Nevztahuje se oba zde ale auto přírůstek je užitečný
na jako pole typu int, protože databáze bude starat
procesu a navíc plusing že pokaždé, když to vložku.
Takže, i když dva lidé doslova na tlačítko Odeslat
ve stejnou dobu a snaží vytvořit řádek nějak
v databázi, jeden z jim dostane číslo I,
druhý bude mít číslo I a 1.
Nemusíte se bát,
o dvou čísel přidělen stejně, pokud jste byli
jak to udělat, se v kódu.
Dobrá.
Takže jsem tak trochu rád, kde máme jméno být.
Takže pojďme na tlačítko Uložit.
Je to dobrý design pro databázové tabulky?
A jako stranou, pokud rezavé na SQL nebo druh
z právě se vždy obrátit na blind oči na to, co se děje,
Mohl jsem napsal přesně, že -
tyto tři řádky na které černá a bílá výzva
v příkazovém řádku klient nebo jsem mohl udělat
že v kódu programově.
Takže vše phpMyAdmin dělá pro mě, je mi jen uložení úsilí
pamatovat někdy syntaxe a psaní se pro
jako nudné příkazy.
Dobrá.
Takže to není pocit, Nejlepší design, jedno pole tabulky.
Teď bychom mohli mít věci, jako jsou profesoři
a umístění a popisy.
Ale i pak, pouze pomocí jména
identifikovat kurzy necítí ideální.
Jaké mají obecně se v minulosti
pokud jste použili databází jednoznačně řádky?
Nepoužíváte varchars obvykle.
Jo?
[Neslyšitelný Poznámka]
Jo. Takže typicky kurz ID.
Takže, nejčastější přístup zde zejména
Při použití rámce je vlastně jen
použít číslo jako celé číslo.
Tak mě nech jít dál a dělat.
A můžeme to dělat v několika způsoby, ale uvědomte si, když jsem zvětšení
v na dně zde.
Chystám se říct, přidat jeden sloupy na konci tabulky,
obvykle jen pro vizuální pohodlí dáte ID
na začátku tabulky i když to nemá žádnou skutečnou
funkční dopad.
Takže jsem chtěl říct, Přidání jednoho sloupce
na začátku tabulky.
Budu klepněte na tlačítko Přejít, že mi dává zpět tuto UI zde.
Říkejme toto ID.
Pokud si myslíme, že budeme mít nic víc udělat 4000000 kurzy
pole int je v pořádku.
Mohli bychom dokonce srazit dolů
ale prostor je levný takže kdo opravdu zajímá.
Ale snažíme se napsat Facebook teď,
nemusí být špatná věc předvídat velké ints
které by nám 64-bitové ints
ale pak jste doslova zdvojnásobení počtu bitů
které používáte, takže menší kompromis
ale něco, aby zvážila.
Nyní, to je matoucí starší věc.
Ty by mohly vyvolat používat MySQL
že kdykoliv budete deklarovat int Pole budete často vidět řadu
vedle ní, jako je číslo 10.
To nemá nic společného s velikost počtu
nebo počet bitů.
To má co do činění s číslem znaků, které jsou používány
k vizuálnímu zobrazení že int pole
při použití okno terminálu.
Takže vidíme, že v okamžiku.
Takže, nenechte se zmást zadáním čísla
tam, i když je to účinně nás s dotazem
pro jednoho zde.
Tady, budu jděte do toho a řekl nepodepsané.
Neexistuje žádný důvod, aby odpady všechny naše záporných čísel
od databáze Obecně se děje
předpokládat pozitivní hodnoty nebo null.
ID rozhodně nesmí být null.
A co si myslíte o index pro toto pole ID?
Pojďme dělat to primární.
Takže, co když, když, jak mohu myslet jen na jednu CS164 samozřejmě
na Harvardu a pouze jeden CS50 kurz na Harvardu
a to je docela moc pravda celkově
že je třeba výjimky [Neslyšitelný] oba semestry
nebo něco divného, ​​jako že.
Ale ještě podstatnější je, proč je to lepší
použít číselný identifikátor pro integrální jednoznačně identifikovat kurzy spíše
než jen unikátní řetězec?
Jo?
[Neslyšitelný Poznámka]
OK, zajímavé.
Takže když jsme měli trochu cross-vypsal kurzy.
Tak to je dobrý příklad.
Nejsem si jistý, že by řešit, že i když
tím, že jim totéž Identifikační číslo, pokud je to
kam jdeš s tím.
Ne? OK. Ale rozhodně roh případ, aby zvážila.
Pokud je druh - budeme potřebovat nějaký
z aliasing potenciálně.
[Neslyšitelný Poznámka]
Jistě.
[Neslyšitelný Poznámka]
To je dobrý příklad.
Název se může změnit v průběhu čas, naprosto rozumné.
Co ještě?
[Neslyšitelný Poznámka]
Omlouváme se, ještě jednou.
[Neslyšitelný Poznámka]
Jo, přesně tak.
Takže opravdu, to je skutečný přesvědčivý důkaz je
že používáte 32-bitový int je pravděpodobně bude rychlejší
než nějaké proměnné délka char pole.
V prvním případě se může doslova vejde do rejstříku,
nemluvě o moc menší nároky na paměť.
V druhém případě budete muset udělat letovisko [fonetický]
k porovnávání řetězců, které samy o sobě s lineární
ve velikosti string potenciálně.
Takže, je to jen pěkná optimalizace,
a zejména, že se děje
aby nám to, co se nazývá Spojí efektivněji
za chvíli.
Tak pojďme na to.
Budeme se stanoví, že To je primární
protože jsem to nijak zvlášť Chci se starat nebo si myslíte,
o tom, co číslo je v kurzu.
Jen ať se na bez ohledu na hodnoty, které chcete.
Chystám se říct, auto increment takže můžu zadávat ten detail.
Stejně jako v stranou bys mohl vím, že Harvard
alespoň má mít jedinečnou čísla kurzů.
Nemám žádnou vzpomínku co tento kurzů je.
Vím, že CS50 je katalogové číslo je 4949,
zcela libovolný.
Ale je to divné, případy koutek v tom, že i
v registrarial skládku samozřejmě zboží údaje,
někdy kurzy, staré Kurzy mají řadu jako 4.
Ale technicky, že pole char pole
že prostě začíná 0004.
Takže i zde, musíte být pozor na rozlišování
mezi věcmi, jako je Samozřejmě katalogové číslo
které by mohly mít nějaký člověka Pojem pevné délky, 0004,
a vy byste neměli uchovávat že například v ints.
Tento druh pole by být uloženy na jiném místě.
Takže v Harvardu, když jsme byli vlastně dělat kurz
nákupní nástroj, je to asi nestačí
se počet kurzů jen s 1, 2, 3, 4.
Jsme pravděpodobně bude mít
mít další pole tzv. katalogové číslo,
, který je také předpokládá být jedinečný Based
o lidských úmluv zde ale není to nejlepší volba
pro jedinečný identifikátor, protože to by mohlo být s proměnnou délkou.
To nemusí být čtyři znaky, mohlo by to být pět.
Ve skutečnosti si myslím, že pár Před lety se pohybují
k příčině tam pět postav bylo více než 999 kurzů
celkem nebo něco podobného že, nebo 9999 kurzy.
Takže, které by mohly být příkladem kde pole není primární
ale to by měl být jedinečný.
A e-mailová adresa je ještě jeden.
Možná budete chtít, aby byl jedinečný
, ale ne nutně Váš primární klíč.
Dobrá.
Takže dovolte mi, abych vybrnkat další Tabulka mnohem rychleji, než je tento.
Takže budu to nazývat jeden Instruktoři a jdu
dát to celkem počet sloupců dvou.
Jdu se učit my Poučení z poslední doby.
Jdu zavolat První sloupec ID.
Chystám se zavolat Druhý sloupec Název.
Já jsem také dělat Varchar.
Budu předpokládat, no profesor má název delší
než 60 znaků, i když Nyní to může být zatlačením
s některými dlouhé názvy, speciální lidé se středními jmény.
To je v pořádku pro dnešek.
Takže pojďme přejděte sem.
Pojďme udělat znovu to unsigned.
Pojďme udělat tento primární.
A my, aby duplicitní názvy
v případě, že jsou dvě John Smith, nebo něco takového.
A teď máme dvě tabulky.
Takže teď, to vyvolává otázka, jak mohu spojit
v instruktor s kurzu?
Mám pocit, že jsem tak trochu dostal před sebe
protože pokud instruktor učí kurz,
můj první instinkt by skutečně se vrátit
na kurzy realizovat, to nebyl dobrý nápad.
Dovolte mi, abych vlastně přidat jeden sloupec na konci tabulky,
klepněte na tlačítko Přejít, a budu zavolejte Tento instruktor.
A já budu dělat to varchar a já budu dělat to 60.
A možná to nechám null teď
v případě, že kurz nemá byla unsigned v instruktor
které se občas stane před Termín spuštění a klepněte na tlačítko Uložit.
Který z těchto návrhů dáváte přednost?
První z nich, pokud máme Tabulka samostatná instruktora
nebo druhý, kde jsme právě Přidání pole do kurzu?
Takže je to úzce propojit instruktor s kursem.
[Neslyšitelný Poznámka]
OK. Dobrá. Ale dovolte mi tlačit zpět.
Je to prostě tak jednoduché, jako mohu stačí zadat jméno osoby
do této tabulky, jako je jistě že má nějakou hodnotu, nebo -?
[Neslyšitelný Poznámka]
Dobrá.
No, nech mě být obtížné zde.
Takže mi dovolte říci, že Tento kurz je CS51
a já vím, že to učí v letošním roce dvě osoby.
Takže, Henry Leitner a Jesse Tov, ale -
tak jsem si jen dát čárku mezi nimi, vpravo.
Jsem opravdu dobrý v CSV z minulosti.
[Neslyšitelný Poznámka]
Přesně tak, v pořádku.
Jakmile se uchýlit na něco takového,
které by mohly cítit rozumné a můžete cítit
jako je tento druh chytrý.
Jsem trochu vypůjčit Myšlenka, která je dobře fungovat,
půjčit novou myšlenku a nějak kombinovat.
Jste trochu totálně porazit bod pomocí databáze
V první řadě, páč pokud jedna z hodnot
použití je rychlejší vyhledávání z důvodu různých indexů
a tabulek, které mohou být vytvořeny pro vás
databázový stroj sám.
Nyní, pokud chcete hledat pro všechny kurzy
že Jesse učí, nyní máte aby se podřetězec odpovídající na všechny
instruktora polí,
což v praxi znamená, lineární hledat znovu, protože máte
najít tento libovolnou sadu ze tří postav kdekoliv
V instruktora oblasti předcházela
v možná následovat čárkou.
Tak to rozhodně nevěstí nic dobrého.
Tak nech mě jít zpátky ke stolu.
Nech mě jít napřed kurzy, vrátit zpět, že.
Budu prostě jít dopředu a pusťte toto pole.
A chcete-li to udělat ručně,
Syntaxe je ALTER TABLE kurzy DROP instruktora.
Tak pojďme do toho a říci, ano, že.
A vrátit se k této dřívější myšlenky
kde mám samostatný Tabulka pro instruktory.
Ale teď to cítí trochu jako bych si dát kurz
v tabulce kursu je a instruktor
v tabulce instruktora, ale já nějak musí propojit dva.
A jak byste Navrhuji, abychom to?
[Neslyšitelný Poznámka]
Dobrá. Tak pojďme na to.
A to může zavolat Tabulka teoreticky nic.
Chystám se záměrně říkejte tomu jak hodně
rámců by říkají, mezi nimi,
Laravel jak uvidíte za chvíli.
Chystám se to nazvat kurz podtržítko instruktora.
Použití jednotného čísla v tomto pouzdro pro každý ze slov
a vše malými písmeny znovu, a také -
pak abecedně řazeny zleva doprava.
To je zcela libovolné, ale bývá konvence
v mnoha z těchto rámců PHP v jiných jazycích.
Kolik sloupců potřebuji v to, čemu říkáme spojit tabulky,
připojit další dva stoly dohromady?
Tři sloupce?
Který z nich - co by to bylo?
[Neslyšitelný Poznámka]
OK. Dobrá. To funguje.
A my jsme mohli technicky řez roh tady, ale hodně
rámců, zejména by ještě dát i ty řádky
jedinečné ID, i když sémanticky řádek
že opravdu záleží, nebo sloupce, které jsme se opravdu starají
o jsou poslední dvě to, co jste řekl, samozřejmě ID
a instruktor ID.
Tak pojďme na to.
Zavolám tento řádek pouze ID, stejně jako jsme to udělali předtím.
Ale tohle já jdu volat kurz ID.
Tohle budu volejte instruktor ID.
A já jdu stanoví, že všechny
z nich jsou unsigned "Protože chci
maximalizovat svůj 4 miliard int rozsah.
Žádný z nich by měl mít hodnotu null.
Chystám se stanoví, že ID by mělo i nadále být primární.
A opět, je to jen konvence,
Mnoho rámců i když nemáte seřadit
v zásadě je třeba jedinečný identifikátor řádku,
ukázalo se, že je to výhodné pro kód SQL, který se děje
se automaticky generovány pro nás.
Takže nechám, že jako primární.
Ale teď, jsem tak trochu má rozhodnutí o návrhu,
Samozřejmě ID a instruktor ID.
Co indexy pokud existuje by měli dostat?
Pokud Nechám žádné indexy, co je důsledek?
Co je důsledkem?
Výkon jako předtím, ne?
Není-li index, Nejlepší, co můžete udělat, je druh
z [neslyšitelný] pomocí Celá věc hledá čísel.
Tak, že se necítí chytrý.
Mělo by to být primární?
Tak proč ne?
Proč ne primární?
[Neslyšitelný Poznámka]
Perfect. Tak jsme se vrátit z [fonetický] primární.
Už jsme si vybrali, že.
Takže by mělo být jedinečné?
[Neslyšitelný Poznámka]
Dobrá. Takže, pokud se domníváte, jeden instruktor na kurzu,
úplně v pohodě.
A to je určitě běžný případ
ale my už odkládat jeden Možná známý příklad.
CS51 dostal dva instruktory takže jsme trochu
již nyní šroubované v tomto případě.
Kdybychom povolit pouze jeden instruktor,
můžeme vlastně dělat cestu se spojit tabulky úplně,
zpět na předchozí přístupu
a dal to jméno osoby Možná ale instruktor ID.
Pokud víte, že každý samozřejmě jen jako jeden instruktor můžete mít jen
jeden sloupec.
Ale je variabilita co nás dostal do potíží.
Dobrá.
Takže by mělo být jedinečné?
Ne Úplný text není pocit použitelné.
Jak jsme řekli dříve, že je
na jako podřetězec vyhovující pro popis.
Takže co indexu?
No, index je pravděpodobně náš nejlepší kandidát
který říká, MySQL optimalizovat pro vyhledávání na to
nebo mi dovolte rozvést, optimalizace pro vyhledávání, nebo se připojí
jak uvidíme za chvíli
tak, že jsou trochu účinnější
než cokoli jiného čistě lineární.
Chci, aby auto zvýší toto pole?
Takže ne, protože pravda rodičovský element existuje
v tabulce kurzů.
To je místo, kde je to dostane plus,
a navíc, když je to ve skutečnosti vložena.
Tady je to všechno děje , které mají být vloženy ručně
u nás pravděpodobně v kódu.
Takže pojďme jednoduše zadat Samozřejmě, že jak ID
a instruktor ID mají indexy.
Nyní budeme pokračovat a ušetřete.
A teď, jen ukázat, můžete korespondence
mezi tím, co je hezké GUI přátelské rozhraní
a rozhraní příkazového řádku.
Nech mě jít dál a dělat Následující v tomto řádku MySQL.
Budu říkat použití courses50
která je libovolný název Dal jsem do této databáze.
A teď, já ani Pamatuješ si, co jsme udělali.
Takže dovolte mi, abych typ Tabulkové zobrazení
a obecně středníky tu bude tvůj přítel
dokončit dotazu.
A je to tady.
Tak tady jsou řádky nebo spíše Tabulky, které máme tady.
Teď jsem zapomněl, co Samozřejmě vypadá,
tak ať mi to popsat kurzy a teď vidím trochu z ASCII
nebo verze toho, co phpMyAdmin dělal
a vidím, že ID je int.
K dispozici je 10.
Co to znamená?
To prostě znamená, že když je to Zobrazí se, že to bude trvat
až 10 znaků na okno terminálu.
Je to s možnou hodnotou Null?
Ne, tohle je primární klíč.
Může to mít výchozí hodnotu?
No a navíc, což je speciální příznaky, jako je automatické přírůstek.
Takže pojďme prostě udělat pár o rychlé vložení naleznete zde.
Já jdu nahoru do - řekněme.
Pojďme změnit stav na snímku
kde jsem se trochu předem připravit to.
Toto je souhrn pak všechny tři z těchto tabulek.
Už jsem jen ručně napsal první příkaz.
A tady, šel jsem do toho a typ ostatní za vás.
To je jen stylistické věc.
Obecně platí, že mnoho lidí zadejte příkazy SQL ve všech čepice
a pak se názvy tabulek a Názvy polí v dolní případě,
i kdyby jen proto, že druh porostů
co je váš terminologie a co je syntaxe databázi.
Takže tady máme tři stoly, kurzy, instruktoři,
a kurzy instruktoři.
Ve snímku jsem předem, Neměl jsem na pole ID
ale to není ve skutečnosti špatná věc vůbec.
Rádi bychom prostě vidět třetí sloupec tam.
Kdyby to udělal, že tady?
Takže teď mi dovolte navrhnout, aby děláme spoustu vložení.
Takže zde je několik údajů, Budu zoom palců
Takže budu navrhovat že v kurzech,
se zabývají pouze o třech chodech.
A já jsem si vybral tyto tři "Příčinou jsou reprezentativní
nějaké pěkné - mají některé pěkné vlastnosti.
CS1, CS50, CS51, které mají rostoucí ID
ale to, co číslo je to, co je zcela irelevantní.
To je jen pořadí, ve kterém oni byli auto vloženy mnou.
Jak se o instruktory?
Takže teď, protože Henry Leitner učí jak CS1 a CS51,
to je docela vhodné implikace pro náš návrh.
A Jesse učí CS51 a Malan učí CS50.
Takže teď - nebo spíše se jedná o jen jedinečné identifikátory těchto lidí.
A kurzy a instruktoři, - instruktorů, všimnete zde.
ID1 hřiště, které byla CS1 je vyučován
instruktora ID1, kdo je Henry.
ID2 hřiště, které jsem , že byl CS50 je vyučován
instruktora ID2, který je Malan.
A pak konečně, CS51, a Všimněte si, máme dva řádky.
A teď to je důvod, proč vstoupit Tabulka je mocný je vyučován
jak Henry a Jesse.
Takže je to všechno v pořádku a dobré,
ale můžu stěží pamatovat z vrcholu
z mé hlavy, kdo je kdo zde.
Jak můžete případně se s tím vypořádat v kódu,
aniž by bylo nutné tvrdé kódu věcí?
No, to je místo, kde SQL sám začíná být náš přítel.
A já jdu navrhnout, že můžeme zadat následující.
Budu to dělat na v skutečná výzva.
Nech mě jít dopředu a vložte tyto věci.
Takže, do tabulky kurzy pojďme dělat přesně to, co jsme měli
před chvílí.
Jdu dál a říct, pojďme vložit CS1 a CS50.
Pojďme vložit několik dalších řádky najednou, CS51.
Nyní mi dovolte, abych do toho pusťte a ušetřete.
Dobře, tak jsem jen obnovovat tak rychle
jak mohu vztahy jsme právě viděli na obrazovce.
A tak tady máme Leitner, tady máme Malan.
Dejme sami další řádek, a Tov.
Nyní mi dovolte zachránit to.
A já jsem jim dělal záměrně do stejné pořadí.
Ne, zapomněl jsem dát to auto přírůstek.
Dovolte mi, abych se rychle opravit.
Udělám to v on-line kód.
To se nepodařilo, jak stranou.
Skutečnost, že jsem nemohl vložit Leitner a Malana
a Tov selhal, protože jsem neměl zadat identifikační číslo, i když
je to očekával jeden a já zapomněli zkontrolovat auto přírůstek,
což znamená, že byli standardně dostat na nulu.
Ale pak je v rozporu které majetek, který jsme zadali.
Primární klíč byl porušen tak to ani nech mě to udělat.
Takže dovolte mi, abych tento problém odstranit.
Nyní mi dovolte, abych se vrátit do Na kartě Vložení klepněte sem a zadejte
že chci Leitner, Malana a ještě jeden řádek, Tov.
A teď konečně, pouze ten, který je trochu těžké
mít na paměti, je samozřejmě instruktor.
Pojďme vložit nyní, že Samozřejmě ID1 je instruktor ID1
tak to je CS1 a Henry.
ID2 kurzu je instruktor ID2, která je CS50 a Malan.
A pak poslední z nich máme na starosti, je samozřejmě ID3
který je CS51, se učí
podle kurzu instruktora 1, který je Henry.
A za třetí, jak také učil o 3, což je Tov.
Takže doufejme, že teď jsme znovu to -
sakra, jsem udělal to samé.
Instruktor kurzu potřebuje auto přírůstek.
Dobrá.
Udělám to rychleji tentokrát, Kurz 1, kurs 1, 2, 2.
A teď konečně, my CS51 která má samozřejmě ID3 a Henryho.
A samozřejmě ID3 a Jesse.
To vypadá dobře.
OK. Takže teď, pojďme zpět na terminálovém okně.
Takže když jsem se popsat Kurzy budeme vidět.
Pokud chci vidět kurzů můžu Nyní to vybrat hvězdu z kurzů,
středník, a teď vidíme, tyto hodnoty.
A teď, co ještě chci dělat?
Vyberte hvězdu z instruktorů, To je, jak jsem očekával,
a vyberte hvězdu z kurzů - Samozřejmě podtržítko instruktor.
Tak jak to mám teď připojit Tyto tabulky?
Tak krása, které se rozhodly hodnoty ID tímto způsobem je
že pokud si myslíte, že o přičemž tabulku kurzu
a instruktor Tabulka a poté vložení
mezi těmito dvěma ve vaší mysli kurz instruktor
Tabulka můžete druh linky se všechny tyto ID sloupců
takže sloučit je do jeden masivní sloupec, který má všechny
informací staráme o.
SQL syntaxi pro tento není nutně zřejmé,
ale uvidíme, jestli se nám to podaří.
Takže vybrat hvězda z kurzů,
a tam je několik způsob, jak to můžeme udělat.
Jdu stiskněte Enter jen druh formátu věci pěkně,
ale že šipka je jen symptom na straně klienta nástroje
to nemá nic společného co dělat s SQL samotného.
Takže vybrat hvězda z kurzů.
Chystám se nyní připojit tabulka kurzy
na stole kurzu instruktora.
Jak? V oblasti s názvem courses.id rovnající se samozřejmě
podtrhnout instruktor dot, co je název
odpovídajícího pole tu, že chci pár.
Není to ID.
Je to - co, je mi líto?
>> ID kurzu.
OK, dovolte mi, abych oddálit.
Ale já chci, aby se to ještě o krok dále.
Já jsem teď udělal stůl a tohle.
Teď chci vytáhnout ten chlap na stejně.
Takže, další dovolte mi, abych připojit celou tuhle věc
na instruktora tabulka na co?
Podtržítko hřiště instructor.instructor id
rovná instructors.id.
Takže bychom psali tento dotaz v několika ohledech.
Pořadí, ve kterém jsem to udělal není tak důležité.
I tak nějak se to v moje mysl zleva doprava.
Mohli jsme to udělali v několika různými způsoby
ale když jsem teď mají středník a stiskněte klávesu Enter,
Všiml jsem si zpátky nové dočasná tabulka, sada výsledků
tak říkajíc v databázi mluvit.
A co mám v této věci?
Mám na ID, jméno, jiné ID, což je trochu matoucí,
pro mě v tuto chvíli, Samozřejmě ID,
instruktor ID, ID a název.
Tak, že na konci dne máme správná data nyní.
Vidím, že CS1 je vyučován by Leitner, CS51 je vyučován
by Leitner a Tov, a CS50 je vyučován Malan.
Ale já jsem trochu nervózní Tato dvojznačnost jsem vytvořil.
Co je nejednoznačnost Já jsem se zmiňovat?
Jo?
[Neslyšitelný Poznámka]
K dispozici jsou tři sloupce ID.
Takže můžeme skutečně opravit a budeme skutečně děje
odložit do našeho rámce nakonec, aby nám pomohli s tím,
ale ukázalo se, že je klíčové slovo v SQL s názvem S,
kde můžete zadat alias, nový název pole
takže se můžete vyhnout dvojznačnost vůbec.
Ale uvědomil si, že když to neuděláme řešit to nějak jako s
že klíčové slovo nebo rámec,
tam je potenciálně to nejednoznačnost, pokud se pokusíte
přístup k ID pole protože jasně tam jsou ty,
s duplicitními názvy tam.
Tak to je spojení, a myslím, že ve své mysli nejlepší způsob, jak
přemýšlet o tom opravdu je, aby se dvě tabulky,
seřadí je do Způsob, jakým budete chtít.
A to je tak zvaný Vnitřní spojení v tom smyslu,
že jsme kombinovat tabulky zde.
Existují i ​​jiné druhy spojení, které bychom mohli narazit
v průběhu času, jako je vnější spojení,
, ale z větší části této je pravděpodobně nejčastější
pro rekonstrukci dat.
Co jsme udělali teď obecně, co se nazývá
normalizace dat, takže není kopírování kdekoli
v tabulkách.
A zdvojením, bych znamenalo, že první přístup.
Pokud bychom se zmínil Leitner a Tov na více místech
v databázi, že to není obecně nejlepší rozhodnutí
zvláště je-li jejich název síla změnit přesčas nebo v případě
manželství, rozené síly Změna se chcete jen jednu
kanonické místo pro některé Hodnota údaje jako jméno.
Dobrá.
Takže, na rekapitulaci, jsme měli několik rozhodnutí, designu, jak vydělat
a nejdůležitější pravděpodobně sníží na některé
z těchto možností indexů.
Ale dovolte mi poukázat na to, ještě jedna věc stejně.
Mám-li se vrátit do phpMyAdmin,
jedna funkce vám nemusí se setkali před
následující.
Pokud jdu do kurzu instruktora, Už jsem to určit, že některé
o tyto věci mají indexy.
Ale nechte mě jít do struktury Karta samozřejmě instruktora.
Dovolte mi, abych nyní klikněte na indexy a všimněte si následující.
Jsem zde stanoveno, že je primární klíč
na sloupci s názvem ID.
To je poněkud složitější způsob určení mohutnost
a tak dále tak, že odkazuje na velikost pole v bajtech.
Ale teď mám i další pole, samozřejmě číslo, které je -
Předmět ID, které se provádí předem a jedinečná, na tlačítko OK.
Udělal jsem tuhle v předem pro nás.
Takže, proč je to - abych klesnout to kvůli diskuse.
Oh, víš, co jsem udělal?
OK. Takže, dříve, jeden z Nebezpečí pomocí GUI nástroj
takhle, když jsme byli Vytvoření této spojit tabulky,
instruktor tabulka Samozřejmě, připomenout, že jsem je uvedeno
že chci index na tomto poli
a index na to jiné oblasti.
Vedlejším efektem kontrola obou těchto krabic
na jedné obrazovce je to, že phpMyAdmin dovodit z toho,
že chci, ne dva samostatné indexy,
že chci připojit index, který je obecně jen užitečné
nebo velmi užitečné, když jste hledat na ne jedno pole
ale oba z těchto oblastí.
A to je důvod, proč jsme měli je spojit se
tak jsem ho upustil "příčinu, která nebylo to, co jsem chtěl.
Spíše, jdu předělat to tady.
Chystám se jít do kurzu ID
a za více jsem jen říkat přidat index.
A já půjdu pod instruktor ID a říkají přidat index.
A teď, pokud bychom klikněte sem všimnete máme tři indexy,
jeden primární a jako já určen jeden pro každou
z těch cizích klíčů.
A říkám to proto, že zahraniční Samozřejmě ID v této tabulce mapách
na které pole, jen aby se jasné, v jiné tabulce.
Primární klíč s názvem ID, v tabulce s názvem kurzy,
a stejná řešení pro druhou.
Ale teď, je zajímavý trik a ve skutečnosti techniku.
Jen jsem šel dopředu a nechat mě to, že se trochu pomaleji.
Ve stejném rozsahu, upozornění říká vztahů názor zde.
I klikněte na to a teď Všiml jsem si, se k tomu několik omezení.
Takže jeden z upsides také
ne pouze pomocí koncepčně cizí klíče a další tabulky
jako máme právě na je že definuje index
na nich můžete mít můžete dokonce databázi pomoc více
zajištění integrity z této oblasti.
Konkrétně, můžu teď zadat přes tento pokles
se, že kurz ID pole
V této tabulce ve skutečnosti mapy na courses.id.
Stejně tak, cvičící podtržítko ID mapovány na instructors.id.
A teď, proč je to užitečné?
Dobře si všimněte, na pravé straně straně, co se zdá dnes.
Nyní mohu naučit databáze, která v případě, Henry
například kdy odejde do důchodu a jeho řádek zmizí
od stolu instruktora dohromady tak, že
odstraněna, může mi přes tento kaskádové přístup zajistit,
že veškeré kurzy vyučuje se již není spojováno s ním.
Mohu učit databázi odstranit řádky
V této takzvané připojit tabulky automaticky, pokud je Henry, nebo pokud jeden
z jeho kurzů zmizí.
A teď, proč je to přesvědčivé?
Jo?
[Neslyšitelný Poznámka]
Musíte to udělat pouze jednou a dlouhodobější, ne?
Je to velmi jednoduché, pokud druh lidé přicházejí a odcházejí, kurzy přijít
a jít, databáze by mohla jen se hemží kurzy
a fakulty, která nejsou již relevantní datového souboru.
A vaše data začíná být velmi chaotický a špinavé a stale,
a tak zde můžeme řadit
o prosazení některých tato omezení.
Jo?
[Neslyšitelný Poznámka]
Ví, prostřednictvím této.
Toto je obrazovka, kde jsme se zadáním vazby
mezi cizí klíč a primární klíč.
Takže všechny pojmenování Konvence jsem zmiňoval
se dříve jsou jen konvence.
Neexistuje žádný vlastní význam.
Toto je obrazovka která je užitečná pouze
poté, co jste zadali indexy každé z těchto oblastí, jak jsme to udělali.
A v tomto rozevíracím seznamu máme několik věcí, například
pokud kurz se zrušuje můžete ve skutečnosti se zabránilo, že vypuštění
od děje v případě, že je řádek v této tabulce
by jen říkám, omezit.
Jinými slovy, Henry nemůže odejít
dokud ho oddělit od CS51 a CS1.
Tak to je dobrá věc.
Ale mohlo by to vyvolat Chyby v kódu
pokud nechcete předvídat, že nebo můžeme mít kaskády,
kaskáda podobný líbí kaskádové styly
a kaskádové vodopád znamená, že v případě, že -
pokud Henry odejde tak - tím, že se vypouští se
tak bude jeho řádek zde mazány.
Žádné akce neznamená nic, nebo null je docela užitečné, pokud jste typ
ze chtít nějaký historický rekord Henryho, co učil CS51,
ale jen chci, aby pole být null, takže tam řádky
ale není to už spojené s ním.
Takže se jedná o velmi silný techniky, které můžete
a měly by používat, i když v zájmu zejména
zachránit vás od sebe.
Takže mi dovolte zmínku o pár závěrečných informací zde,
složky, se kterými které by mohly být užitečné
jak plánujeme pro návrh databáze.
Máte také možnost přes databázový stroj
které používáte ve svém kódu.
Pokud jste obeznámeni z CS161 bys mohl -
nebo dokonce 61, můžete obecně být obeznámeni se systémy souborů.
A je tu věci jako, NTFS a HFS +
a X2FS4 [fonetický] a 3, a tak dále.
Je tu různé způsoby ukládání dat na stole.
Stejně tak jsou zde různé způsoby ukládání dat
v databázi ve výchozím nastavení alespoň v přístroji
s nejnovější verzí MySQL.
Byli jsme s použitím databázový stroj volal, NoDB,
který podporuje Několik pěkné vlastnosti.
Ale další obyčejný je také volal MyISAM a dalším
, které lze použít, je paměť, což znamená, nedávejte nic
na disku, jen držet věci v paměti.
Z větší části pravděpodobně nebude pokazí právě začíná
s NoDB, ale i pro všechny projekty které mají tendenci zahrnovat vysokou míru
vložení například, jako hodně rychlé logování,
stovky věcí za sekundu nebo tisíce věcí.
Kdykoliv máte Spousta věcí se děje
na v databázi pak tento druhy
rozhodnutí o nižší úrovně začít, aby se zapojili.
Úplné znění funkce pro instance funguje pouze v MyISAM
tak, že má dopad.
Ale může vyvolat to, pojďme alespoň motivovat, proč se staráme
o NoDB zejména.
A závod podmínky obecně se odkazuje na co?
Dobře, to je narážka na příklad některé
z vás možná slyšeli v minulých letech, zda 161 nebo 50
kde budete mít spolubydlící, oba z vás opravdu rád mléko,
jeden z vás dostane domů nejprve otevře lednice není mléko,
zavřít lednici procházku přes ulice do CVS a získat
v souladu se koupit nějaké mléko.
Mezitím, váš spolubydlící přijde sem.
Ona také má rád mléko.
Otevřete lednici a si uvědomí, žádné mléko.
Zde se pak jde do ukládat, možná druhý CVS.
Rychlý posun vpřed několik minut později se vrátil a nyní i
ze jste si koupili mléko.
Jeden z nich se nyní bude zkazit, protože nemáte
jako mléko, které hodně a To je problém, že jo?
Vzhledem k tomu, jak vás inspekci stav určité veličiny
a učinil rozhodnutí na základě na to, i když stát
této proměnné byl v podstatě v procesu bylo změněno,
všichni to pomalu množství času to bere
dostat se do a z CVS.
Takže to, co je trochu hloupé skutečné world řešení tohoto problému?
Zanechat vzkaz, že jo?
To se stalo minule.
Vždy zanechat vzkaz nebo Visací zámek věc doslova.
A já říkám, visací zámek, protože pokud nechcete mít, nebo se CS161,
zamykání je základním nápad v takovém světě.
Tak může vzniknout závodní podmínky také v databázi světě
a můžete vyvolat možná od CS50 financování, pokud se 50,
Tento kód, který jsme vlastně dali vy ve specifikaci
v té době tak, že vaše Provoz je tzv. atomová.
Pokud byste chtěli, v tomto případ, koupit podíl akcií
a že populace má některé konkrétní symbol.
Řekli jsme si použít kód jako to, protože prostřednictvím této
na duplicitní klíč aktualizaci syntax, který je postaven
do MySQL jste efektivně dělá buď ve vložce
nebo v aktualizaci po dělá select vidět
v případě nutnosti je již tam.
Jinými slovy, v analog Svět o koupi akcií
mléka a chladničky by mohl být, jako první,
před koupí podíl Google možná budete chtít vybrat
z databáze všech Akcie společnosti Google, že David je vlastníkem
aby zjistil, jestli mu vlastní nula nebo více.
Jakmile uvidíte, jestli je vlastníkem nula nebo více máte
aby pak proveďte následující.
Můžete buď udělat vložku
v případě, že vlastníte nulu, protože neexistuje žádný řádek pro Davida ještě,
nebo budete muset udělat aktualizaci pokud alespoň teoreticky chcete
mít jeden řádek na uživatele.
Problém je výběr že počet akcií
a pak aktualizovat nebo vkládání mohla být přerušena
někdo jiný na jiném počítačový terminál se snaží koupit
nebo prodat některé z Davida Akcie zásob zda
pro dobré účely nebo druh škodlivých účely.
Je to jako jít do obchodu pokud váš spolubydlící vrátí
a kontroluje stav proměnné.
Takže tato syntaxe v té době který byl trochu vhodné
pro CS50, vyhýbá se, že problém úplně.
A to prostě dělá všechno Kouzlo zamykání pro vás,
ale nyní s těmito druhy projektů pro tohoto kurzu
který s největší pravděpodobností bude zahrnovat složitější datové sady,
nemůžete dosáhnout Vždycky to atomicity.
Vše, co se děje najednou nebo vůbec
bez přerušení tak elegantně.
A tak MySQL, další databázový stroj,
podpora věci tzv. zámky,
kdy si můžete říct, zámek Tento zámek je tabulky tak, že pouze jeden dárek
a to zpravidla pouze jeden uživatel může dotknout se ho v každém okamžiku
číst nebo psát a pak můžete odemknout.
Toto je příklad jednoho z MySQL vlastních odkazů,
kde máte jako banka účet, který se snažíte
odečíst peníze z a pak přidat peníze.
Možná budete chtít, aby Ujistěte se, že obě
z těch, co se stalo spolu
takže není matematické chyby
a bez ztráty jeden peníze, nějak.
Problém se zámky i když je v databázi
že to znamená, že obecně Celý stůl je uzamčen,
což znamená, že pokud máte sto lidí se snaží
obchodovat s vaší bankou on-line ve stejné výši
času pouze jeden z jim může jít najednou.
Což je hloupost, a to zejména na serverech v dnešní době
které mají osm kursu, 16 Samozřejmě, že mají obrovské množství
paměti, že to není Důvodem k serializaci všechny
z vašich transakcí, pokud jsou ty Zákazníci budou pouze
pro interakci s jejich vlastními řádky.
Takže NoDB vám umožní udělat věci vyšší inteligence
a to obecně bude přístup, budete mít v kódu,
pokud budete používat něco volal transakce.
A to obecně v PHP kódu,
Ruby kód, Python, cokoliv.
Ale SQL kód, který je nakonec použit je to,
obvykle.
Spusťte transakci pak určit dvě nebo více dotazů
které chcete vůbec spustit
bez přerušení nebo vůbec ne.
Tam mohou být některé z nich dokonce vyberte závěrku
nebo některé odstraní nebo aktualizace.
Ale pěkná věc je, že Databáze bude dost chytrý
aby se ujistil, že to bude jen uzamknout řádky, které jsou vlastně
zapojeni do této aktualizace nebo vybere nebo odstraní.
Takže pokud máte tisíce řádků a vy jste jen dotýkat tři
z nich, pouze to, že podmnožina tabulky bude uzamčen
což znamená, že ty ostatní 99 Zákazníci mohou dotknout jejich řádky
aniž by byla na pokračování a zpomalil vámi.
Mezitím, to je nejhezčí aspekt transakce.
Oni jsou transakce v cítit jako 161 na souborovém systému,
jsou transakční
což znamená, že můžete vrátit je zpět, můžete vrátit je.
To je jako příkaz nebo kontrolovat F databází.
Pokud zjistíte část cesta přes všechny
vašeho různých datového provozu, střílet, něco je špatně.
Jste doslova spustit jiný dotaz SQL role zpět
a všechny tyto tendence - vše z výkazů jste provedených
poté, co říkají začátek transakce zmizí
jako by se nic nestalo,
, který je překvapivě mocná věc.
A to jsou druhy věci určitě v 50 třídíme
z zamést pod koberec a stačí trochu předpokládat,
že všechno bude v pořádku.
Ale jakmile začnete přemýšlet o reálných projektech
a reálných uživatelů a integrita databáze,
jedná se o druhy rozhodnutí designu
které se bude důležitý.