>> Ред.
Значи, без понатамошно ado, SQL, Структурно јазик за пребарување.
Значи, вие веројатно се користи тоа во барем во CS50, можеби во CS165,
можеби во вашата лични проекти.
И она што не SQL ви овозможи да направите, во SQL Server, поопшто?
Да?
[Беззвучен Забелешка]
ОК, тоа беше многу обезбедениот начин на велејќи дека тоа.
Да. Така што им овозможува можете за чување на податоци
и уште поважно им овозможува на можете да се пребарува за податоци.
И ова е чекор напред
од користење на нешто поедноставно како CSV, нели.
Разделени со запирки променливи.
Слични вредности.
Слично нека те спаси информации еден ред
во текстуална датотека.
Но она што е во надолна линија на CSV датотека за складирање на вашите податоци,
иако ефективно добие редови и колони од него?
Да.
>> Вие не 'имаат истата организација
ефикасност [нечујни].
>> Вие не треба исто организација ефикасност.
Што сакаш да кажеш?
>> Па, како [нечујни] имаат како основно [нечујни].
>> OK. Да.
>> Тоа е релациона база на податоци може да имаат повеќе бази на податоци
поврзани еден со друг во многу специфични начини.
>> OK. Добро.
>> Тоа е [нечујни] да се постави CSV.
>> И дозволете ми да tweak малку терминологија.
Па повеќе табели во рамките на базата на податоци, сигурно,
и што оди подалеку од она што можете да го направите со само еден CSV.
Но, навистина ограничување со CSV јас би рекол е
дека неефикасноста на сето тоа.
Тоа е многу лесно да се распоред.
Но, ако сакате да се направи пребарување, што е трчање време
од ниту изберете барање на CSV датотека?
Мислам тоа е наш стар [нечујни], право, затоа во најлош случај,
тие се зголемија на самото дно.
Дури и ако сте имале подредени целата CSV фајл, ако не знаеш
дека однапред, добро, ти си уште ќе има
да пребарувате на целата работа.
Така меѓу нештата ние ќе ја добиеме
од користење на вистински база на податоци користејќи јазик
како SQL е ние може да пребарување тоа и ние може однапред
како база на податоци дизајнери наведете што се полиња
кои беа најверојатно ќе има прашања во врска со, така што луѓето
на MySQL или Microsoft или Oracle,
кој го направи база на податоци сте користење може да направи сите
на напорната работа на пронајдат, во ред,
даде милиони на овие IDS.
Како можеме распоред - ги изнесе во меморијата?
Некој вид на дрво структура можеби,
така што кога ќе се направи всушност се изврши избор,
тоа е нешто што е логаритамски или логаритамска
на логаритамска во време, а отколку всушност пренесување
во нешто линеарна.
Па ние имаме голем број на перформанси на тој начин.
И ние исто така може да се сместат многу повеќе податоци повеќе лесно "да предизвика SQL
Сервер е обично чуваат во RAM меморија, иако делови
тоа може да се зачувани на дискот и што веројатно знаете од сега
дека RAM меморија е генерално побрзо отколку дискови,
па тоа е добра работа.
И ние исто така може да се справи конкурентноста многу подобро.
Ако сте ги направиле 165 или 161, знаеш дека ако двајца луѓе се обидуваат
да го стори истото одеднаш на системот,
лоши работи генерално може да се случи.
Па меѓу другите карактеристики ние може да се добијат ако ние дизајн нашите маси
на вистински начин е подобра поддршка и безбедност
кога станува збор за конкурентност.
Така, две лица во два дела
на светот со користење на истите веб-сајт, ако тие и двајцата се обидуваат
да купат нешто во исто време, за да не се случува
да се движат во исто време.
Некако тие ќе бидат серијали од некој други од нашите сопствени -
некој друг, од нас самите.
Базата на податоци ќе направи тоа за нас.
Па кога тоа е наједноставен облик,
SQL ни овозможува пребарување на релациона база на податоци.
Релациона база на податоци е оној кој има еден
или повеќе табели во неа обично.
И ако тоа е малку непознат,
можете да навистина само мислам на тоа како Excel или броеви
или Google табеларни пресметки.
Тоа само има редови и колони и обично на врвот на секоја
на оние редови има име за тоа.
Значи ова може да биде проект колона, колона името,
адреса колона и така натаму.
И тогаш може да има повеќе вакви табели, ако сакате
да започнете врска од различни типови на податоци.
Но, може да се сети најмалку од CS50 дека се обидовме
да ви даде GUI-базирани на алатката [нечујни]
да управуваат со вашата база на податоци.
Тоа беше наречен phpMyAdmin.
Па тоа е само коинциденција што тоа беше напишана во PHP, навистина,
но тоа беше само на веб-базирани пред крајот на базата на податоци.
И преку различни јазичиња и врски, може да ви започне
за да го конфигурирате базата на податоци за себе.
Но добра алатка за да почнете да се добие малку повеќе удобно
со исто така е командната линија клиентот.
Значи, ако се користи CS50 апарати или навистина користење на било макро компјутер
дека има командна линија на MySQL клиент, исто така може да го направи вид
на старата школа, како ова.
Како настрана на MySQL проект, барем со отворен код верзија
на тоа што сега се нарекува MariaDB за различни причини зошто може да се прочита
на Википедија, но тоа е истиот софтвер,
тоа е истата синтакса и така натаму,
прилично многу исти кодот база.
И така, кога јас сум на овој поттикне сега можам да комуницирате
со мојата база на податоци многу повеќе рачно.
Така случај во точка, дозволете ми да оди напред
и само отвори терминален прозорец.
Јас се случи да биде со користење на CS50 Апаратот, но можете да го направите ова
на повеќето било систем во кој имаш право
софтвер инсталиран.
И јас ќе одам да направите mysql-u за корисничко име Џон Харвард
на овој конкретен систем,-P за лозинка која ќе напишеш
во малку повеќе безбедно со притискање Enter.
Сега сум предочено.
Одам да напишеш црвен во CS50 апарати
и сега гледам во суштина дека истиот екран.
Но, има команди сега дека можеме да почнеме пишување
како се покаже бази на податоци, и што се случува на сите покажи ми
на бази на податоци кои имам веќе создаде во системот,
прилично многу исти листа ќе видите во phpMyAdmin.
Има неколку други како информации шема и тест,
кој ако ѕиркаат наоколу во CS50 апарати, ние се скрие некои
на овие пониско ниво маси
но тие веќе има сето ова време.
MySQL, всушност, има ниско ниво својства како кориснички имиња
и лозинки за базата на податоци себе, не за вашата апликација
кои може да бидат трчање на врвот на неа.
Значи однапред, денес, јас создаде неколку бази на податоци,
еден од кој се нарекува courses50.
Шансите се дека некои од вас се користат CS50 разбира шопинг алатка,
што е голема интерфејс за Се разбира каталог на Секретарот.
И ова е всушност убаво на CCD да се зборува за "кауза,
еден, ние сме вид на сите очигледно запознаени со курсеви
и инструктори и средба локации и сите вид
на обични нешта на универзитетот,
но тоа е, исто така, добив неколку интересни можности
за дизајн.
Па ние сме мислеле дека би користат Поимот на каталог курсот
и шопинг алатка како пример во текот на денешниот да го решите
на рамката некои од дизајн одлуки треба да се направи.
Значи, да почнеме таму.
Да претпоставиме дека јас всушност сакаше да ја претставува супер наједноставните
се разбира шопинг алатки.
И наједноставен светот Можам да замислам, а еден е
во која не постојат курсеви а тука се и инструктори.
И ајде да претпоставиме да доброто на дискусија
дека секој разбира има барем име.
Па да почнат да ги скица ова.
Одам да го користите phpMyAdmin само како погодност,
па ние не треба да се тип надвор сите прашања рачно.
Но јас сум тука во мојот courses50 база на податоци.
Ако не се запознаени со тоа, тоа ќе да биде многу лесно, штом еднаш ќе се нурне
во свој проект ако сакате да ја користите.
Одам да се создаде табела наречена Курсеви
а јас само можам да се сетам на едно поле
за сега, името на курсот.
Одам да се оди напред и да да речеме ми даде една колона.
Сега, како што се потсетиме ќе добиете интерфејс, кој е малку
вака.
А другиот наопаку искрено на phpMyAdmin е тоа што вид
на авто-инструкции и дека преку dropdowns, можете да ги подредите
на се види она што вашите можно дизајн одлуки се.
Па ќе одам да се даде секој курс име.
Тоа е името на оваа колумна.
И како за своите тип на податок?
Повеќето од вас треба да знаат барем некои од овие типови на податоци
од претходно искуство.
Она што е соодветно за името курс?
Sharon?
>> Varchar.
>> Добро, varchar кои е променлива знак.
И она што го прави тоа значи повеќе технички?
[Беззвучен Забелешка]
OK. Па тоа е стринг.
И var аспект тоа значи што?
Променлива. Но, она што значи тоа?
Да?
[Беззвучен Забелешка]
Токму така. Па тоа е променлива бројот на карактери
во низа на некои максимум.
Па тука е нашата прва дизајн одлука.
Ние всушност треба да одлучат колку бајти максимално
да се распредели на секоја таква низа.
Општо земено, сакате да вид на не го прават тоа премногу мал,
не го прават тоа премногу голем Зашто очигледно
ако е премногу мал сте само ќе започне truncating податоци
и ќе ја изгуби информации.
И ако тоа е премногу голема, ти си само вид на раскажување на база на податоци
да се очекува и да се оптимизира за повеќе податоци
отколку што може да всушност некогаш добие.
Значи она што е разумно чувство број за името на курсот?
60? Добро, па 60.
Што се чини прилично разумна
колку е нема исклучоци од тоа.
Има навистина нема тешко, брзо правило.
Да бидам искрен, за историски причини многу
на луѓе ќе го избере 255 Зашто со години тоа беше вид
на Стандардниот максимален користење 8 бајти - 8 битови како шанкот.
Би повеќе [нечујни] може да се користат овластувањата на 2
но тоа е вид на ирелевантни.
За да можеме да одиме со 60.
Дека се чини разумно толку долго
како што на крајот не се жалам "Предизвика што е горната граница.
Сега, да претпоставиме спротивното Одлуката е донесена,
не променлива карактери, но само од областа знак.
Па за разлика од C и C + +, знак не значи дека знак
и бази на податоци кои обично значи фиксен број
на карактери во стринг.
Што ќе биде наопаку и / или Недостатоци на мојот избор 60
за знак област, наместо varchar?
Ова е токму првиот вид на одлуката ќе мора да се направи
кога инспекција [фонетски] од на проектот се со вашите партнери.
Да, Шарон повторно.
[Беззвучен Забелешка]
Добро. Значи, ако името е помалку
од 60 тогаш сте трошат што и да делта е
помеѓу 60 и Крај должина.
Така што само се чувствува непотребното, повеќе бајти отколку што треба.
Но зошто го постојат?
Сигурно има некои наопаку.
Да?
[Беззвучен Забелешка]
Сигурно. Така понекогаш би можеле да знаат на фиксен број
на ликови како 10 цифри за телефонски број, на пример.
Но кој се грижи, како зошто да не речеме 11 секој случај
или зошто да не кажам 60 во секој случај со varchar?
Што предност ќе ги добиеме од знаејќи и дизајнирање
за фиксен број на карактери?
[Беззвучен Забелешка]
Вие сте на вистинскиот пат.
Па тоа е оптимизација, но тоа е навистина на - Да?
[Беззвучен Забелешка]
OK. Добро. Да се ​​фокусира на тој последниот дел.
Значи индексирање.
Значи излегува, ако знае однапред дека сите
од вашите полиња се случува да биде 60 карактери,
навистина може да се мисли на овој колона во базата на податоци на Excel
како што имаат многу прав, лево оправдани
и десно оправдани рабови
затоа што секој колона е 60 карактери широк.
Тоа значи дека овој стринг е 60 карактери далеку
од овој стринг, 60 карактери далеку од оваа
и оваа една и оваа.
Па само сакал назад кога ќе се научив C, сте имале случаен пристап
во светот на низи, истата идеја тука.
Ако вашиот колона е претставен користејќи само со фиксна должина карактери,
можете да ефикасно индекс случајно до 60 или 120 или 180
и можете да добиете на поединечно жици многу побрзо.
Потоа, ако наместо тоа, вашата колумна имаше директно лев раб така да се каже
но многу солиден право предност на колоната
бидејќи може да има 10 карактери,
15 карактери, 5 карактери.
Па тоа исто така е Губитокот.
А понекогаш и само преку обиди и грешки
и експериментирање може ќе дознаам
од она што навистина вистинскиот повик е, но овие се видови
на прашања кои треба да се оди
преку вашиот ум и / или маси кога станува збор време
да дизајнирате вашата база на податоци.
Значи, не мора во право одговори, но треба да
најмалку имаат некои реченица или две во умот
да ги заштите што одлука ќе се направи.
Во ред е.
Па ајде задржи лизгање во инструкциите тука
кои се адаптери phpMyAdmin е.
Значи, стандардната вредност за име, јас треба да се определи
дека тоа треба да биде да има стандардна вредност на нула?
Што мислите?
Може да се разбира имаат нула име?
Само се чувствува чудно, нели?
Јас не можам да смислам ниедна Неименуван курсеви на Харвард.
А можеби има некои нејасни агол случај
каде курс е даден број
и професорот не има избрано име за тоа, но -
Мислам, да се грижам со тоа,
како да не дури и мачам поддршка тоа.
Јас би рекол во интерес на убав чист база на податоци,
ајде да се каже дека не можете имаат стандардната вредност на нула.
Алтернативно, може да го направи нешто како Untitled разбира
што не е за разлика со Mac OS и Windows направите
кога ќе се создаде папка за пример,
но таму што го прави малку повеќе смисла
така што човечкото види нешто.
Ние зборуваме за back-end базата веројатно
за текот на каталогот.
Па јас навистина не дури и се допаѓа идејата на давање на тоа
во Untitled имиња разбира
бидејќи тоа не е навистина ќе им помогне на никого.
Па ајде да го оставиме тоа како никој, што значи дека кога ќе внесете
во оваа база на податоци, имате да им даде на секој курс име
која се чувствува малку почиста за мене.
Во ред е.
Па лизгање понатаму, споредување.
Ова едноставно мора да се направи со карактер поставува и какво ли не
Ако некогаш сте виделе споменува на шведската
во phpMyAdmin тоа е Зашто луѓето
кој го напиша phpMyAdmin беа шведски.
Е дека PHP или тоа е MySQL?
Една од двете, јас заборавив импровизирано.
Но тоа е од историски причини
но можете да изразат секој карактер на англиски јазик
дека можете да со шведската па тоа е во голема мера не-прашање.
На CS50 апарати иако е користи - конфигуриран да користи UTF-8,
така што генерално треба да не pop-up за вас.
Атрибути.
Па никој од нив се навистина релевантни тука.
Гледам Бинарни, непотпишана, Непотпишана zerofill,
и ажурирање тековната временската ознака.
Тоа поле се однесува само за некои нумерички поле
или некое време полиња.
Па ние ќе прескокнете над дека во целост.
Нула. Може ова поле биде нула?
Па нема. Ние веќе имаме тој вид на разговори.
Значи ние не сакаме стандардна вредност.
Ние не сакаме да биде нула.
Што е со индекс?
Има четири избори тука.
Што значи тоа ако ние се определи
дека овој ред се случува да биде примарен клуч?
Размислување назад да CS50 или CS165 ако сте ја подигнале.
[Беззвучен Забелешка]
Токму така. Па примарен клуч по дефиниција е поле
кои еднозначно ги идентификува секој ред во оваа табела.
И можете да се потпрете на неа да се направи дека единствена идентификација.
Значи, она што значи тоа потоа само да биде уникатен?
Па, вид на овие два има вид
на под импликации под хауба.
Но, генерално, примарен клуч е вид на договор ќе се направи
со базата на податоци работа.
Кога правам прашања во потрага по се разбира,
Одам да го користите овој одредена област.
И ние ќе се вратам на зошто ние би можеле да имаат две
ваквиот избор тука, основно или уникатен.
Уникатен само вели, ова поле ќе биде уникатен
но јас не сум навистина се прави вид на вербална заложба тука
да се користи тоа поле да се направи моите пребарувања
за причините сите ние ќе види во само еден миг.
Ако ние наведете наместо индекс, што значи тоа да се определи
дека полето има индекс на неа?
Да?
[Беззвучен Забелешка]
Токму така. Тоа е оптимизиран за пребарување.
Така да - база на податоци на серверот, Oracle, MySQL, без разлика,
генерално ќе работат својата магија зад сцената откако ќе кликнете
таа опција и потоа кликнете на Спаси и тој ќе се изгради
до типично дрво структура, Б-дрвја, ако сте виделе
или слушнале надвор што е многу кратко изглед дрво
кој ви дава многу убав логаритамска својства
кога бараат на податоци.
Ако не специфицирате индекс на едно поле, што се случува
да биде работи време на пребарувањето
за произволна [Фонетски] име курс?
Што е тоа?
[Беззвучен Забелешка]
Ох, [нечујни], линеарна, нели?
Ако нема оптимизации дадена во базата на податоци
и не сме размислувале база на податоци каков вид
на податоци да се очекува.
Најдобро можете да направите е да проверите сè што кога сте во потрага
за некои вредност, особено ако има би можеле да
всушност се дупликати.
Целосен текст во меѓувреме, ние ќе бран нашите раце за сега.
Но, генерално, тоа е тип на индекс, кој ви овозможува
за да се оптимизира за клучниот збор бара на терен.
Значи ова може да биде добар кандидат
за како опис разбира каде што може да има неколку
од ставовите и може да сакате да направите подниза натпревари.
Полн текст генерално ќе ги споделите со да го направите тоа доста ефикасно.
АИ, ова е ужасно вид на објаснување, но ако ние лебдиш
над неа ќе видите Авто прираст.
Не е применливо и тука но авто прираст е корисно
за како поле int, бидејќи базата на податоци ќе се грижи
на процесот на плус plusing тоа секој пат кога ќе се направи една влошка.
Па дури и ако двајца луѓе буквално кликнете Прати
во исто време и да се обиде да се создаде ред некако
во базата на податоци, еден од нив ќе го добиете бројот јас,
другите ќе добие бројот јас плус 1.
Вие не треба да се грижите
за два броја се доделен идентично ако сте биле
да го направите тоа сами во кодот.
Во ред е.
Па јас вид на допаѓа имаме име да биде.
Па ајде кликнете на Save.
Дали е ова добар дизајн за одредена база на табелата?
И како настрана ако 'рѓосан на SQL или вид
на само секогаш се прават слепи око за она што се случува,
Јас би можеле да се внесе токму тоа -
тие три линии во тоа црно и бело брза
во командната линија клиентот или би можеле да имаат направено
дека во кодот програмски.
Така што сите phpMyAdmin прави за мене, е само ме спасување на напор
на сеќавањето понекогаш синтакса и пишување надвор за
како досадни команди.
Во ред е.
Значи ова не се чувствува како Најдобар дизајн, едно поле табела.
Сега ние би можеле да имаат работи како професори
и локации и описи.
Но дури и тогаш, користење на името само
да се идентификуваат курсеви не се чувствуваат идеален.
Што обично имаат сме направиле во минатото
ако сте користеле бази на податоци уникатно редови?
Не се користи varchars обично.
Да?
[Беззвучен Забелешка]
Да. Па обично курс проект.
Значи, најчестата Пристапот тука особено
кога се користи рамка е всушност само
да користат голем број како цел број.
Па да ми се оди напред и го направите тоа.
И можеме да го направите ова во неколку начини, но информации ако јас зумирате
во на дното тука.
Одам да се каже додадете една колони на крајот на маса,
обично се само за визуелна погодност да се стави лични карти
на почетокот на маса иако ова нема вистинска
функционални влијание.
Па ќе одам да се каже додадете една колони
на почетокот на маса.
Одам да кликнете оди, дека ми ја враќа оваа адаптери тука.
Да ја наречеме овој проект.
Ако мислиме дека ние ќе треба да имаат повеќе не се прави 4.000.000 курсеви
поле int е во ред.
Ние дури и може да го намали одредување на
но просторот е евтин па кој навистина се грижи.
Но, ние се обидуваме да пишува Фејсбук сега,
не може да биде лоша работа да се предвиди големи ints
кој ќе ни даде 64-битна ints
но тогаш сте буквално удвојување на бројот на битови
дека сте користење, така мали Губитокот
но нешто да се разгледа.
Сега, ова е збунувачки наследство работа.
Може да се сети од користење на MySQL
дека во секое време ќе прогласи int поле често ќе видите голем број
до него, како на бројот 10.
Тоа нема никаква врска со големината на бројот
или бројот на битови.
Што треба да прави со бројот на карактери кои се користат
да визуелно прикажување дека int поле
кога се користи терминален прозорец.
Значи можеме да видиме дека во еден момент.
Значи, немојте да бидете заведени со внесување броеви
таму иако тоа е ефикасно бара од нас
за овде.
Овде, јас ќе одам да поместиме да речеме и потпишан.
Нема причина да отпад сите наши негативни броеви
бидејќи базата на податоци генерално ќе
да се претпостави позитивни вредности или нула.
Проект дефинитивно не треба да биде нула.
И што мислите за индексот за овој проект област?
Ајде да стане основно.
Значи, што ако, иако, како што може да мислат само на едно CS164 се разбира
на Харвард и само еден CS50 разбира на Харвард
и тоа е прилично многу точно целокупната
дека има можеби исклучоци [Нечујни] двата семестри
или нешто чудно како тоа.
Но повеќе во основа, зошто е тоа подобро
да се користи нумерички составен проект да идентификуваат уникатно курсеви, а
од само уникатен стринг?
Да?
[Беззвучен Забелешка]
Добро, интересно.
Значи, ако ние имавме вид на крос-наведени курсеви.
Па тоа е добар пример.
Јас не сум сигурен дека би реши дека иако
со давање на нив исто ID број, ако тоа е
каде ќе одиш со тоа.
Не? OK. Но дефинитивно агол случај да се разгледа.
Ако постои вид на - ние треба некој вид
на aliasing потенцијално.
[Беззвучен Забелешка]
Сигурно.
[Беззвучен Забелешка]
Тоа е добар пример.
Името може да се промени во текот на време, сосема разумно.
Што друго?
[Беззвучен Забелешка]
Жал ми е, велат повторно.
[Беззвучен Забелешка]
Да, точно.
Значи, навистина, тоа е вистинската болт е
дека со користење на 32-битна int е веројатно нема да биде побрз
од некои променлива должина знак област.
Во првиот случај, може буквално се вклопуваат во регистар,
да не зборуваме многу помали меморија стапало.
Во вториот случај, сте ќе мора да направи одморалиште [фонетски]
да стринг споредби кои во себе со линеарна
во големина на низа потенцијално.
Значи, тоа е само убаво оптимизација,
а особено тоа се случува
за да ни го направи она што се нарекува Се приклучува поефикасно
во само еден миг.
Па ајде направите тоа.
Ние ќе се каже дека ова е основно
бидејќи јас не особено сакаат да се грижат или мислите
за тоа што бројот е на курсот.
Нека земе на што вредностите што тие сакаат.
Одам да се каже авто прираст за да можам да нарачува услуги кои детално.
Како и во настрана можеби ќе знаете дека Харвард
барем има уникатен броеви за курсеви.
Јас немам сеќавање она што овие курсеви е.
Знам дека CS50 е каталог број е 4949,
целосно произволни.
Но, има чудни агол случаи во кои дури и
во registrarial депонија се разбира каталог на податоци,
понекогаш курсеви, стари курсеви имаат голем број како 4.
Но технички тоа поле е знак поле
кои едноставно започнува со 0004.
Значи и тука, мора да биде внимателни во врска со разлика
помеѓу работи како Се разбира каталог број
што може да има некои човечки Поимот на фиксна должина, 0.004,
и не треба да се сместат дека на пример во ints.
Овој вид на поле треба да да се чуваат на друго место.
Па во Харвард, ако бевме всушност се прави разбира
шопинг алатка, тоа е веројатно не доволно
на бројот на курсеви со само 1, 2, 3, 4.
Ние сме веројатно нема да имаат
да имаме уште едно поле наречен каталог број,
кој е, исто така, би требало да се биде уникатен Врз основа
за човекови конвенции тука но тоа не е најдобар избор
за единствен идентификатор бидејќи тоа би можело да биде променлива должина.
Тоа не може да биде четири карактери, тоа би можело да биде пет.
Всушност, мислам дека неколку пред неколку години тие се движат
да предизвика таму пет карактери " беа повеќе од 999 предмети
во вкупен или нешто слично тоа, или 9999 предмети.
Значи, тоа може да биде пример каде поле не е примарна
но тоа треба да биде уникатна.
И-мејл адреса е уште еден.
Можеби ќе сакате тоа да се биде уникатен
но не е задолжително вашиот примарен клуч.
Во ред е.
Па да ми се тресне од друг маса многу побрзо отколку оваа.
Па јас ќе одам да се јавите на овој еден Инструктори и јас одам
да им даде на оваа вкупно бројот на колони на две деца.
Одам да дознаете ми лекција од минатиот пат.
Одам да се јавите првата колона ID.
Одам да се јавите на втората колона име.
Јас сум исто така се случува да направам Varchar.
Одам да се претпостави нема професор има име повеќе
од 60 карактери, иако Сега ова може да биде тоа туркање
со некои долги имиња, специјални луѓе со средните имиња.
Тоа е во ред за денес.
Па ајде дојдете ваму.
Да се ​​направи ова непотпишана повторно.
Да се ​​направи ова основно.
И ние ќе им овозможи на дупликат имиња
во случај да има две Џон Смит или нешто слично.
И сега имаме две маси.
Па сега, ова моли на прашање како можам да се дружат
во инструктор со курсот?
Се чувствувам како да сум вид на добив пред себе
бидејќи ако инструктор учи а се разбира,
мојот прв инстинкт би всушност ќе биде да се вратиме
кон курсевите се реализира, овој не е добра идеја.
Дозволете ми да всушност додадете една колона на крајот на маса,
кликнете оди, и јас ќе ова го нарекуваат инструктор.
И јас ќе го прават овој varchar и јас ќе се направи ова 60.
И можеби и јас ќе го оставиме тоа null сега
во случај на курсот не има е непотпишана во инструктор
што понекогаш се случува пред Рокот почнува да тече и кликнете на Save.
Кои од овие дизајни не ви се допаѓа?
Првиот каде што имаме маса посебен инструктор
или вториот, каде што само додадете областа на курсот?
Па тоа е тесно водат инструктор со курсот.
[Беззвучен Забелешка]
OK. Добро. Но, дозволете ми возвратат.
Тоа е толку едноставно како што можам само напишете во името на лицето
во оваа табела, како сигурно дека има некои вредност или -?
[Беззвучен Забелешка]
Во ред е.
Па, дозволете ми биде тешко тука.
Па дозволете ми да кажам дека овој курс е CS51
и знам дека тоа е се изучува оваа година од страна на две лица.
Значи, Хенри Leitner и Џеси Tov но -
па јас само ќе се стави запирка помеѓу двете, нели.
Јас сум навистина добри во CSV од недалечното минато.
[Беззвучен Забелешка]
Точно, во право.
Веднаш штом ќе прибегне да нешто како ова,
кои може да се чувствуваат разумни и може да се чувствуваат
како ова е вид на паметни.
Јас сум вид на позајмување еден идеја која е да се работи добро,
позајми нова идеја и вид од нив се комбинираат.
Ти си вид на целосно победувајќи точка на користење на базата на податоци
на прво место затоа Ако еден од вредности
на користење на тоа е побрзо пребарувања бидејќи на различни индекси
и табели кои можат да биде изградена за вас
од базата на податоци себе моторот.
Сега, ако сакате да пребарувате за сите курсеви
дека Џеси учи, сега имате да се подниза појавување на сите
на инструктор полиња,
кои ефективно значи линеарни пребарување повторно затоа што треба
да се најде оваа произволна сет од три карактери насекаде
во областа на инструктор претходеше
во рамките можеби следеа со запирка.
Па ова дефинитивно не создава добри предуслови.
Па да ми се вратиш на масата.
Дозволете ми да оди напред да курсеви, вратите тоа.
Одам да се оди само напред и се откажат од таа област.
И ако сакате да го направите тоа рачно,
синтаксата е Alter ТАБЕЛА курсеви зависници инструктор.
Па ајде ќе одиме напред и каже ДА за тоа.
И се врати на ова порано идеја
каде што имам посебна маса за инструктори.
Но сега тоа се чувствува малку како можам да се стави на курс
во табелата на курсот и инструктор
во табелата на инструктор, но јас некако треба да се поврзе двете.
И како ќе предлагаат правиме тоа?
[Беззвучен Забелешка]
Добро. Па ајде направите тоа.
И може да се нарече ова маса во теорија ништо.
Одам да намерно Наречи го тоа што многу
на рамки би го нарекуваат, меѓу нив,
Laravel како што ќе видите во малку.
Одам да го наречеме разбира истакне инструктор.
Користење еднина во овој случај за секоја од зборови
и сите мали букви повторно, како и со -
потоа по азбучен ред подредени од лево кон десно.
Ова е сосема произволна, но тоа се стреми да биде конвенција
во многу од овие рамки во PHP во други јазици.
Колку колони ми треба во ова она што ние го нарекуваме приклучат на маса,
да се приклучат две други маси заедно?
Три колони?
Кои едниот - што ќе биде?
[Беззвучен Забелешка]
OK. Добро. Која работи.
И ние би можеле технички намали корнер тука, но многу
на рамки особено сепак, ќе се даде дури и овие редови
уникатен ИД иако семантички ред
дека ние навистина се грижат за или колумни дека ние навистина се грижат
за се последните две од она што го рече тоа, се разбира проект
и инструктор проект.
Па ајде направите тоа.
Ќе му се јавам овој ред само лична карта, исто како што беше порано.
Но овој Одам да се јавите разбира проект.
Ова е еден јас ќе одам да се јавете инструктор проект.
И јас ќе одам да се каже дека сите
од нив се непотпишана Затоа сакам
да се зголеми мојата 4 милијарди int опсег.
Никој од нив не треба да биде нула.
Одам да се каже дека Проект се уште треба да бидат примарни.
И повторно, ова е само конвенција,
многу рамки дури и ако не го решите
на фундаментално треба единствен идентификатор за ред,
излегува дека е погодно за кодот, SQL што се случува
да биде автоматски генерирана за нас.
Па јас ќе го оставиме тоа како примарни.
Но сега, јас вид на имаат дизајн одлука,
Се разбира проект и инструктор проект.
Што индекси ако било тие треба да добијам?
Дали јас ќе не остават индекси, она што е импликација?
Што е импликација?
Перформанси, како и порано, нели?
Ако не постои индекс, Најдобро можете да направите е вид
на [нечујни] преку Целата работа во потрага по броеви.
Така што не се чувствуваат паметни.
Тоа треба да биде основно?
Па зошто да не?
Зошто да не основно?
[Беззвучен Забелешка]
Совршена. Па ние се тркалаат надвор [фонетски] основното.
Ние веќе го одбра тоа.
Значи, тоа треба да биде уникатен?
[Беззвучен Забелешка]
Добро. Значи, ако се претпостави еден инструктор по курс,
целосно парична казна.
И тоа е дефинитивно заеднички случај
но ние веќе се стави надвор еден можеби запознаени пример.
CS51 доби двајца инструктори па ние сме вид
од сега зезнав во тој случај.
Ако ние го сторивме овозможи само еден инструктор,
ние всушност не можеше да стори на начин со приклучат маса целосно,
да се вратиме на почетокот на пристап
и да не се стави името на лицето можеби, но проект на инструктор.
Ако знаете секој курс како само еден инструктор може да имаат само
една колона.
Но варијабилност е она што ни влезе во неволја.
Во ред е.
Значи, тоа треба да биде уникатен?
Не Целосна текст не чувствуваат применливо.
Како што веќе рековме, тоа е
за како подниза појавување на описи.
Значи она што за индекс?
Па, индексот е веројатно нашите најдобри кандидати
кој кажува MySQL оптимизирате за пребарувања на овој
или нека ми да се осврнам, оптимизира за пребарувања или се приклучува
како што ќе видиме во само еден миг
така што тие се малку поефикасен
од ништо чисто линеарна.
Сакам да авто наголемува оваа област?
Па нема, затоа што вистинската родител елемент постои
во табелата на курсеви.
Тоа е каде што тоа е ќе добиете плус,
плус кога тоа е всушност вметната.
Еве, ова сите ќе рачно да биде вметнат
од нас веројатно во кодот.
Па ајде едноставно се определи дека и двете се разбира проект
и инструктор проект имаат индекси.
Сега ќе одиме напред и да се спаси.
И сега, само за да покажат можете кореспонденцијата
помеѓу она што е убаво, GUI интерфејс
и интерфејсот на командната линија.
Дозволете ми да оди напред и да прават следниве во овој MySQL прашува.
Одам да се каже употреба courses50
кој е произволно име Дадов на оваа база на податоци.
И сега, јас дури и не се сеќавам она што го правевме.
Па да ми напишеш шоу маси
и, генерално, semicolons ќе ти биде пријател тука
да заврши на пребарување.
И таму е.
Значи тука се редови или подобро табелите што имаме овде.
Сега, ќе заборавам што курс изгледа,
па да ми се опише курсеви и сега гледам вид на ASCII
или верзија на она што phpMyAdmin правев
и гледам дека проект е int.
Таму е дека 10.
Што значи тоа?
Тоа само значи дека кога е прикажани се случува да се земе
до 10 знаци на на прозорецот на терминалот.
Тоа е nullable?
Не, ова е примарен клуч.
Тоа може да има преддефинирана вредност?
Број и дополнителна кој е посебен знамиња како авто прираст.
Па да направи неколку брзи инсерции тука.
Одам да одат нагоре да - да речеме.
Да ги смениме државата да слајд
каде што вид на пред-се подготви ова.
Ова е резиме потоа на сите три од овие табели.
Јас веќе само рачно внесе првата команда.
И тука, отидов напред и тип другите за вас.
Ова е само стилски работа.
Општо земено, многу луѓе тип SQL извештаи во сите настапи
а потоа маса имињата и поле имиња со мали букви,
ако само затоа што вид на штандови
од она што е на вашиот терминологија и она што е база на податоци синтакса.
Значи тука имаме три маси, курсеви, инструктори,
и курсеви инструктори.
Во слајд сум направил во однапред, Немав поле проект
но тоа не е всушност лоша работа на сите.
Ние само ќе ја видите Третата колона таму.
Ако јас го направиле тоа овде?
Па сега дозволете ми да предложи правиме еден куп на инсерции.
Па еве некои податоци, Јас ќе зумирате внатре
Па ќе одам да предложи дека во курсеви,
Ние само се справи со три курсеви.
И јас избрав овие три Зашто тие се репрезентативни
на некои убави - тие имаат некои убави особини.
CS1, CS50, CS51, тие имаат зголемување лични карти
но она што проект е она што е сосема неважно.
Тоа е само редоследот по кој тие беа авто вметнува од мене.
Како за инструктори?
Па сега, затоа што Хенри Leitner учи како CS1 и CS51,
ова е вид на вистинскиот импликација за нашиот дизајн.
И Џеси учи CS51 и Malan учи CS50.
Па сега - или подобро овие се само уникатен ИД оние на луѓето.
И курсеви и инструктори, - Се разбира инструктори, информации тука.
Се разбира id1, која беше CS1 се учи
од ловење id1 кој е Хенри.
Се разбира ID2, на кои јас мислам беше CS50 се учи
од ловење ID2, кој е Malan.
А потоа на крај, CS51, и забележите имаме два реда.
А сега тоа е причината зошто се приклучат маса е моќна се учи
од страна на двете Хенри и Џеси.
Значи ова е сите фини и добри,
но јас едвај може да се сеќавам од врвот
на мојата глава кој е кој овде.
Како ќе биде возможно се справи со тоа во кодот,
без да тешко код работи?
Па, ова е местото каде SQL себе почнува да стане наш пријател.
И јас одам да предложи можеме да напишете следново.
Ќе го направите тоа во во Крај на линија.
Дозволете ми да оди напред и да вметнете овие работи.
Значи, во курсеви маса ајде да го прават токму она што го имаше
пред моментот.
Одам да се понапред и да каже, ајде да вметнете CS1 и CS50.
Ајде да се вметне уште неколку редови одеднаш, CS51.
Сега, дозволете ми да оди напред и да се спаси.
Добро, па јас сум само Пресоздавањето толку брзо
што можам односите ние само видов на екранот.
И така тука имаме Leitner, тука имаме Malan.
Ајде да се даде уште еден ред, и Tov.
Сега дозволете ми да го спаси ова.
И јас сум ги прави намерно во истиот редослед.
Не, јас заборавив да даде овој авто прираст.
Дозволете ми да брзо да утврдат тоа.
Јас ќе го надминете овој во онлајн код.
Што не успеа како настрана.
Фактот дека не можев вметнете Leitner и Malan
и Tov не успеа, бидејќи јас не наведете матичен број, иако
тоа е очекувајќи еден и јас Заборавив да се провери авто прираст,
што значи дека сите тие биле стандардно добивање нула.
Но, тоа тогаш е во спротивност кои имотот што сме одреден.
Примарниот клуч е повредено така што дури и не дозволете ми да го направи тоа.
Па да ми го надминете овој.
Сега, дозволете ми да се вратиме на Вметнете табот тука и да го одредите
дека сакам Leitner, Malan и, уште еден ред, Tov.
И сега на крај, само оној кој е малку тешко
да се запамети е се разбира инструктор.
Ајде да вметнете сега дека Се разбира id1 е инструктор id1
па тоа е CS1 и Хенри.
Се разбира ID2 е инструктор ID2 кое е CS50 и Malan.
А потоа последни имаме да се грижите за е секако на ID3
кој е CS51, се учи
од курсот инструктор 1, кој е Хенри.
И три како поучувале од 3, кое е Tov.
Па се надевам дека сега ние сме пресоздава ова -
По ѓаволите, јас го направи истото.
Се разбира инструктор треба авто прираст.
Во ред е.
Јас ќе го направите ова побрзо тоа време, текот 1, текот 1, 2, 2.
И сега на крај, тоа го правиме CS51 кој има се разбира ID3 и Хенри.
И се разбира на ID3 и Џеси.
Што изгледа добро.
OK. Па сега, да се вратиме на терминалот.
Значи, ако јас го опишам курсеви ќе видиме тоа.
Ако сакам да видам курсеви можам сега не изберете ѕвезда од курсеви,
полу дебелото црево, а сега можеме да видиме тие вредности.
И сега, што друго сакам да направам?
Изберете ѕвезда од инструктори, тоа е како што очекував,
и изберете ѕвезда од курсеви - Се разбира црта инструктор.
Па како можам да се приклучат сега овие табели?
Па убавината на ја избра лична вредности на овој начин е
дека ако се размислува за полагање на курсот маса
и инструктор табелата, а потоа вметнување
помеѓу овие две во вашиот умови текот инструктор
маса можете да вид на линија сите од овие проект колони
така што ќе ги спои во една голема колона која ги има сите
на информации ние се грижиме за.
SQL синтаксата за оваа не е нужно очигледно,
но ајде да видиме дали можеме да го направи тоа.
Па изберете ѕвезда од курсеви,
и има неколку начин како што може да го направите тоа.
Одам да притиснете Enter само за да вид на формат работи убаво,
но тоа стрелка е само симптом на клиентската страна, алатка,
таа не треба ништо да се направи со SQL себе.
Па изберете ѕвезда од курсеви.
Одам да се приклучат сега курсевите маса
на курсот инструктор табела.
Како? На областа наречена courses.id изедначување разбира
истакне инструктор точка, она што е името
на соодветната област тука дека сакам двојка.
Тоа не е проект.
It's - што, жалам?
>> Курсот проект.
Добро, дозволете ми да одзумирате.
Но сакам да ги преземе овој уште еден чекор понатаму.
Сум сега направено оваа маса и оваа.
Сега сакам да се повлече овој човек како добро.
Значи, дозволете ми да понатаму се приклучат на целата оваа работа
на инструктор маса на што?
Се разбира црта instructor.instructor проект
изедначување instructors.id.
Па ние би можеле да имаат напишано ова побарување во неколку начини.
Редоследот по кој Го направив ова не е толку важно.
Јас само вид на тоа го правеше во мојот ум од лево кон десно.
Ние би можеле да имаат направено ова во неколку различни начини
но ако јас сега имаат полу дебелото црево и притиснете Ентер,
забележиш јас се вратам нова привремена табела, резултат во собата
така да се каже во базата на податоци зборува.
И она што ми треба во оваа работа?
Имам на проект, име, друг Проект, кој е вид на збунувачки
за мене во моментот, курс проект,
инструктор проект, проект, и име.
Така, на крајот на денот ние имаме право на податоци сега.
Јас може да се види дека CS1 се учи од Leitner, CS51 се учи
од Leitner и Tov, и CS50 се учи од страна Malan.
Но јас сум малку нервозен за оваа двосмисленост сум замислен.
Што е двосмисленоста Јас сум алудирајќи на?
Да?
[Беззвучен Забелешка]
Има три проект колони.
Па ние всушност може да го надминете овој и ние ќе всушност се случува
да се одложи за нашата рамка на крајот да ни помогне со ова,
но излегува дека има клучен збор во SQL нарекува S,
каде што можете да наведете алијас, ново име за поле
така што можеме да се избегне ова двосмисленост заедно.
Но сфати дека ако ние не решавање некако како и со
овој клучен збор или рамка,
има потенцијално овој двосмисленост ако се обидете
пристап до полето за проект бидејќи јасно е дека има оние
со дупликат имиња таму.
Значи ова е се приклучат и мислам дека во окото на твојот ум е најдобар начин
да се размислува за тоа навистина е да се земе на две маси,
линија ги во начинот на кој сакате.
И ова е т.н. внатрешна приклучат во смисла
дека ние сме комбинирање табелите тука.
Постојат и други видови на се приклучува дека ние може да се судрите
со текот на времето како надворешниот приклучува,
но за поголемиот дел од оваа е најверојатно најчестиот
за реконструирање на податоци.
Она што го направи сега е Општо земено она што се нарекува
нормализирање на вашите податоци, така што нема дуплирање насекаде
во вашите табели.
И со дуплирање, јас би значеше дека првиот пристап.
Ако рековме Leitner и Tov во повеќе места
во вашата база на податоци, тоа не е генерално најдобро решение
особено ако нивните името може да промена прекувремена работа или во случај
на бракот, моминско презиме моќ да се промени само сакате еден
канонски место за некои податоци вредност како име.
Во ред е.
Значи, да повториме, имавме неколку дизајн одлуки да се направи
и најважните веројатно намали до одреден
на овие избори на индекси.
Но дозволете ми да истакнам една друга работа, како и.
Ако одам назад кон phpMyAdmin,
една карактеристика што не може се соочиле пред да се
следниве.
Ако одам во текот инструктор, Јас веќе прецизираше дека некои
на овие работи треба индекси.
Но, дозволете ми да одат во структурата табот, се разбира инструктор.
Дозволете ми да кликнете сега Индекси и ќе забележите следново.
Имам наведени тука дека постои примарен клуч
на колумна наречена проект.
Ова е малку комплицирано начин на одредување на кардиналност
и така натаму како да се однесува на големината на полето во бајти.
Но сега исто така имам уште една полето, текот ID, кое е -
Се разбира проект кој се врши однапред и уникатни, ОК.
Го направив ова еден во однапред за нас.
Значи, зошто е ова - дозволете ми да се откажат од ова за доброто на дискусијата.
Ох, знаеш она што го направив?
OK. Значи, порано, една од тавани ризици од користење на GUI алатка
вака, кога бевме создавање на оваа приклучат на маса,
текот инструктор маса, потсетиме дека јас наведени
дека сакам индекс на ова поле
и индекс на овој друго поле.
Несакани ефекти од проверка и на оние кутии
на истиот екран е дека phpMyAdmin се заклучи од тоа,
дека сакам не два одделни индекси,
дека сакам приклучат индексот кој е генерално само корисна
или најкорисен кога сте пребарување на не едно поле
но и двете од овие области.
И тоа е причината зошто моравме ги conjoin таму
па јас го намали затоа што не беше она што имав намера.
Наместо тоа, ќе одам да се повтори овој овде.
Одам да одат на курс проект
и под повеќе Јас сум само случува да се каже додадете индекс.
И јас одам да оди под инструктор проект и велат додадете индекс.
И сега ако ние кликнете овде, забележите имаме три индекси,
едно основно и како што наменети една за секој
на оние странски клучеви.
И јас го нарекуваат странските бидејќи Се разбира проект во оваа табела мапи
на која полето, само за да бидат јасно, во друга маса.
Примарниот клуч наречен проект, во табела наречена курсеви,
и истиот договор за другиот.
Но сега, е интересен трик и навистина техника.
Јас само отиде напред и дозволете ми да направи тоа малку побавно.
Во истиот екран, најава се вели Однос поглед тука.
Јас кликнете на ова и сега забележиш јас натера да направи неколку ограничувања.
Така, еден од квит, исто така,
не само користење на концептуално странски клучеви и други маси
како ние сме само на е дека со дефинирање на индекс
на нив може да имаат дури и база на податоци да ви помогне да повеќе
се обезбеди интегритетот на тоа поле.
Поточно, јас сега може да се наведете преку овој пад
одредување на тоа поле текот проект
во оваа табела, всушност, мапи за courses.id.
Слично на тоа, инструктор црта Проект одбележан instructors.id.
Сега, зошто е ова корисно?
Па, информации, на десната страна она што се појавува сега.
Сега можам да ги учат база на податоци која ако Хенри
на пример некогаш се пензионира и неговиот ред исчезнува
од трпезата на инструктор заедно со тоа се
избришани, можам преку овој каскадни пристап се обезбеди
дека секој курсеви тој учи се не се поврзани со него.
Можам да учат на база на податоци да ги избришете редови
во овој т.н. приклучат на маса автоматски ако Хенри или ако еден
од неговите курсеви исчезнува.
Сега, зошто е тоа огромна?
Да?
[Беззвучен Забелешка]
Вие само треба да го прават тоа еднаш и подолг рок, нели?
Тоа е многу лесно, ако вид на луѓето доаѓаат и си одат, курсеви доаѓаат
и си одат, вашата база на податоци може да само да се оптеретени со курсеви
и со факултет што не се повеќе релевантни за податоци.
И на вашите податоци ќе почне да се многу неуредна и валкана и застоена,
и така тука можеме да го решите
на спроведување на некои од овие ограничувања.
Да?
[Беззвучен Забелешка]
Тоа го знае по пат на ова.
Ова е екран каде што ние сме одредување на поврзаност
помеѓу странски клуч и примарен клуч.
Така што сите на именување конвенции јас алудираше
на претходните се само конвенции.
Нема својствени значење.
Ова е екран кој е само корисно
откако ќе определени индекси на секоја од овие области како и ние.
И за ова паѓачко имаме неколку работи како на пример
ако се разбира е избришан можете да всушност се спречи тоа бришење
од се случува ако има е ред во оваа табела
од само велејќи, Ограничи.
Со други зборови Хенри не можат да се пензионираат
додека ние го одвојат од CS51 и CS1.
Па тоа е добра работа.
Но, тоа може да предизвика грешки во вашиот код
ако не се предвиди дека, или ние може да има каскада,
каскада слични им се допаѓа Cascading Style Sheets
и каскадни водопад значи дека ако -
ако Хенри пензионира така - од добивање избришани
па ќе неговиот ред тука се бришат.
Нема акција значи ништо или нула е вид на корисно ако вид
на сакате некои историски рекорд Хенри ја научи CS51,
но само сакате тоа поле да биде нула, така што редови има
но тоа не е веќе поврзани со него.
Па овие се многу моќни техники кои можете да
и треба да се користи, иако во интерес особено
од вас заштеда од себе.
Па да ми се направи спомнувањето на неколку финалните детали тука,
состојки со кои кои би можеле да бидат корисни
како ние планираме за базата на податоци дизајн.
Исто така имате избор во текот на база на податоци моторот
кои ги користите во вашиот код.
Ако сте запознаени на CS161 Можеби -
или дури и 61, можеби генерално биде запознаен со датотечни системи.
И има работи како, NTFS и HFS +
и X2FS4 [фонетски] и 3 и така натаму.
Има различни начини на чување на податоци на бирото.
Слично постојат различни начини на чување на податоци
во базата на податоци од стандардните барем во апаратот
со најновата верзија на MySQL.
Ние сме биле со користење на база на податоци мотор наречен, NoDB,
кој поддржува неколку убави особини.
Но, друг заеднички еден е, исто така, наречен MyISAM и уште една
кои можат да бидат употреба е Меморија, што значи не се става ништо
на дискот, само задржи работи во меморија.
За најголем дел, најверојатно не ќе тргне наопаку само на почетокот
со NoDB, но за сите проекти кои имаат тенденција да се вклучат високи стапки
на внесување на пример, како многу брз сеча,
стотици работи во секунда или илјадници нешта.
Во секое време имате многу нешта ќе
на во базата на податоци тогаш ова видови
на пониско ниво одлуки почне да се вклучат.
Целосниот текст функција за пример работи само во MyISAM
така што има импликации.
Но, може да се сети ова, ајде да најмалку мотивира зошто ние се грижиме
за NoDB особено.
Трка услови генерално се однесува на она што?
Добро, ова е алузија на пример некои
на што можеби сте слушнале во изминатите години дали 161 или 50
каде што имаш цимер, двете од вас навистина ми се допаѓа млеко,
еден од вас добива дома Првата го отвора фрижидерот нема млеко,
затвори фрижидерот прошетка низ улиците за да CVS и да добијат
во ред за да купат млеко.
Во меѓувреме, вашиот цимер се враќа тука.
Таа, исто така сака млеко.
Отвори фрижидерот и остварува без млеко.
Тука таа, тогаш оди на чување, можеби другите CVS.
Брзо нанапред неколку минути подоцна ќе се врати и сега двете
на сте го купиле млеко.
Еден од нив е сега се случува да ги расипат затоа што не
како млеко што многу и ова е проблем, нели?
Бидејќи и двете од вас прегледано состојбата на некои променлива
и донесе одлука врз основа на него иако државата
на таа променлива во суштина беше во процес на промени,
сето тоа полека во текот на износот на времето што е потребно
да стасаат до и од CVS.
Значи она што е еден вид на глупави реални свет решение за тој проблем?
Остават порака, нели?
Тоа се случи минатиот пат.
Секогаш оставете белешка или Катанец нешто буквално.
И јас велам катанец, бидејќи ако не се земе или се CS161,
заклучување е основен идеја во тој свет.
Значи трка услови може да се појават исто така, во базата на податоци светот
и може да се потсетиме можеби од CS50 финансира ако го зеде 50,
овој законик, што ние всушност даде вие момци во спецификацијата
во времето, така што вашиот операција е т.н. атомски.
Ако си сакал да, во овој случај, купи удел од акциите
и дека акции има одредени симбол.
Ние ви кажав да се користи кодот како ова, бидејќи по пат на ова
на дупликат клучот ажурирање синтакса, кој е изграден
во MySQL сте ефикасно прави или во вметнете
или во ажурирање по прави одберете за да ја видите
ако акцијата е веќе таму.
Со други зборови, на аналогни во светот на купување на акции
на млеко и фрижидер може да биде, прво,
пред купување на удел на Google можеби ќе сакате да изберете
од базата на податоци на сите Акциите на Google дека Давид е сопственик на
да се види дали тој поседува нула или повеќе.
Откако ќе се види дали тој поседува нула или повеќе имате
за да потоа го направите следново.
Можете или треба да направите вметнете
ако тој сопствена кауза нула " нема ред за Дејвид сепак,
или што треба да направите надградба ако барем во теорија дека сакате
да има еден ред по корисник.
Проблемот е изборот дека бројот на акции
а потоа ажурирање или вметнување може да се прекинат
од некој друг на друг компјутерски терминал обидуваат да купат
или да го продаде некои од Давид акции на акции дали
за добри цели или вид на злонамерни цели.
Тоа е како одење во продавница кога вашиот цимер добива назад
и проверки на државата на променлива.
Па оваа синтакса во времето кој е вид на соодветни
за CS50, се избегнува дека проблемот целосно.
И тоа само прави сето тоа магијата на заклучување за вас,
но сега со овие видови на проекти за овој курс
кои, најверојатно, ќе вклучат повеќе комплексни множества на податоци,
не може да се постигне секогаш на овој atomicity.
Сè што се случува одеднаш или воопшто не
без прекин така елегантно.
И така MySQL, друг база на податоци моторот,
поддршка нешта наречени брави,
при што може да се каже заклучување овој маса, така што само една третираат
и, генерално, само еден корисник може работете ништо во него во било која точка во времето
да прочита или запише и тогаш можете да го отклучите.
Ова е пример од една на сопствени референци MySQL е,
каде што ако имаш како банка предвид дека вие се обидувате
да го одземе пари од и потоа додадете пари.
Можеби ќе сакате да бидете сигурни дека и двете
од оние работи се случуваат заедно
така што нема математички грешки
и никој не загуби пари, некако.
Проблемот со катанци иако во базата на податоци е
дека тоа обично значи дека целата маса е заклучен,
што значи ако имате сто луѓе кои се обидуваат
да прават бизнис со вашата банка онлајн во истиот износ
време само еден од нив можат да се во исто време.
Кој е глупаво, особено на сервери во денешно време
кои имаат осум разбира, 16 Се разбира, имаат огромна сума
на меморија, нема причина да се серијали сите
на вашиот трансакции доколку тие клиенти се случува само
за да комуницирате со свои редови.
Па NoDB ви овозможува да направите работи поинтелигентен
и ова генерално ќе биде пристапот ве однесе во кодот,
како што се користи нешто наречен трансакцијата.
И ќе го направите ова, генерално, во PHP код,
Руби код, python, сеедно.
Но на SQL код кој е крајна линија се користи е ова,
обично.
Започне трансакцијата тогаш ќе наведете две или повеќе прашања
што сакате да го изврши целосно
без прекин или не на сите.
Има дури и може да има некои изберете изјави во
или некои брише или надградби.
Но убаво нешто е дека база на податоци ќе бидат доволно паметни
да бидете сигурни дека тоа само ќе заклучите редови всушност тие се
вклучени во овој надградби или избира или бришење.
Значи, ако сте ја добиле илјадници редови а ти си само допирање три
од нив, само што подмножество на маса ќе бидат заклучени
што значи тие други 99 клиенти може да го допре нивните редови
без да бидат серијали и забави со вас.
Во меѓувреме, ова е најубавиот аспект на трансакции.
Тие се трансакции во чувство како 161 на датотечниот систем,
тие се трансакциски
што значи дека може да се тркалаат назад, можете да ги вратите.
Ова е како команда или контрола F на бази на податоци.
Ако откриете дел пат низ сите
на вашите различни податоци операција, пука, нешто се случува не е во ред.
Вие буквално изврши различни SQL пребарување Roll назад
и сите на овие тренд - сите на изјавите ќе изврши
по велејќи почеток трансакција исчезне
како да не се случило,
што е неверојатно моќна работа.
И овие се видови на работи, секако, во 50 ние вид
на метат под черга и можете само вид на претпостави
дека сите ќе бидат добро.
Но, штом еднаш ќе почнете размислува за реални проекти
и вистински корисници и интегритетот на вашата база на податоци,
овие се видови на дизајн на одлуки
дека се случува да биде важно.