>> Добра.
Такім чынам, без далейшых цырымоній, SQL, Мова структураваных запытаў.
Такім чынам, вы, верагодна, выкарыстоўвалі гэта ў меры ў CS50, можа быць, у CS165,
можа быць, у вашай ўласнай асабістыя праекты.
І што SQL дазваляюць вам рабіць, ў SQL Server больш агульным?
Да?
[Неразборліва Заўвага]
Добра, што гэта было вельмі забяспечаны спосаб сказаць гэта.
Так. Так ён дазваляе захоўваць дадзеныя
і што больш важна дазваляе Вы для запыту дадзеных.
І гэта з'яўляецца крокам наперад
ад выкарыстання нешта прасцей як CSV, правільна.
Падзеленыя коскамі зменных.
Падобныя значэння.
Аналагічна дазваляюць захоўваць Інфармацыя адзін радок
у тэкставым файле.
Але тое, што адваротны бок CSV файл для захоўвання дадзеных,
нават калі вы эфектыўна атрымаць радкі і слупкі з яго?
Так.
>> Вам не 'маюць тая ж арганізацыя
Эфектыўнасць [неразборліва].
>> Вам не прыйдзецца тое ж самае Эфектыўнасць арганізацыі.
Што ты маеш на ўвазе?
>> Ну, як [неразборліва] ёсць як першасная [неразборліва].
>> ОК. Так.
>> Гэта рэляцыйная база дадзеных Вы можаце мець некалькі баз дадзеных
звязаны адзін з адным ў вельмі спецыфічных спосабаў.
>> ОК. Добра.
>> Гэта [неразборліва] ўсталяваць CSV.
>> І дазвольце мне наладзіць трохі тэрміналогіі.
Так некалькі табліц ў базе дадзеных, вядома,
і што выходзіць за рамкі вы можаце зрабіць з дапамогай толькі аднаго CSV.
Але на самай справе абмежаванне з CSV я б сказаў, з'яўляецца
што неэфектыўнасць усяго гэтага.
Гэта вельмі лёгка макета.
Але калі вы хочаце зрабіць запыт, што час працы
любога запыту на выбарку на файле CSV?
Я маю на ўвазе, што гэта вялікі стары [неразборліва], Добра, таму што ў горшым выпадку,
яны выраслі на самым дне.
Нават калі вы сартавалі ўсю CSV файл, калі вы не ведаеце,
што авансам, а, вы ўсё яшчэ будзеце мець
шукаць ўсё гэта.
Такім чынам, сярод рэчаў мы збіраемся, каб атрымаць
выкарыстоўваць фактычнае база дадзеных, якая выкарыстоўвае мову
як SQL з'яўляецца мы можам запытаць гэта і мы можам загадзя
як дызайнеры баз дадзеных паказаць якія поля,
, Якія былі, верагодна, будзе мець пытанні аб так, каб людзі
у MySQL або Microsoft або Oracle,
хто зрабіў базу дадзеных Вы карыстаецеся можа зрабіць усё
з цяжкай працы высветліць, у парадку,
улічваючы мільёнаў гэтых IDS.
Як мы можам макет - іх у памяці?
Нейкі дрэва структураваць, магчыма,
так што, калі вы робіце на самай справе выканаць Select,
гэта тое, што гэта лагарыфмічная або лагарыфмічная
лагарыфмічнай ў часе, а чым на самай справе ўскладзеных
ў нешта лінейнай.
Такім чынам, мы атрымалі шмат прадукцыйнасць такім чынам.
І мы можам таксама захоўваць нашмат больш Дадзеныя з большай гатоўнасцю "выклікаць SQL
Сервер звычайна захоўваецца ў аператыўнай памяці, хоць часткі
з яго могуць захоўвацца на дыску і вы, верагодна, ужо ведаеце,
што АЗП, як правіла, хутчэй, чым дыскі,
так што гэта добрая рэч.
І мы можам таксама апрацоўваць паралелізм нашмат лепш.
Калі вы ўзялі 165 або 161, Вы ведаеце, што калі два чалавекі спрабуюць
каб зрабіць тое ж самае адразу ў сістэме,
дрэнныя рэчы могуць наогул адбудзецца.
Так сярод іншых функцый, якія мы можна атрымаць, калі мы праектуючы нашы сталы
ў правільны шлях палепшаная падтрымка і бяспеку
калі справа даходзіць да паралелізму.
Так, два чалавекі ў дзвюх частках
свету, выкарыстоўваючы тое ж самае сайт, калі яны абодва спрабуюць
нешта купіць у той жа Час, што парадак не збіраецца
ісці ў адначасова.
Так ці інакш яны былі б па частках кімсьці іншым, чым наш уласны -
нехта іншы, чым мы самі.
Воля базы дадзеных зрабіць гэта для нас.
Таму, калі яго найпростай форме,
SQL дазваляе нам запытваць рэляцыйная база дадзеных.
Рэляцыйная база дадзеных гэта той, які мае адну
або больш табліц ў ім звычайна.
І калі гэта крыху знаёмыя,
вы сапраўды можаце проста думаю, пра гэта, як Excel ці нумары
або электронныя табліцы Google.
У яго ёсць толькі радкі і слупкі і, як правіла ў верхняй частцы кожнай
з гэтых радкоў мае назву для яго.
Так што гэта можа быць ідэнтыфікатар калонка, калонка імя,
калонка адрас і гэтак далей.
І тады вы можаце мець некалькі такія табліцы, калі вы хочаце
пачаць з выкладаннем розныя тыпы дадзеных.
Але вы, напэўна, памятаеце, па меншай меры ад CS50, што мы спрабавалі
каб даць вам з графічным інтэрфейсам інструмент [неразборліва]
для кіравання базай дадзеных.
Яна называлася PHPMyAdmin.
Так што гэта проста супадзенне, што яна была напісана ў PHP, сапраўды,
але гэта быў усяго толькі вэб- інтэрфейс да базе дадзеных.
І праз розных укладках і спасылкі, не маглі б вы пачаць
наладзіць базу дадзеных для сябе.
Але добры інструмент, каб пачаць атрымаць крыху больш камфортна
з таксама каманднага радка кліента.
Так што, калі з дапамогай CS50 Appliance або сапраўды з дапамогай любога макраса ПК
што мае каманднага радка MySQL кліент, вы таксама можаце зрабіць гэта свайго роду
са старой школы, як гэта.
Як у баку праекта MySQL, па меншай меры, з адкрытым зыходным кодам версія
з яго зараз называюць MariaDB для розныя прычыны вы можаце прачытаць
на Вікіпедыі, але гэта тое ж самае праграмнае забеспячэнне,
гэта той жа сінтаксіс і гэтак далей,
амаль тое ж базавы код.
І таму, калі я на гэта падкажыце цяпер я магу ўзаемадзейнічаць
з маёй базе дадзеных значна больш ўручную.
Так гаворка, дазвольце мне ісці наперад
і проста адкрыць акно тэрмінала.
Мне давялося быць з дапамогай CS50 Appliance, але вы можаце зрабіць гэта
на большасці любой сістэмы ў якія вы атрымалі права
ўсталяванае праграмнае забеспячэнне.
І я збіраюся зрабіць MySQL-U для імя карыстальніка Джона Гарварда
на дадзенай сістэме,-п ўвесці пароль, што я буду увядзіце
ў трохі больш надзейна, націснуўшы Enter.
Цяпер я прапанавана.
Я збіраюся ўвесці малінавы у CS50 Appliance
і цяпер я бачу, па сутнасці што ж экран.
Але ёсць каманды цяпер што мы можам пачаць друкаваць
як паказаць баз дадзеных, і што збіраецца паказаць мне ўсё
з баз дадзеных, якія ў мяне ёсць ужо створаны ў сістэме,
ў значнай ступені той жа спіс вы б ўбачылі ў PHPMyAdmin.
Там у пару такіх жа, як звесткі аб схеме і выпрабаванняў,
які, калі вы капацца CS50 Appliance, мы схаваць некаторыя
з гэтых табліц больш нізкага ўзроўню
але яны былі там усё гэта час.
MySQL на самай справе мае нізкі ўзровень ўласцівасці, як імёны карыстальнікаў
і паролі для базы дадзеных Сам, не дзеля вашага прыкладання
што вы маглі б быць працуе на ім.
Так загадзя, сёння, я створана пару баз дадзеных,
адзін з якіх называецца courses50.
Каэфіцыенты некаторыя з вас выкарысталі CS50 Вядома гандлёвы інструмент,
які з'яўляецца вялікім інтэрфейс для Вядома Каталог рэгістратара.
І гэта на самай справе добры набор дадзеных, каб гаварыць аб 'прычыны,
адзін, мы накшталт усё відавочна, знаёмыя з курсаў
і інструктары і сустрэча месца і ўсё накшталт
звычайных рэчаў універсітэта,
але ён таксама атрымаў некаторыя цікавыя магчымасці
для дызайну.
Такім чынам, мы думалі, што мы выкарыстоўваем Паняцце каталог курсаў
і гандлёвы інструмент, як прыклад ўсёй сёння для сартавання
з кадра некаторыя канструкцыі Рашэнні, якія мы павінны зрабіць.
Такім чынам, давайце пачнем там.
Выкажам здагадку, што я на самой справе хацеў прадстаўляць супер найпростых
Вядома куплі інструментаў.
І самы просты свет Я магу сабе ўявіць і адзін
у якім ёсць курсы і ёсць інструктары.
І давайце выкажам здагадку дзеля абмеркавання
што кожны курс мае па крайняй меры імя.
Дык давайце пачнем эскіз гэта.
Я збіраюся выкарыстоўваць PHPMyAdmin проста для зручнасці,
такім чынам, мы не павінны ўдрукуешся усе запыты ўручную.
Але вось я ў маім courses50 базы дадзеных.
Калі не знаёмыя з гэтым, яно будзе быць вельмі лёгка, калі вы нырае
і ўласнага праекта калі вы хочаце яго выкарыстоўваць.
Я збіраюся стварыць табліца называецца Курсы
і я магу толькі думаць, аднаго поля
на дадзены момант, назва курса.
Я збіраюся ісці наперад і скажам даць мне адзін слупок.
Цяпер, як вы памятаеце, вы атрымліваеце інтэрфейс, які трохі
як гэта.
А другі з ног адкрыта з PhpMyAdmin з'яўляецца тое, што ён быццам
сама-інструктаж, і што праз выпадаючыя, вы можаце сартаваць
з даведацца, што ваш можна праектныя рашэнні з'яўляюцца.
Так што я збіраюся даць кожны курс імя.
Гэта назва гэтай калонкі.
А як наконт яго тыпу дадзеных?
Большасць з вас павінны ведаць у меры некаторыя з гэтых тыпаў дадзеных
ад папярэдняга вопыту.
Што дарэчы для назвы курсу?
Шарон?
>> Varchar.
>> ОК, VARCHAR, якія з'яўляецца зменнай Char.
А што значыць, што азначае больш тэхнічна?
[Неразборліва Заўвага]
ОК. Так што гэта радок.
І вар аспект з гэта азначае, што?
Пераменная. Але тое, што гэта значыць?
Да?
[Неразборліва Заўвага]
Менавіта так. Так што гэта зменная Колькасць знакаў
у радку ўверх да некаторай максімальнай.
Такім чынам, вось наш першы дызайнерскае рашэнне.
Мы фактычна павінны вырашыць колькі байт максімальна
вылучыць кожнаму такому радка.
Наогул кажучы, вы хочаце кшталту не рабіце гэта занадта мала,
Не рабіце гэта занадта вялікі Таму відавочна
калі занадта мала, вы проста збіраецца пачаць ўсячэння дадзеных
і вы будзеце губляць інфармацыю.
І калі ён занадта вялікі, ты проста роду кажа базу дадзеных
чакаць і аптымізацыі для атрымання дадатковай інфармацыі
чым гэта можа на самай справе калі-небудзь.
Так у чым жа разумны пачуццё лік для імя курсе?
60? Такім чынам, 60.
Гэта здаецца даволі разумным
як доўга гэта няма ніякіх выключэння, што.
Там на самай справе няма цяжка, хуткі правіла.
Калі шчыра, для гістарычныя прычыны шмат
з людзей выберуць 255 Таму на працягу многіх гадоў, які быў свайго роду
максімуму па змаўчанні з выкарыстаннем 8 байт - 8 біт, як ваш лічыльнік.
Я б больш [неразборліва] можа выкарыстоўваць ступені ліку 2,
але гэта свайго роду не мае значэння.
Так што мы можам пайсці з 60 гадоў.
Гэта здаецца разумным, пакуль
як мы ў канчатковым рахунку не шкадую аб гэтым Таму, што з'яўляецца верхняй мяжой.
Цяпер, выкажам здагадку адваротнае былі зробленыя рашэнне,
ня зменныя сімвалы, але проста поле знак.
Так у адрозненне ад C і C + +, сімвал не азначае адзін знак
і базы дадзеных, як правіла, азначае фіксаваны лік
знакаў у радку.
Што было б з ног і / або недахоп майго выбару 60
для поля CHAR, замест VARCHAR?
Гэта менавіта тое, першы выгляд рашэнні вы будзеце мець, каб зрабіць
пры праверцы [фанетычныя] з праекта са сваімі партнёрамі.
Так, Шарон зноў.
[Неразборліва Заўвага]
Добра. Так што, калі клічуць менш
чым 60, то вы дарма што б гэта ні дэльта
ад 60 да фактычная даўжыня.
Так што проста адчувае сябе марнатраўна, больш байт, чым трэба.
Але чаму яно існуе?
Напэўна ёсць некаторыя ўверх.
Да?
[Неразборліва Заўвага]
Вядома. Так што часам вы маглі б ведаць фіксаваны лік
знакаў, як 10 лічбаў для тэлефоннага нумара, напрыклад.
Але каго гэта хвалюе, як і чаму Не проста сказаць 11 у любым выпадку
ці чаму б не сказаць 60 у любым выпадку з VARCHAR?
Такім чынам, якую перавагу мы атрымліваем ведаючы і праектавання
на фіксаванае колькасць знакаў?
[Неразборліва Заўвага]
Вы знаходзіцеся на правільным шляху.
Так што гэта аптымізацыя, але гэта сапраўды з - так?
[Неразборліва Заўвага]
ОК. Добра. Давайце засяродзімся на гэтай апошняй часткі.
Так індэксацыі.
Вось і атрымліваецца, калі вы ведаць загадзя, што ўсе
з вашых палёў збіраюцца быць 60 сімвалаў,
вы сапраўды можаце думаць пра гэта слупок ў базе дадзеных Excel
як якія маюць вельмі прама, левым краі
і правы абгрунтаваныя краю
таму што кожны слупок 60 сімвалаў у шырыню.
Гэта азначае, што гэты радок 60 сімвалаў язды
з гэтага радка, 60 персанажы далёка ад гэтай
і гэты і гэты.
Так што проста хацеў вярнуцца, калі вы даведаўся C, трэба было адвольны доступ
у свеце масіваў, Тая ж ідэя тут.
Калі вашы калонкі прадстаўлена выкарыстоўваючы толькі фіксаваныя знакаў даўжынёй,
Вы можаце эфектыўна індэкс выпадкова да 60 або 120 або 180
і вы можаце атрымаць у індывідуальным парадку Радкі значна хутчэй.
Тады, калі замест гэтага, ваша калонка была прамой левы край так бы мовіць
але вельмі трывалы права краю ў калону
таму што вы можаце ёсць 10 сімвалаў,
15 сімвалаў, 5 знакаў.
Так што гэта таксама кампраміс.
А часам толькі шляхам спроб і памылак
і эксперыменты Ці можаце вы зразумець
, Што сапраўды правільным крокам гэта але гэтыя віды
пытанняў, якія павінны ісці
праз вашыя розумы і / або сталы, калі прыходзіць час
праектаваць базы дадзеных.
Такім чынам, не абавязкова прама адказаць, але вы павінны
па меншай меры, некаторыя адно або два прапановы на ўвазе
для рэзервовага капіявання, усе, што Ваша рашэнне.
Добра.
Так што давайце трымаць пракруткі у падказак тут
якія з'яўляюцца UI PHPMyAdmin аўтара.
Так, значэнне па змаўчанні для імя, я павінен паказаць
што яна павінна быць у значэнне па змаўчанні нуль?
Што вы думаеце?
Ці можа курс мець нулявы імя?
Проста адчувае сябе дзіўна, ці не так?
Я не магу думаць ні пра неназваныя курсы ў Гарвардзе.
А можа быць, ёсць нейкая цёмным куце выпадак
дзе курс прысвойваецца нумар
і прафесар не мае выбралі імя для яго, але -
Я маю на ўвазе, да чорта з гэтым,
як давайце нават не турбаваць падтрымкі, што.
Я б сказаў, у інтарэсах з добрай чыстай базы дадзеных,
давайце ўдакладнім, што вы не можаце мець значэнне па змаўчанні NULL.
З іншага боку, мы маглі б зрабіць нешта накшталт безназоўнага вядома
які не ў адрозненне ад Mac OS і Windows, зрабіць
пры стварэнні тэчку, напрыклад,
але, што робіць трохі больш сэнсу
так што чалавечы ўбачыць што-то.
Мы гаворым пра сервернай базы дадзеных, як мяркуецца,
для каталога курса.
Так што я сапраўды не нават падабаецца ідэя аддаць яго
у імёнах безыменных курсу
так што на самой справе не дапаможа нікому.
Так давайце пакінем гэта, як ніхто, Гэта азначае, што калі вы ўстаўляеце
у гэтую базу дадзеных, у вас ёсць даць кожны курс імя
які адчувае сябе крыху Ачышчальнік для мяне.
Добра.
Так пракруткі далей, сартавання.
Гэта проста трэба зрабіць з наборы знакаў і яшчэ шмат чаго
калі вы яшчэ не бачылі згадкі пра шведскім
у PhpMyAdmin гэта Таму народ
хто напісаў PHPMyAdmin былі шведскую.
Гэта PHP ці гэта MySQL?
Адзін з двух, я забыўся наўскідку.
Але гэта па гістарычных прычынах
але вы можаце выказаць кожны характар ​​на англійскай мове
што вы маглі б з шведскім так што гэта ў значнай ступені не ўяўляе сабой праблему.
CS50 Appliance хоць выкарыстоўваецца - настроены на выкарыстанне UTF-8,
так што ў цэлым павінна ня ўсплываў для вас.
Атрыбуты.
І ніхто з іх не з'яўляецца сапраўды актуальныя тут.
Я бачу Binary, знака, Без подпісы ZEROFILL,
і на абнаўленне бягучы час.
Гэта поле ўжываецца толькі на працягу некаторага лікавага поля
ці некаторыя поля часу.
Такім чынам мы будзем прапускаць што цалкам.
Null. Можа гэта поле быць пустым?
Дык не. У нас ужо ёсць такога роду размоў.
Такім чынам, мы не хочам, значэнне па змаўчанні.
Мы не хочам, каб гэта было нулявым.
А як наконт індэкса?
Там у чатыры варыянты тут.
Што гэта значыць, калі мы паказваем
што гэтая радок будзе каб быць першасным ключом?
Успамінаючы CS50 або CS165, калі вы ўзялі яго.
[Неразборліва Заўвага]
Менавіта так. Так першасны ключ па вызначэнні з'яўляецца полем
, Які адназначна ідэнтыфікуе кожны радок у гэтай табліцы.
І вы можаце разлічваць на тое, каб зрабіць што унікальны ідэнтыфікацыйны.
Так, што гэта значыць затым, каб проста быць унікальным?
Ну, накшталт гэтых двух ёсць свайго роду
з-пад наступстваў пад капотам.
Але ў цэлым, першасны ключ роду дагавора вы робіце
з рэччу базы дадзеных.
Калі я раблю запыты Шукаю вядома,
Я збіраюся выкарыстоўваць гэта прыватнасці поле.
І мы вернемся да Таму мы, магчыма, прыйдзецца два
такі выбар тут, першаснага або унікальнага.
Унікальная проста кажа, гэта поле будзе унікальным
але я на самой справе не робіць любая выгляд слоўнага прыхільнасці тут
выкарыстоўваць гэта поле зрабіць мае пошукі
па прычынах, мы гл ў імгненне.
Калі пазначыць замест азначніка, што гэта значыць пазначыць
што поле мае індэкс на ім?
Да?
[Неразборліва Заўвага]
Менавіта так. Гэта было аптымізаваны для запыту.
Такім чынам, вы - сервер базы дадзеных, Oracle, MySQL, што заўгодна,
, Як правіла, працаваць сваё чараўніцтва за кулісамі, як толькі вы націсніце
гэты варыянт, а затым націсніце Захаваць і ён будзе будаваць
да звычайна дрэвападобная структура, B-дрэвы, калі вы бачылі
ці чулі ад якога з'яўляецца вельмі кароткага гледзячы дрэва
што дае вельмі добры лагарыфмічныя ўласцівасці
пры пошуку па дадзеных.
Калі вы не пакажаце індэкс на поле, што адбываецца
быць бег Час пошуку
для адвольнага [Фанетычныя] назва курса?
Што гэта?
[Неразборліва Заўвага]
О, [неразборліва], лінейная, ці не так?
Калі няма ніякіх аптымізацый прадастаўляецца ў базе дадзеных
і вы не думалі база дадзеных, якія
дадзеных чакаць.
Лепшае, што вы можаце зрабіць, гэта праверка усё, калі вы шукаеце
пры некаторым значэнні, асабліва калі ёсць мог
на самай справе быць дублікатамі.
Паўнатэкставы тым часам, мы будзем махаем рукамі на дадзены момант.
Але ў цэлым, гэта тып індэкса, які дазваляе вам
аптымізаваць для пошукавага запыту пошук на полі.
Так што гэта можа быць добрым кандыдатам
для як апісанні курсу дзе ў вас можа быць некалькі
пунктаў і вы, магчыма, хачу зрабіць падрадкоў.
Паўнатэкставы звычайна хай Вы робіце гэта досыць эфектыўна.
А.І., гэта жудасна роду тлумачэнні, але калі мы навядзем
над ім вы ўбачыце Аўтаматычнае прырашчэнне.
Не ўжываецца і тут, але аўтаматычнае прырашчэнне карысна
для як поле цэлалікавых, таму што база дадзеных будзе клапаціцца
працэсу плюс plusing кожны раз, калі вы рабіць ўстаўкі.
Так што нават калі два чалавекі літаральна націсніце кнопку Адправіць
у той жа час і паспрабаваць для стварэння радкі неяк
ў базе дадзеных, адзін з іх атрымае нумар I,
іншы атрымаеце лік я плюс 1.
Вы не павінны турбавацца
каля двух лікаў, якія з'яўляюцца прызначаны аднолькава, калі вы былі
зрабіць гэта самастойна ў кодзе.
Добра.
Так што я накшталт як, дзе у нас ёсць імя, каб быць.
Так што давайце націсніце кнопку Захаваць.
Гэта добры дызайн для табліцы базы дадзеных?
І, як у бок, калі іржавы на SQL ці вы як бы
проста заўсёды зачыняць вочы на ​​тое, што адбываецца,
Я мог бы надрукаваць менавіта гэта -
гэтыя тры лініі на што чорна-белы хуткае
у камандным радку кліент ці я мог бы зрабіць
што ў кодзе праграмна.
Так што ўсё PHPMyAdmin робіць для мяне, проста ратуючы мяне намаганні
запамінання часам Сінтаксіс і увёўшы для
як стомных каманд.
Добра.
Так што гэта не адчувае, як лепшы дызайн, адзін стол поле.
Цяпер мы маглі б мець рэчы, як прафесараў
і месцы і апісання.
Але нават тады, выкарыстоўваючы толькі імя
вызначыць курсы не адчувае сябе ідэальна.
Што, як правіла, мы зрабілі ў мінулым
калі вы выкарыстоўвалі базы дадзеных каб адназначна радкоў?
Не выкарыстоўваючы VARCHARS звычайна.
Да?
[Неразборліва Заўвага]
Так. Так звычайна курс ID.
Так, найбольш распаўсюджанымі падыходзіць тут асабліва
Пры выкарыстанні базы на самай справе проста
выкарыстоўваць шэраг як цэлы лік.
Такім чынам, дазвольце мне ісці наперад і рабіць гэта.
І мы можам зрабіць гэта ў некалькі спосабы, але апавяшчэнне, калі я павялічыць
у на дне тут.
Я збіраюся сказаць, дадайце адзін слупкі ў канцы табліцы,
як правіла, толькі для візуальнага зручнасць вы паклалі ідэнтыфікатары
ў пачатку табліцы хоць гэта не мае рэальнага
функцыянальнае ўздзеянне.
Так што я збіраюся сказаць, дадаць адзін слупкі
ў пачатку табліцы.
Я збіраюся націсніце Перайсці, што дае мне назад гэты інтэрфейс тут.
Давайце назавем гэты ідэнтыфікатар.
Калі мы думаем, што будзем мець не больш робіцца 4000000 курсы
поле цэлалікавых з'яўляецца добра.
Мы маглі б нават паменшыць яго
але прастора танна дык хто сапраўды клапоціцца.
Але, мы спрабуем напісаць Facebook зараз,
можа быць не так ужо дрэнна прадбачыць вялікія цэлымі
якая дасць нам 64-разрадных цэлых колькасці
але тады вы літаральна падваенне колькасці бітаў
што вы карыстаецеся, настолькі нязначныя кампраміс
але нешта разгледзець.
Цяпер, гэта збівае з толку Спадчына рэч.
Вы можаце ўспомніць ад выкарыстання MySQL
што ў любы час вы аб'яўляеце Int поле вы часта будзеце бачыць шэраг
побач з ім, як ліку 10.
Гэта не мае нічога агульнага з Памер з ліку
альбо лічбу бітаў.
Гэта звязана з лікам знакаў, якія выкарыстоўваюцца
візуальна дысплей што унутр поле
пры выкарыстанні акно тэрмінала.
Такім чынам, мы бачым, што ў адзін момант.
Так, не ўводзіць у зман , Набраўшы лічбы
там хоць гэта эфектыўна пытаючыся нас
для аднаго тут.
Сюды, я збіраюся ісці наперад і сказаць, без знака.
Там няма падстаў адходаў ўсе нашы адмоўных лікаў
паколькі база дадзеных , Як правіла, адбываецца
выказаць здагадку станоўчы значэння ці нуль.
ID вызначана не павінна быць пустым.
А што вы думаеце пра індэкс для гэтага поля ідэнтыфікатара?
Давайце зробім гэта першасна.
Так, што, калі, тым не менш, як я магу толькі думаць аб адным CS164 вядома
ў Гарвардзе і толькі адзін CS50 Вядома ў Гарвардзе
і гэта даволі ступені дакладна ў цэлым
што ёсць, можа быць, выключэння [Неразборліва] абодва семестра
ці нешта дзіўнае ў гэтым родзе.
Але што больш важна, чаму гэта лепш
выкарыстоўваць лічбавую інтэгральную ідэнтыфікатар адназначна ідэнтыфікаваць курсы, а
чым проста унікальная радок?
Да?
[Неразборліва Заўвага]
Добра, цікава.
Так што, калі ў нас быў свайго роду крос-пералічаных курсаў.
Так што гэта добры прыклад.
Я не ўпэўнены, я б вырашыць, што, хоць
, Даючы ім тое ж самае Ідэнтыфікатар калі гэта
куды вы ішлі з гэтым.
Няма? ОК. Але, безумоўна, кут выпадак разгледзець.
Калі ёсць свайго роду - нам патрэбна нейкая
альясинга патэнцыйна.
[Неразборліва Заўвага]
Вядома.
[Неразборліва Заўвага]
Вось добры прыклад.
Назва можа мяняцца з цягам Час, цалкам разумна.
Што яшчэ?
[Неразборліва Заўвага]
На жаль, яшчэ раз кажу.
[Неразборліва Заўвага]
Так, менавіта так.
Так на самай справе, гэта рэальны довад з'яўляецца
што выкарыстанне 32-разраднай Int з'яўляецца верагодна, будзе хутчэй
чым які-небудзь зменнай Даўжыня сімвал поле.
У першым выпадку, банка літаральна упісацца ў рэестр,
не кажучы ўжо пра значна менш аб'ём памяці.
У апошнім выпадку, вы будзеце мець, каб зрабіць курорт [фанетычныя]
у параўнанні радкоў, якія самі па сабе з лінейнай
у памеры радок патэнцыйна.
Такім чынам, гэта проста добры аптымізацыя,
і, у прыватнасці, што гэта збіраецца
каб паведаміць нам рабіць тое, што называюць Гуляючы больш эфектыўна
праз хвіліну.
Так давайце зробім гэта.
Мы будзем паказаць, што гэта першасная
таму што я не асабліва хочуць клапаціцца або думаць
аб тым, што колькасць з'яўляецца курса.
Хай яны бяруць на ўсе каштоўнасці, якія яны хочуць.
Я збіраюся сказаць Автоинкремент так што я магу аўтсорсінг, што дэталь.
Як і ў бок, вы маглі б ведаю, што Гарвард
па меншай меры, мае унікальны нумары для гольфа.
Я не памятаю Што гэта курсы ёсць.
Я ведаю, што CS50'S нумар па каталогу з'яўляецца 4949,
цалкам адвольна.
Але ёсць дзіўна вуглавыя выпадкі ў тым, што нават
у registrarial звалцы вядома дадзеных каталога,
часам курсы, старыя курсы маюць шэраг як 4.
Але тэхнічна, што з'яўляецца полем сімвал
што проста пачынаецца з 0004.
Так і тут, вы павінны быць асцярожныя адрознівання
паміж рэчамі, як Вядома нумар па каталогу
якія, магчыма, некаторыя чалавечыя Паняцце фіксаванай даўжыні, 0004,
і вы не павінны захоўваць што, напрыклад, у якасці цэлых лікаў.
Такога роду поля павінны захоўваць у іншым месцы.
Такім чынам, у Гарвардзе, калі б мы былі на самай справе робіць курс
гандлёвы інструмент, гэта верагодна, не дастаткова
для нумарацыі курсаў толькі з 1, 2, 3, 4.
Мы, верагодна, будзем мець
мець іншае поле называецца нумар па каталогу,
, Які таксама мяркуецца быць унікальным аснове
на чалавека канвенцый тут але гэта не самы лепшы выбар
для унікальнага ідэнтыфікатара, таму што гэта можа быць зменнай даўжыні.
Гэта можа быць не чатыры сімвалы, гэта можа быць пяць.
На самай справе, я думаю, што некаторыя з іх гадоў назад яны рухаюцца
да справы пяці персанажаў там былі больш 999 курсаў
цалкам ці нешта ў гэтым родзе што або 9999 курсы.
Такім чынам, гэта можа быць прыкладам дзе поле не з'яўляецца першасным
але ён павінен быць унікальным.
І адрас электроннай пошты яшчэ адзін.
Магчыма, вы захочаце, каб гэта было ўнікальнае
але не абавязкова ваш першасны ключ.
Добра.
Такім чынам, дазвольце мне штабнаваць іншы Табліца значна хутчэй, чым гэты.
Так што я буду называць гэта адзін Інструктары і я збіраюся
даць гэтаму ў агульнай лік слупкоў двух.
Я збіраюся даведацца мой ўрок з мінулага разу.
Я збіраюся патэлефанаваць першы слупок ID.
Я збіраюся патэлефанаваць Другі слупок Імя.
Я таксама збіраюся рабіць Varchar.
Я буду лічыць, няма прафесар мае імя больш
чым 60 сімвалаў, хоць Зараз гэта можа быць націснуўшы на яе
пры гэтым некаторыя доўгія імёны, спецыяльныя людзі з імя па бацьку.
Гэта добра для сённяшняга дня.
Так што давайце пракруткі тут.
Давайце зробім гэта без знака зноў.
Давайце зробім гэты першасны.
І мы дазволім паўтараюцца імёны
у выпадку, калі два Джон Сміт ці нешта накшталт гэтага.
І зараз у нас ёсць дзве табліцы.
Так што цяпер, гэта напрошваецца пытанне як я магу звязаць
у інструктара з курсам?
Я адчуваю, што я як бы атрымаў наперадзе сябе
таму што, калі інструктар выкладае курс,
мой першы інстынкт будзе на самай справе ў тым, каб вярнуцца
каб курсы разумеюць, гэта не было добрай ідэяй.
Дазвольце мне на самай справе дадаць адзін слупок ў канцы табліцы,
націсніце кнопку Перайсці, і я буду называюць гэты інструктар.
І я зраблю гэта VARCHAR і я зраблю гэта 60.
А можа быць, я пакіну яго нулявым зараз
у выпадку, калі курс мае не быў без знака ў інструктара
якія часам адбываецца да Тэрмін пачынаецца і націсніце Захаваць.
Які з гэтых канструкцый Вы аддаеце перавагу?
Спачатку адзін, дзе ў нас ёсць Табліца асобны інструктара
ці другі, дзе мы проста дадаць поле падчас?
Так што гэта цесна звязаць Інструктар з курсу.
[Неразборліва Заўвага]
ОК. Добра. Але дазвольце мне адсунуць.
Гэта проста так проста, як я магу проста ўвядзіце імя чалавека
ў гэтай табліцы, як, безумоўна, што мае пэўную каштоўнасць або -?
[Неразборліва Заўвага]
Добра.
Ну, дазвольце мне быць цяжка тут.
Такім чынам, дазвольце мне сказаць, што гэты курс CS51
і я ведаю, што гэта вучыў у гэтым годзе два чалавекі.
Так, Генры Лейтнер і Джэсі Тав але -
так што я проста паставіць коску паміж імі, ў парадку.
Я вельмі добра CSV ад мінулых гадоў.
[Неразборліва Заўвага]
Дакладна, дакладна.
Як толькі вы звяртаецца нешта накшталт гэтага,
якія маглі б адчуваць сябе разумныя, і вы маглі б адчуваць сябе
як гэта накшталт разумны.
Я свайго роду запазычанні адзін ідэя, якая працуе добра,
пазычаць новыя ідэі і роду аб'яднаць іх.
Ты накшталт цалкам перамагчы кропка з выкарыстаннем базы дадзеных
у справу першую чаргу ' калі адно з значэнняў
выкарыстання гэта хутчэй вынікі з-за розных індэксаў
і табліц, якія могуць быць пабудавана для вас
самім ядром базы дадзеных.
Цяпер, калі вы хочаце знайсці для ўсіх курсаў
што Джэсі вучыць, зараз у вас ёсць каб у знойдзенага на ўсіх
палёў інструктара,
які фактычна азначае лінейную пошук зноў, таму што ты ёсць
каб знайсці гэты адвольны набор з трох персанажаў у любым месцы
ў галіне інструктарам папярэднічае
ў магчыма з наступным коскі.
Так што гэта, безумоўна, не абяцае нічога добрага.
Такім чынам, дазвольце мне вярнуцца да стала.
Дазвольце мне ісці наперад, каб курсы, адмяніць гэта.
Я збіраюся проста пайсці наперад і падзенне гэта поле.
І калі вы хочаце, каб зрабіць гэта ўручную,
сінтаксіс ALTER TABLE курсы DROP інструктара.
Так што давайце ісці наперад і сказаў, ды да таго.
І вярнуцца да гэтай больш ранняй ідэі
дзе ў мяне ёсць асобны стол для выкладчыкаў.
Але цяпер гэтая адчувае сябе крыху як я магу паставіць курс
ў табліцы ходзе аўтара і інструктар
ў табліцы інструктара, але я неяк трэба звязаць два.
І як бы вы прапануем мы гэта робім?
[Неразборліва Заўвага]
Добра. Так давайце зробім гэта.
І вы маглі б назваць гэта Табліца ў тэорыі нічога.
Я збіраюся наўмысна называйце гэта як шмат
рамак будзе называць яго, у тым ліку,
Laravel як вы ўбачыце ў няшмат.
Я буду называць яго курс падкрэсліваюць інструктара.
Выкарыстанне адзіным у гэтым месца для кожнага з слоў
і ў ніжнім рэгістры зноў, а таксама з -
затым у алфавітным парадку сартуюцца злева направа.
Гэта цалкам адвольна, але ён мае тэндэнцыю быць пагадненне
ў вялікай колькасці гэтых структур у PHP на іншых мовах.
Колькі калонкі мне трэба ў Гэта тое, што мы называем далучыцца стол,
далучыцца два іншых сталы разам?
Тры калоны?
Які з іх - што б яны былі?
[Неразборліва Заўвага]
ОК. Добра. Гэта працуе.
І мы маглі б тэхнічна скараціць кут тут, але шмат
рамак, у прыватнасці ўсё яшчэ даў бы нават гэтыя радкі
унікальныя ідэнтыфікатары, нават калі семантычна радок
што мы сапраўды клапоцімся аб або слупкі, што мы сапраўды клапоцяцца
пра якія апошнія два з што вы сказалі, курс ID
і інструктар ID.
Так давайце зробім гэта.
Я пазваню гэты радок проста ID, гэтак жа, як мы рабілі раней.
Але гэты я збіраюся патэлефанаваць курсу ID.
Гэта адзін я збіраюся патэлефанаваць інструктара ID.
І я збіраюся паказаць, што ўсе
з іх без знака Таму што я хачу
каб дасягнуць максімальнай 4 млрд. унутр дыяпазон.
Ніхто з іх не павінен быць пустым.
Я збіраюся паказаць, што ID ўсё роўна павінны быць першаснымі.
І зноў жа, гэта проста пагадненне,
шмат межаў нават калі вы не сартаваць
прынцыпова трэба унікальны ідэнтыфікатар для радкі,
аказваецца, гэта зручна для код, SQL, што адбываецца
быць аўтаматычна генеруецца для нас.
Так што я пакіну гэта першасны.
Але цяпер, я як бы ёсць праектнае рашэнне,
Вядома ID і інструктар ID.
Што індэксы, калі любы яны павінны атрымаць?
Калі б я не пакіну ні аднаго індэксы, у чым сэнс?
Што маецца на ўвазе?
Прадукцыйнасць, як і раней, ці не так?
Калі няма індэкс, тым Лепшае, што вы можаце зрабіць, гэта свайго роду
з [неразборліва] праз Усё гэта шукаеце лікаў.
Так што не адчувае сябе разумным.
Ці павінна яна быць першасным?
Дык чаму б і не?
Чаму б не асноўная?
[Неразборліва Заўвага]
Выдатна. Так мы коцімся з [фанетычныя] першаснага.
Мы ўжо выбралі, што.
Так, яна павінна быць унікальным?
[Неразборліва Заўвага]
Добра. Так што, калі вы мяркуеце, адзін інструктар на курс,
цалкам нармальна.
І гэта, безумоўна, агульны выпадак
але мы ўжо адклалі адзін магчыма, знаёмы прыклад.
CS51 атрымаў два інструктараў так мы накшталт
На сённяшні дзень ўшрубоўваецца ў гэтым выпадку.
Калі б мы зрабілі толькі дазволіць адзін інструктар,
мы маглі на самай справе спосаб з цалкам далучыцца стол,
вярнуцца да раней падыходу
і паставіць не імя чалавека магчыма, але інструктара ID.
Калі вы ведаеце, кожны курс, як толькі адзін інструктар вы можаце мець толькі
адзін слупок.
Але зменлівасць што уцягнуў нас у бядзе.
Добра.
Так, яна павінна быць унікальным?
Кол Поўны тэкст не адчуваю дастасавальна.
Як раней мы сказалі, што гэта
для як падрадка адпаведнасці для апісання.
Так што пра індэкс?
Ну, індэкс, верагодна, наш лепшы кандыдат
які кажа MySQL аптымізаваць пры пошуку па гэтых
або дайце мне распрацаваць, аптымізацыі для пошуку або далучаецца
як мы ўбачым праз хвіліну
так, каб яны трохі больш эфектыўным
чым усе чыста лінейнай.
Я хачу аўто Ёсць павялічвае гэта поле?
Дык не, таму што праўда бацькоўскі элемент існуе
ў табліцы курсаў.
Вось дзе гэта збіраецца атрымаць плюс,
плюс, калі гэта на самай справе ўстаўляецца.
Вось, гэта ўсё адбываецца быць устаўлены ўручную
намі як мяркуецца, у кодзе.
Так што давайце проста паказаць што абодва Вядома ID
і інструктар ID маюць індэксы.
Цяпер мы будзем ісці наперад і захаваць.
А цяпер, проста каб паказаць, Вы адпаведнасць
між тым, што добры GUI інтэрфейс
і інтэрфейс каманднага радка.
Дазвольце мне ісці наперад і рабіць наступнае ў гэтым радку MySQL.
Я збіраюся сказаць, выкарыстанне courses50
які з'яўляецца адвольнае імя Я даў да гэтай базы дадзеных.
І зараз, я нават не памятаеце, што мы зрабілі.
Такім чынам, дазвольце мне Паказваць сталы
і наогул з коскі будзе вашым сябрам тут
завяршыць запыт.
І там гэта.
Дык вось радкі або, хутчэй, сталы, якія мы маем тут.
Зараз, я забыўся, што Вядома выглядае,
так зраблю, апісваюць і цяпер я бачу роду ў ASCII
або версія таго, што PHPMyAdmin рабіў
і я бачу, што ідэнтыфікатар унутр.
Існуе, што 10.
Што гэта значыць?
Гэта проста азначае, што, калі гэта адлюстроўваецца ён збіраецца прыняць
да 10 знакаў на акно тэрмінала.
Гэта обнулять?
Не, гэта першасны ключ.
Ці можна мець значэнне па змаўчанні?
Кол-І дадатковы, які з'яўляецца спецыяльным сцягі, як аўтаматычнае прырашчэнне.
Так што давайце проста зрабіць пару з хуткіх ўстаўкі тут.
Я збіраюся пайсці ўверх да - давайце проста скажам,.
Давайце зменім стан да слайдаў
дзе я накшталт папярэдне падрыхтаваць гэта.
Гэта рэзюмэ затым ўсе тры з гэтых табліц.
Я ўжо проста ўручную набралі першую каманду.
І тут, я пайшоў наперад і увядзіце іншым для вас.
Гэта толькі стылістычная рэч.
Як правіла, шмат людзей увядзіце заявы SQL загалоўнымі літарамі
а затым імёны табліц і імёны палёў у ніжнім рэгістры,
хоць бы таму, выгляд стэндаў
, Што ваш тэрміналогія а што сінтаксіс базы дадзеных.
Так вось у нас ёсць тры сталы, курсы, выкладчыкі,
і курсы інструктараў.
На слайдзе я зрабіў загадзя, У мяне не было на поле ID
але гэта не на самай справе дрэнна на ўсіх.
Мы хацелі проста паглядзець Трэцяя калонка ёсць.
Калі б я зрабіў, што тут?
Так што цяпер дазвольце мне выказаць здагадку, што мы робім кучу уставак.
Такім чынам, вось некаторыя дадзеныя, Я павелічэння маштабу
Так што я збіраюся прапанаваць што ў курсах,
Мы маем справу толькі з трыма стравамі.
І я выбраў гэтыя тры Таму што яны прадстаўніком
з некаторых добрых - у іх ёсць некаторыя добрыя ўласцівасці.
CS1, CS50, CS51, яны ёсць якія растуць ідэнтыфікатары
але тое, што ID гэта тое, што не маюць ніякага значэння.
Вось толькі парадак, у якім яны былі аўто устаўлены мной.
Як наконт інструктараў?
Так што цяпер, таму што Генры Лейтнер вучыць як CS1 і CS51,
гэта накшталт як нельга дарэчы наступствы для нашага праекта.
І Джэсі вучыць CS51 і Малан вучыць CS50.
Так што цяпер - ці, хутчэй, гэта за ўсё унікальныя ідэнтыфікатары тых людзей.
І курсы і выкладчыкаў, - курс інструктараў, заўважыць тут.
Курс ID1, якія быў CS1 выкладаецца
інструктарам ID1 хто Генры.
Курс ID2, які я думаю было CS50 выкладаецца
інструктарам ID2, што Малан.
А потым, нарэшце, CS51, і Заўважце, што мы маем два шэрагу.
І зараз менавіта таму далучыцца табліца з'яўляецца магутным выкладаецца
абодвума Генры і Джэсі.
Так што гэта ўсё цудоўна,
але я магу ледзь памятаю з верхняй
з маёй галавы, хто ёсць хто тут.
Як вы, магчыма, мець справу з гэтым у кодзе,
без неабходнасці жорсткія код рэчы?
Ну, гэта дзе сам SQL пачынае станавіцца нашым сябрам.
І я збіраюся прапанаваць, каб мы можам ўвесці наступнае.
Я зраблю гэта ў ў фактычнае запрашэнне.
Дазвольце мне ісці наперад і ўставіць гэтыя рэчы.
Так, у табліцу курсаў давайце рабіць тое, што ў нас было
Хвіліну таму.
Я збіраюся наперад і сказаць, давайце ўставіць CS1 і CS50.
Давайце ўставіць яшчэ некалькі радкоў адразу, CS51.
Зараз, дазвольце мне ісці наперад і захаваць.
Добра, так што я проста аднаўлення так хутка,
як я магу адносіны мы толькі што бачылі на экране.
І так тут мы маем Лейтнер, тут мы маем Malan.
Давайце дамо сябе іншы шэраг, і Тав.
Цяпер дазвольце мне захаваць гэта.
І я раблю іх свядома у тым жа парадку.
Не, я забыўся даць гэта аўтаматычнае прырашчэнне.
Дазвольце мне хутка гэта выправіць.
Я выправіць гэта ў онлайн код.
Гэта не атрымалася, як у бок.
Той факт, што я не мог ўставіць Лейтнер і Malan
і Тоў не ўдалося, таму што я не зрабіў пазначыць ідэнтыфікацыйны нумар, хоць
гэта чакае адзін, і я забыўся праверыць Автоинкремент,
што азначае, што яны былі ўсе па змаўчанні становіцца роўным нулю.
Але што тады супярэчыць якія ўласцівасць, якое мы паказалі.
Першасны ключ быў парушаны так што нават не дазвольце мне зрабіць гэта.
Такім чынам, дазвольце мне выправіць гэта.
Зараз, дазвольце мне вярнуцца да На ўкладцы Устаўка тут і пакажыце
што я хачу Лейтнер, Malan і, што больш аднаго радка, Тав.
І цяпер, нарэшце, толькі той, які трохі цяжка
памятаць, вядома інструктар.
Давайце ўставіць цяпер, Вядома ID1 з'яўляецца інструктарам ID1
так вось CS1 і Генры.
Курс ИД2 з'яўляецца інструктарам ID2 які CS50 і Малан.
А потым у апошнюю чаргу мы маем турбавацца аб тым, вядома ID3
які з'яўляецца CS51, выкладаецца
на курс інструктара 1, што Генры.
І тры, як вучыў на 3, які з'яўляецца Тав.
Так што, спадзяюся цяпер мы аднавілі гэты -
чорт вазьмі, я зрабіў тое ж самае.
Інструктар курсу мае патрэбу Автоинкремент.
Добра.
Я зраблю гэта хутчэй на гэты раз, маршрут № 1, маршрут № 1, 2, 2.
І цяпер, нарэшце, мы робім CS51 які мае курс ID3 і Генры.
І вядома ID3 і Джэсі.
Гэта выглядае добра.
ОК. Так што цяпер, давайце вернемся у акне тэрмінала.
Так што, калі я апісваю курсы мы ўбачым гэта.
Калі я хачу бачыць курсы, што магу Цяпер зрабіць выбар зорку з курсаў,
Кропка з коскі, а цяпер мы бачым гэтыя каштоўнасці.
А цяпер, што яшчэ я хачу зрабіць?
Выберыце зорку з інструктараў, вось як я чакаў,
і абярыце зорку з курсаў - Вядома падкрэслення інструктар.
Так як жа я цяпер далучыцца гэтыя табліцы?
Так прыгажосць выбраўшы значэнні ID ў гэтым выпадку з'яўляецца
што калі вы думаеце пра прымаючы табліцу курсаў
і інструктар стол і затым ўставіць
паміж гэтымі двума ў вашым розумы інструктар Вядома
Табліца вы можаце роду лінія да ўсіх гэтых слупкоў ID
так што вы аб'яднаеце іх у адной масіўнай калона, якая мае ўсе
інфармацыі мы клапоцімся аб.
Сінтаксіс SQL для гэтага не абавязкова відавочна,
але давайце паглядзім, калі мы можам зрабіць гэта.
Так абярыце зорка з курсаў,
і ёсць некалькі спосабаў як мы можам зрабіць гэта.
Я збіраюся націсніце Увод проста выгляд фармату рэчаў прыгожа,
але, што стрэлка знаходзіцца ўсяго ў сімптом баку кліента інструмента,
гэта не мае ніякага дачынення рабіць з самага SQL.
Так абярыце зорка з курсаў.
Я збіраюся зараз далучыцца табліца курсы
на стале, вядома інструктара.
Як? На полі пад назвай courses.id зраўнаваўся Вядома
падкрэсліваюць інструктара кропка як называецца
з адпаведнага поля вось што я хачу пару.
Гэта не ID.
It's - што, прабачце?
>> ID курса.
Добра, давайце я змяншэння.
Але я хачу, каб узяць гэта яшчэ адзін крок наперад.
Я зараз зрабіў гэта табліца і гэты.
Цяпер я хачу, каб выцягнуць гэты хлопец у а.
Так, дазвольце мне далей далучыцца усё гэта справа
на інструктара стол на што?
Курс падкрэслення instructor.instructor ID
зраўнаваўся instructors.id.
Такім чынам, мы маглі б напісаць гэты запыт у некалькіх напрамках.
Парадак, у якім я зрабіў гэта не ўсё, што важна.
Я толькі збольшага зрабіў гэта ў мой розум злева направа.
Мы маглі б зрабіць гэта ў некалькі розных спосабаў
але калі ў мяне зараз ёсць Кропка з коскі і націсніце Enter,
Заўважце, што я вярнуся новы часовая табліца, выніковы набор
так сказаць у кажуць базы дадзеных.
І што ў мяне ёсць у гэтай рэчы?
У мяне ёсць на ID, імя, іншы ID, які накшталт заблытанай
мне на дадзены момант, Вядома ID,
інструктарам ID, ID, і імя.
Так, у канцы дня у нас ёсць патрэбныя дадзеныя цяпер.
Я бачу, што CS1 выкладаецца па Leitner, CS51 выкладаецца
па Leitner і Това, і CS50 выкладаюць Малання.
Але я крыху заклапочаны гэтая двухсэнсоўнасць я стварыў.
Што неадназначнасць Я намякаючы на?
Да?
[Неразборліва Заўвага]
Там у тры калонкі ID.
Так што мы можам на самай справе гэта выправіць і мы збіраемся на самай справе адбываецца
адкласці да нашай рамках у канчатковым рахунку, каб дапамагчы нам у гэтым,
але аказваецца, што ёсць ключавое слова ў SQL называецца S,
дзе вы можаце задаць псеўданім, новае імя для поля
так што мы можам пазбегнуць гэтага Неадназначнасць ў цэлым.
Але зразумеў, што калі мы не будзем яе вырашэння так ці інакш, як з
што ключавое слова або рамкі,
ёсць патэнцыйна гэта двухсэнсоўнасць, калі вы паспрабуеце
для доступу да поля ID таму што ясна ёсць тыя,
з аднолькавымі імёнамі там.
Так што гэта далучыцца і я думаю, у вашым уяўленні лепшы спосаб
думаць пра гэта сапраўды гэта ўзяць дзве табліцы,
выбудаваць іх у так, што вы хочаце.
І гэта так званы ўнутранае злучэнне ў тым сэнсе,
што мы спалучаючы сталы тут.
Ёсць і іншыя віды далучаецца, што мы маглі б сутыкнуцца
з цягам часу, як знешнія злучэння,
але па большай частцы гэтай Верагодна, найбольш распаўсюджаным
для аднаўлення дадзеных.
Тое, што мы зрабілі зараз як правіла, тое, што называецца
нармалізацыі дадзеных, так што няма дублявання ў любым месцы
у табліцах.
І дубляваннем, я б прывялі да таго, што першы падыход.
Калі мы згадалі Лейтнер і Тоў ў некалькіх месцах
ў базе дадзеных, гэта не як правіла, лепшае рашэнне
асабліва калі іх імя можа змяніць звышурочна або ў выпадку
шлюбу, дзявочае прозвішча моцы змяніць сябе вы проста хочаце адзін
кананічнае месца для некаторых значэнне дадзеных як імя.
Добра.
Такім чынам, каб рэзюмаваць, мы мелі некалькі дызайнерскіх рашэнняў, каб зрабіць
і найбольш важныя з іх верагодна, зводзіцца да некаторых
з гэтых варыянтаў індэксаў.
Але дазвольце мне адзначыць, адна рэч, а таксама.
Калі я вяртаюся ў PhpMyAdmin,
адна асаблівасць вы не маглі б сутыкнуліся перад ёсць
наступнае.
Калі я іду ў курс інструктара, Я ўжо зрабіў паказаць, што некаторыя
вось пра што індэксы.
Але дазвольце мне перайсці да структуры Ўкладка вядома інструктара.
Дазвольце мне цяпер націсніце на індэксаў і звярніце ўвагу на наступнае.
Я паказаў тут ёсць першасны ключ
ў Стоўбцах пад назвай ID.
Гэта некалькі складаней спосаб задання магутнасць
і гэтак далей, як са спасылкай на памер вобласці ў байтах.
Але зараз у мяне ёсць яшчэ адзін поле, вядома ID, які з'яўляецца -
Вядома ID, які робіцца загадзя і унікальным, ОК.
Я зрабіў гэта адзін у прасоўвання для нас.
Такім чынам, чаму ж гэта - дайце мне ўпасці гэта дзеля абмеркавання.
Ой, вы ведаеце, што я зрабіў?
ОК. Так, раней, адным з Небяспекі выкарыстоўваючы інструмент з графічным інтэрфейсам
як гэта, калі мы былі Стварэнне гэтага злучэння табліцу,
інструктар табліцы Вядома, Нагадаем, што я ўказаў
што я хачу індэкс на гэтым полі
і індэкс на гэты іншай вобласці.
Пабочны эфект праверкі абодвух гэтых скрынках
на тым жа экране ў тым, што PHPMYADMIN выведзеныя з гэтага,
што я хачу не два асобныя індэксы,
што я хачу злучаны індэкс, які , Як правіла, толькі карысна
або найбольш карысна, калі вы пошук у не адно поле
але абодва гэтых палёў.
І менавіта таму мы павінны былі іх злучыць ёсць
так што я кінуў яе, таму што не тое, што я меў намер.
Хутчэй, я збіраюся перарабляць гэта тут.
Я збіраюся пайсці ў курсавой ID
і пад больш я проста хачу сказаць, дадаць індэкс.
І я збіраюся пайсці пад Інструктар ID і сказаць дадаць індэкс.
І зараз, калі мы націсніце тут, Заўважце, што мы маем тры індэксы,
адзін першасны і, як я прызначаныя адным для кожнага
з тых знешніх ключоў.
І я называю гэта знешняя, таму што Вядома ID ў гэтай табліцы карт
у якой вобласці, абы быць ачысціць, у іншай табліцы.
Першасны ключ называецца ID, ў табліцы называецца курсы,
і тое ж самае прапанову на іншы.
Але цяпер, з'яўляецца цікавым падмануць і сапраўды тэхніка.
Я проста пайшоў наперад, і хай мне зрабіць гэта крыху больш павольна.
У тым жа экране, апавяшчэнне ён кажа выгляд сувязь тут.
Я націскаю гэта і цяпер заўважце, што я атрымаць, каб зрабіць некалькі абмежаванняў.
Так, адзін з верху таксама
не толькі з дапамогай канцэптуальна знешнія ключы і іншыя сталы
як мы толькі што на гэта што шляхам вызначэння індэкса
на іх вы можаце мець дапамогу база дадзеных яшчэ больш
забеспячэння цэласнасці з гэтай галіне.
У прыватнасці, я магу зараз паказаць з дапамогай гэтага падзення
ўніз, што поле Вядома ID
у гэтай табліцы на самай справе карты на courses.id.
Аналагічна, інструктарам падкрэслення ID адлюстроўваецца на instructors.id.
Цяпер, чаму гэта карысна?
Ну, звярніце ўвагу, справа бок, што, здаецца цяпер.
Цяпер я магу навучыць База дадзеных, калі Генры
напрыклад калі-небудзь пенсію і яго радок знікае
са стала выкладчыка наогул, такім чынам, быць
выдалены, я магу праз гэта каскадныя падыход забеспячэння
што любыя курсы ён вучыць з'яўляюцца больш не звязаны з ім.
Я магу навучыць базу дадзеных выдаліць радкі
ў гэтай так званай злучальнай табліцы аўтаматычна, калі Генры або калі адзін
з яго курсаў знікае.
Цяпер, чаму гэта пераканаўчым?
Да?
[Неразборліва Заўвага]
Вы толькі павінны зрабіць гэта адзін раз і доўгатэрміновай перспектыве, ці не так?
Гэта вельмі лёгка, калі выгляд людзі прыходзяць і сыходзяць, курсы прыходзяць
і сыходзяць, ваша база дадзеных можа проста засмечваюцца курсаў
не й з выкладчыкамі, якія ня больш стаўленне да набору дадзеных.
І вашы дадзеныя пачынае атрымліваць вельмі брудны і брудны, і чэрствы,
і вось мы можам сартаваць
з захавання некаторых гэтыя абмежаванні.
Да?
[Неразборліва Заўвага]
Яна ведае, шляхам гэта.
Гэта экран, дзе мы паказаўшы сувязь
паміж знешнім ключом і першасны ключ.
Так што ўсё наймення канвенцый я спасылаўся
раней ўсяго толькі канвенцый.
Там няма ўласціва значэнне.
Гэта экран якая мае сэнс толькі
пасля вызначэння індэксы кожнай з гэтых абласцей, як мы зрабілі.
І для гэтага ў выпадальным акне ў нас ёсць некалькі рэчаў, напрыклад
калі курс будзе выдалены вы можаце фактычна прадухіліць, што выдаленне
не здарылася, калі ёсць з'яўляецца радок у гэтай табліцы
, Проста кажучы, Абмежаваць.
Іншымі словамі Генры не можа сысці ў адстаўку
пакуль мы не адлучыць яго ад CS51 і CS1.
Так што гэта добрая рэч.
Але гэта можа справакаваць памылкі ў кодзе
калі вы не чакаем, што, ці мы можам мець каскад,
каскад падобны на падабаецца каскадируемые табліцы стыляў
і каскадных Вадаспад азначае, што калі -
калі Генры сыходзіць так - шляхам атрымліваць выдалены
так будзе яго радок тут выдаляюцца.
Ніякіх дзеянняў не азначае нічога ці нуль гэта свайго роду карысна, калі вы выгляд
ад таго, хочаце некаторы гістарычны рэкорд Генры вучыў CS51,
але вы проста хочаце гэта поле нулявым так, што радкі там
але гэта не больш звязаны з ім.
Так што гэта вельмі магутны метады, якія вы можаце
і павінны выкарыстоўваць хоць у цікавасць, у прыватнасці
з пазбаўляючы вас ад сябе.
Такім чынам, дазвольце мне згадваць Пару апошніх дэталяў тут,
інгрэдыенты, з якімі што можа быць карысным
як мы плануем для праектавання баз дадзеных.
У вас таксама ёсць выбар над рухавіком базы дадзеных
што вы выкарыстоўваеце ў кодзе.
Калі вы знаёмыя з CS161 вы маглі б -
ці нават 61, вы, магчыма, як правіла, быць знаёмыя з файлавымі сістэмамі.
І ёсць рэчы як, NTFS і HFS +
і X2FS4 [фанетычныя] і 3 і гэтак далей.
Там у розных спосабаў захоўвання дадзеных на стале.
Аналагічна ёсць розныя спосабы захоўвання дадзеных
ў базе дадзеных па змаўчанні па меншай меры ў Appliance
з апошняй версіяй з MySQL.
Мы выкарыстоўвалі ядро базы дадзеных называецца, NoDB,
які падтрымлівае некалькі добрых магчымасцяў.
Але іншай распаўсюджаным з'яўляецца таксама называецца MyISAM і яшчэ адзін
што можа быць выкарыстанне памяці, што азначае не кладзіце нічога
на дыску, проста працягвайце рэчы ў памяці.
Па большай частцы вы, верагодна, не памыліцеся толькі пачынаюць
з NoDB, але і для любых праектаў што, як правіла, звязаныя з высокімі тэмпамі
ўстаўкі, напрыклад, як шмат хуткай рэгістрацыі,
сотні рэчаў у секунду ці тысячы рэчаў.
У любы час у вас ёсць шмат чаго адбываецца
на ў базе дадзеных то гэта віды
рашэнні больш нізкага ўзроўню пачынаюць захапляцца.
Поўны тэкст функцыя для асобнік працуе толькі ў MyISAM
так што мае наступствы.
Але вы, напэўна, памятаеце гэта, давайце па меншай меры, матываваць, чаму мы клапоцімся
аб NoDB у прыватнасці.
А ўмовы гонкі як правіла, адносіцца да чаго?
Добра, гэта намёк на прыкладзе некаторых
з вас, магчыма, чулі ў гадоў міма ці 161 ці 50
дзе ў вас ёсць сусед па пакоі, вы абодва сапраўды любіце малако,
адзін з вас вернецца дамоў спачатку адкрываецца халадзільнік няма малака,
зачыніць халадзільнік шпацыр па Вуліцы ў CVS і атрымаць
у чарзе, каб купіць малака.
Між тым, ваш сусед па пакоі вернецца сюды.
Яна таксама любіць малако.
Адкрыйце халадзільнік і не разумее, няма малака.
Тут яна затым ідзе ў захоўваць, можа быць, іншы CVS.
Перанясемся на некалькі хвілін пазней вы вернецеся і цяпер абодва
з вы купілі малако.
Адзін з іх у цяперашні час збіраецца сапсаваць, таму што вы не
як малако, што шмат, і гэта праблема, ці не так?
Таму што вы абодва правераны стан некаторай зменнай
і прыняў рашэнне на аснове на ім нават пры тым, што дзяржава
з гэтай зменнай быў па сутнасці ў працэсе змены,
ўсё быць ім павольна, на працягу колькасць часу, якое патрабуецца
каб дабрацца да і з CVS.
Так што гэта свайго роду тупы рэальнага Свет рашэнне гэтай праблемы?
Пакіньце запіску, ці не так?
Гэта здарылася ў мінулы раз.
Заўсёды пакінуць запіску або Padlock рэч у літаральным сэнсе.
І я кажу замак, таму што калі вы сапраўды бяруць ці ўзялі CS161,
замак з'яўляецца адным з асноўных Ідэя ў такім свеце.
Так як умовы перахопу можа паўстаць і ў свеце баз дадзеных
і вы, магчыма, памятаеце, можа быць, ад CS50 фінансавання, калі вы ўзялі 50,
гэты код, што мы на самай справе даў вы, хлопцы, у спецыфікацыі
ў гэты час так, што ваш Аперацыя называецца так атамная.
Калі вы хочаце, у гэтым выпадак, купіць долю акцый
і што акцыя мае некаторыя прыватнасці знак.
Мы сказалі вам выкарыстоўваць код, падобны гэта, так як праз гэты
на дублікат ключа абнаўлення Сінтаксіс, які пабудаваны
у MySQL вы эфектыўна рабіць альбо ў ўстаўкі
або ў абнаўленне пасля рабіць выбар, каб убачыць
калі акцыя ўжо там.
Іншымі словамі, аналагавы ў свет куплі акцыі
малака і халадзільніка можа быць, па-першае,
перш чым купляць долю Google вы можаце выбраць
з базы дадзеных усё акцыі Google, што Давід валодае
каб убачыць, калі ён валодае нуль ці больш.
Як толькі вы бачыце, калі ён валодае нуль ці больш у вас ёсць
каб затым зрабіць наступнае.
Або трэба рабіць ўстаўкі
калі ён уладальнікам прычыну Zero ' няма радка для Давіда яшчэ,
ці вы павінны зрабіць абнаўленне калі па меншай меры ў тэорыі, вы хочаце
мець адзін радок для кожнага карыстальніка.
Праблема выбару што колькасць акцый
і наступнага абнаўлення або ўстаўка можа быць перапынены
нехта іншы ў іншым кампутарны тэрмінал спрабуе купіць
або прадаць частку Давіда акцыі запасаў будзь
для добрых мэтаў або роду шкоднасных мэтаў.
Гэта як пайсці ў краму калі ваш сусед па пакоі вернецца
і правярае стан зменнай.
Такім чынам, гэты сінтаксіс у той час які быў свайго роду неабходнасці
для CS50, пазбягае, што Праблема ў цэлым.
І гэта як раз робіць усё, што Магія блакавання для вас,
але зараз з гэтымі відамі праектаў для гэтага курса
якія, хутчэй за ўсё, будзе прадугледжваюць наяўнасць больш складаных набораў дадзеных,
вы не можаце дасягнуць заўсёды гэта атамарнага.
Усё адбываецца адразу ці наогул не
без перапынку так хупава.
І так MySQL, іншы ядро базы дадзеных,
падтрымкі, што называецца замкі,
у якім вы можаце сказаць заблакаваць гэты табліца так што толькі адзін задавальненне
і наогул толькі адзін карыстальнік можа дакрануцца да яе ў любы момант часу
для чытання або запісы і то вы можаце разблакаваць яго.
Гэта прыклад з аднаго уласных спасылак MySQL,,
дзе, калі ў вас ёсць, як банк рахунку, што вы спрабуеце
адняць грошы з а затым ўнесці грошы на.
Магчыма, вы захочаце пераканацца, што абодва
з тых рэчаў, адбудзецца разам
не так, што няма ніякага матэматычныя памылкі
і без страт адзін грошы, так ці інакш.
Праблема з замкамі хоць у базе даных з'яўляецца
што звычайна азначае ўся табліца блакуецца,
што азначае, калі ў вас ёсць сто чалавек спрабуюць
рабіць бізнес з вашым банкам онлайн на тую ж суму
часу толькі адзін з ім можа пайсці ў той час.
Што па-дурному, асабліва на серверах у цяперашні час
што ёсць восем страў, 16 Вядома, ёсць велізарная колькасць
памяці, няма ніякіх прычына па частках усё
з вашых здзелак, калі тыя, кліенты будуць толькі
ўзаемадзейнічаць са сваімі ўласнымі радкоў.
Так NoDB дазваляе рабіць рэчы разумнейшыя
і гэта звычайна будзе падыход вы бераце ў кодзе,
як вы выкарыстоўваеце нешта называюць здзелку.
І вы робіце гэта звычайна у PHP кода,
Рубі код, Python, што заўгодна.
Але код SQL, што гэта у канчатковым рахунку, выкарыстоўвацца гэта,
звычайна.
Пачніце здзелку, то вы пазначыць два ці больш запытаў
што вы хочаце выканаць цалкам
без перапынку ці няма наогул.
Там можа быць нават некаторыя выберыце справаздачнасць у
ці некаторыя выдаляе або абнаўлення.
Але прыемна тое, што База дадзеных будзе досыць разумны,
каб пераканацца, што гэта будзе толькі заблакаваць радкі яны на самой справе
удзел у гэтай абнаўленняў або выбірае або выдаляе.
Так што калі вы атрымалі тысячы радкоў і вы толькі дакранаючыся тры
з іх, толькі што падмноства табліцы будуць заблакаваныя
што азначае тыя іншыя 99 кліенты могуць закрануць іх радкоў
без серыялізацыі і запавольваюцца вас.
Між тым, гэта з'яўляецца самым добрым аспект здзелак.
Яны здзелкі ў адчуваю, як 161 у файлавай сістэме,
яны транзакцый
а значыць, вы можаце згарнуць іх назад, вы можаце адмяніць іх.
Гэта як каманда ці кантраляваць F баз дадзеных.
Калі вы выявіце, удзел шлях праз усе
з вашай рознай аперацыі з дадзенымі, страляць, нешта ідзе не так.
Вы літаральна выканаць адрозніваецца рол SQL запытаў таму
і ўсе гэтыя тэндэнцыі - усё з сцвярджэнняў вы выкананых
сказаўшы старт здзелка знікаюць
як быццам яны ніколі не адбывалася,
якая з'яўляецца дзіўна магутная рэч.
І вось віды рэчы, вядома, у 50 мы сартуем
з замесці пад дыван і Вы толькі збольшага выказаць здагадку
што ўсё будзе добра.
Але як толькі вы пачынаеце думаць аб рэальных праектах
і рэальных карыстальнікаў і цэласнасць базы дадзеных,
гэтыя віды праектных рашэнняў
, Якія будзе мець важнае значэнне.