[მუსიკის დაკვრა] დავით Malan ყველა უფლება, ეს არის CS50. ეს არის ბოლომდე კვირაში რვა. და დღეს, ჩვენ დავიწყებთ შეავსოთ რამდენიმე ცალი როდესაც საქმე შენობა რამ ინტერნეტში. ასე რომ, გავიხსენოთ, რომ ორშაბათს ჩვენ გაატაროთ ბევრი დრო on PHP, რომელიც ამ დინამიური პროგრამირების ენა, რომელიც საშუალებას გვაძლევს გამომავალი, სხვა რამ, HTML და სხვა მსგავსი შინაარსის ის, რომ ჩვენ გვინდა, რომ. მაგრამ ჩვენ ნამდვილად არ შევხედე, თუ როგორ ჩვენ ვაპირებთ, რომ შეინახოთ ნებისმიერი ინფორმაცია. მართლაც, თითქმის არც ერთი სუპერ საინტერესო საიტები თქვენ ეწვევა დღეს გარკვეული სახის მონაცემთა ბაზაში უკან ბოლომდე, არა? Facebook თქმა ინახავს უამრავი მონაცემები ყველა ჩვენგანი და Gmail მაღაზიები თქვენი ელ. ასე რომ, ბევრი სხვა საიტებზე არ არის მხოლოდ სტატიკური შიგთავსი, რომ საინფორმაციო. ეს, ფაქტობრივად, დინამიური რამდენიმე გზა. თქვენ შეყვანის, ეს განახლებები გვერდებზე სხვა ადამიანი. თქვენ მიიღებთ შეტყობინებას, თქვენ გააგზავნით შეტყობინებები, და სხვ. ასე რომ, დღეს, დავაკვირდებით ზე საფუძვლების პროექტი რომ თქვენ ჩაყვინთვის შევიდა შემდეგი კვირას, CS50 ფინანსთა, რომელიც რეალურად აპირებს თქვენ აშენება რაღაც არა C, მაგრამ PHP. ნახვა, რომელიც გამოიყურება ცოტა რაღაც მსგავსი რომელიც საშუალებას იყიდოს და გაყიდოს აქციები, რომლებიც, ფაქტობრივად, აპირებს დაეყრდნოს რეალურ დროში საფონდო მონაცემების Yahoo Finance. ასე რომ, საბოლოო ჯამში, თქვენ გაქვთ ილუზია თავს და მომხმარებლები რომ თქვენ რეალურად ყიდვის და გაყიდვის აქციები და მიღების თითქმის რეალურ დროში განახლება, მართვის პორტფელი, რაც აპირებს მოითხოვოს, რომელსაც, საბოლოო ჯამში, მონაცემთა ბაზის მომხმარებლებს. ასე რომ, თქვენი სიტყვებით მით უმეტეს, თუ თქვენ არ სუპერ იცნობს კომპიუტერული მეცნიერება და მონაცემთა ბაზა, რა იცით ბაზაში იყოს ახლა, ამ nontechnical თვალსაზრისით? რა არის ეს? როგორ დაახასიათებდით მას რომ roommate ან მეგობარი? აუდიტორია: [INAUDIBLE] ინფორმაცია [INAUDIBLE] დავით Malan: ასე, სია, ინფორმაცია, ან store-- ინფორმაციის ჩამონათვალი რომ დაგვჭირდება შესანახად რაღაც, როგორიცაა შესახებ. და რას წევრებს არ აქვთ მათთან დაკავშირებული? თუ თქვენ შესახებ Facebook ან Gmail, რა მახასიათებლები რომ ყველა ჩვენგანი წევრებს არ აქვთ? მსგავსად, რა შეიძლება იყოს ზოგიერთი სვეტის ცხრილების, რომელსაც ჩვენ მიანიშნა, ბოლო დროს? იმის გამო, რომ ერთხელ, შეგიძლიათ ვფიქრობ, რომ მონაცემთა ბაზაში მართლაც, როგორც ლამაზი Excel ფაილი ან Google ცხრილების ან Apple ნომრები ფაილი. ასე რომ, რა ფიქრობთ როდესაც ფიქრობთ მომხმარებელი? რა კავშირი აქვთ მათ? რა არის ეს? აუდიტორია: სახელი. DAVID Malan: სახელი. ასე რომ, თუ სახელი, ისევე როგორც დავით Malan იქნება სახელი ზოგიერთი შესახებ. რა ამჯამად მომხმარებლის გაქვთ? აუდიტორია: პირადობის მოწმობა. DAVID Malan: ID. ასე რომ, როგორც პირადობის მოწმობის ნომერი, როგორც თქვენი ჰარვარდის ID ან Yale წმინდა ID ან მოსწონს. რა შეიძლება მომხმარებლის გაქვთ? აუდიტორია: პაროლი. დავით Malan: დაგავიწყდათ, შესაძლოა, მისამართი, შესაძლოა, ტელეფონის ნომერი, იქნებ ელექტრონული ფოსტის მისამართი. ასე რომ, აქ კონა სფეროებში და ეს შეიძლება სახის კონტროლიდან სწრაფად, როგორც კი დაიწყება ხვდებიან, OH, მოდით შესანახად ეს და მოდით შესანახად და რომ. მაგრამ, თუ ჩვენ რეალურად ამის გაკეთება? ასე რომ, კიდევ ერთხელ, გონებრივი მოდელი უნდა ჰქონდეს დღეს, როგორც ჩვენ ჩაყვინთვის შევიდა ფაქტობრივი SQL, სტრუქტურირებული შეკითხვის ენა, მონაცემთა ბაზა, რომელიც ასე გამოიყურება. ეს უბრალოდ რიგები და სვეტები. და თქვენ წარმოიდგინეთ, Google ცხრილები ან ნებისმიერი რაოდენობის სხვა პროგრამებს. მაგრამ რა არის გასაღები MySQL, რომელიც არის მონაცემთა ბაზის პროგრამული უზრუნველყოფა, ჩვენ ვაპირებთ გამოვიყენოთ, თავისუფლად ღიად available-- Facebook მიზნებისათვის და ნებისმიერი რაოდენობის სხვა websites-- მონაცემთა ბაზის ინახავს რამ relationally. და რელატიური მონაცემთა ბაზაში მხოლოდ იმას ნიშნავს, ერთ-ერთი, რომელიც სიტყვასიტყვით ინახავს მისი მონაცემების რიგები და სვეტები. ეს იმდენად მარტივია, რომ. ასე რომ, თუნდაც რაღაც Oracle, რომ თქვენ ალბათ ზოგადად მსმენია არის რელატიური მონაცემთა ბაზაში. და ქვეშ Hood, მაღაზიები მონაცემების რიგები და სვეტები. და Oracle ედავება თქვენ ბევრი ფული უნდა გავაკეთოთ, რომ, ხოლო MySQL ბრალდებით თქვენ არაფერი იგივე. ასე რომ, SQL აპირებს მოგვცეს მინიმუმ ოთხი ოპერაციებში. შესაძლებლობა აირჩიოთ მონაცემებს, როგორიცაა წაკითხული მონაცემები, ჩადეთ, წაშლის, განახლება და მონაცემები. სხვა სიტყვებით, ეს არის ნამდვილად ოთხი ძირითადი ოპერაციების რომ ვაპირებთ საშუალებას მოგვცემს, რომ შეიცვალოს პერსონალის იმ რიგები და სვეტები. ინსტრუმენტი, რომელიც ჩვენ ვიყენებთ დღეს განსაკუთრებით ვისწავლოთ SQL და ითამაშოს ეს კიდევ ერთხელ მოუწოდა PHP MyAdmin. ეს არის ვებ დაფუძნებული ინსტრუმენტი. სულ შემთხვევითი, რომ დაწერილი PHP. მაგრამ ის აპირებს მოგვცეს გრაფიკული ინტერფეისი, ასე რომ ჩვენ შეგვიძლია რეალურად შექმნა ამ რიგები და სვეტები და მაშინ გაიგო, რომ მათი მეშვეობით კოდი. ასე რომ, მოდით ახლა დაიწყება რას ვფიქრობ, გულწრფელად სახის fun პროცესი მშენებლობის უკან ბოლომდე საიტებზე, ნაწილები, რომ წევრებს არ ვხედავ, მაგრამ აუცილებლად ზრუნავს, იმიტომ, რომ ის საკმაოდ მონაცემები აპირებს. ასე რომ, მსგავსი C და ცოტა ნაკლები, როგორიცაა PHP, SQL ან მონაცემთა ბაზა, რომელიც მხარს უჭერს SQL, აქვს მინიმუმ ამ მონაცემთა ტიპები და მტევნების სხვები. CHAR, Varchar, INT, BIGINT, ათობითი და წამების. და იქ მთელი bunch სხვა თვისებები, მაგრამ მოდით ეს მიერ გზა ფაქტობრივი მაგალითია. მე ვაპირებ წასვლას CS50 IDE სადაც წინასწარ, მე შესული სისტემაში და მე ასევე ეწვია URL for ეს ინსტრუმენტი მოუწოდა PHP MyAdmin. და პრობლემა მითითებული შვიდი, ჩვენ გეტყვით, ზუსტად თუ როგორ უნდა მიიღოს ამ ინტერფეისი ისევე. ზედა მარცხენა კუთხეში, შეამჩნია ის ამბობს ლექცია. და ეს მხოლოდ იმას ნიშნავს, რომ წინასწარ, მე შევქმენი ცარიელი მონაცემთა ბაზაში მოუწოდა ლექცია რომ არ აქვს ცხრილები ამაზე. არ არის რიგები და სვეტები. იმის გამო, რომ პირველი რაც ჩვენ ვაპირებთ გავაკეთოთ არის დაიწყოს, რათა შეიქმნას მაგიდა რომ აპირებს შესანახად ჩვენს მომხმარებლებს. ასე რომ, სიტყვასიტყვით მეტი აქ უფლება, მე ვარ ვაპირებ გითხრათ მონაცემთა ბაზა მინდა მაგიდა სახელწოდებით მომხმარებელი. ასე რომ, ეს არის, როგორც ფაილი, რომელიც მე მინდა შესანახად ყველა ჩემი მონაცემები. და რამდენი სვეტების? ისე, მოდით შეინახოს იგი მარტივი ახლა. მე უბრალოდ მინდა შესანახად, როგორიცაა სახელი და სახელი შესახებ. ჩვენ დავიწყებთ მცირე. ასე რომ, მინდა ორი სვეტით სულ. და მე ვაპირებ წავიდეთ წინ და დააჭირეთ ღილაკს Go. და მაშინ, ამ სვეტები, რაც მე ვაპირებ გავაკეთოთ, თუ ამ ინტერნეტ cooperates-- ყველა უფლება, ასე რომ, ჩვენ ვაპირებთ, რომ ცდილობენ, რომ ერთხელ. მე ვაპირებ, რომ შევქმნათ მაგიდა სახელწოდებით მომხმარებელი ორი სვეტით, დააჭირეთ წადი, OK. ახლა ჩვენ მივიღეთ ეს მართლაც სწრაფი. დიდი მადლობა, ძალიან კარგად გაკეთდეს. ყველა უფლება, ასე რომ ჩვენ გვინდა ამ სვეტების ეწოდოს? ასე რომ, ერთი იქნება მოუწოდა ნიკი. ასე რომ, მე ვხედავ აქ და ინტერფეისი გულწრფელად იღებს პატარა მახინჯი, საბოლოო ჯამში, ერთხელ თქვენ დაიწყოს აკრეფით ყველა ეს მონაცემები. მაგრამ რა ლამაზი არის, რომ ერთგვარი პარადოქსულია, მე შექმნაში სვეტები, მაგრამ ინსტრუმენტი აქვს სულელურად ჩაუყარა მათ რიგები ასე, რომ მე შეგიძლიათ გამართოთ ამ სვეტები. ასე რომ, აქ ორი ბლანკები იქ ქვეშ სახელი. ერთ-ერთი ასეთი სფეროებში მე გვინდა, რომ ე.წ. ნიკი, და სხვა სფეროში მინდა მოვუწოდო სახელი. და ახლა მე უნდა აირჩიოს მონაცემთა ტიპები ამ საკითხზე. ასე რომ, ხოლო Excel და Google ცხრილები, თუ გვინდა, სვეტი, თქვენ ფაქტიურად მხოლოდ ჩაწერეთ სახელი ან ნიკი, დააჭიროთ. იქნებ, რათა ის თამამი სახე მხოლოდ სიწმინდე, მაგრამ ეს არის ის. თქვენ არ დააკონკრეტა სახის სვეტები. ახლა Google ცხრილები ან Excel, შეიძლება მიუთითოს, თუ როგორ მონაცემები გაწეული. თქვენ შეიძლება წავიდეს ფორმატი მენიუს და შეგიძლიათ მიუთითოთ ნახოთ ეს, როგორც დოლარის ნიშანი, ჩანს, ამ, როგორც მცურავი წერტილი ღირებულება. ასე რომ, ეს მსგავსი სულისკვეთებით რომ ის, რაც ჩვენ შესახებ უნდა გააკეთოს, მაგრამ ეს რეალურად აპირებს აიძულოს მონაცემები უნდა იყოს გარკვეული ტიპის. ახლა, მიუხედავად იმისა, რომ ერთი წუთით წინ მე განაცხადა, რომ მხოლოდ რამდენიმე მონაცემთა ტიპები, იქ ფაქტიურად მთელი ბევრი, და ისინი სხვადასხვა ხარისხით სპეციფიკას. და როგორც განზე, თქვენ კი ამის ლამაზი რამ როგორიცაა შენახვის geometries შიგნით მონაცემთა ბაზაში. თქვენ შეგიძლიათ ჩაწეროთ რამ როგორიცაა GPS კოორდინატები და რეალურად, მათემატიკურად, რაოდენობა, რომლებიც ახლოს სხვები. მაგრამ ჩვენ ვაპირებთ შენარჩუნება ეს სუპერ მარტივი და ახვიდეთ აქ, ყველა ე.წ. string ტიპის. ასე რომ, აქ არის სიაში მთელი bunch of პარამეტრები. CHAR, Varchar, TINYTEXT, MEDIUMTEXT, LONGTEXT. და ეს არის ერთგვარი აბსოლუტური. და სამწუხაროდ, გარკვეულწილად პარადოქსულად ჟღერდეს C, char არის ნამდვილად არ CHAR. თუ, თქვენ შეიტანეთ მონაცემთა ბაზაში რომ თქვენი მონაცემები ტიპის CHAR, ეს ნიშნავს, რომ დიახ, ეს არის CHAR, მაგრამ ეს ერთი ან მეტი სიმბოლო. და თქვენ უნდა მიუთითოთ რამდენი სიმბოლო გსურთ. ასე რომ, რა არის ტიპიური სიგრძე სახელი? არსებობს ლიმიტი, როგორც წესი? აუდიტორია: [INAUDIBLE] დავით Malan: 16 იქნებ? ასე რომ. თქვენ იცით, რომ უკან დღეს, ეს უნდა იყოს რვა. ზოგჯერ ეს 16, ზოგჯერ ეს კიდევ უფრო მეტი. ასე რომ, ეს არ ნიშნავს, მომეცი ერთი CHAR. ეს იმას ნიშნავს, რომ მე უნდა მიუთითოთ ხანგრძლივობა სფეროში, და ახლა შეიძლება ითქვას რაღაც 16. და იქ ვაჭრობის აქ. ასე რომ, ჩვენ ვხედავთ მომენტში ეს იმას ნიშნავს, ერთი, ყოველ სახელი უნდა იყოს 16 სიმბოლოს. მაგრამ დაველოდოთ წუთში, M-A-L-A-N. თუ ეს ჩემი სახელი და მე მარტო ხუთ, რას ვთავაზობ, რომ მონაცემთა ბაზაში უნდა გავაკეთოთ, დანარჩენ 11 სიმბოლო, რომ მე დაცულია ფართი? რას იზამდით? აუდიტორია: [INAUDIBLE] დავით Malan: ჰო, უბრალოდ მათ ყველა null. მარკა მათ ფართები. მაგრამ, ალბათ, null, ასე რომ ბევრი წარმატებული zeros. ასე რომ, ერთი მხრივ, ჩვენ გვაქვს ახლა დარწმუნებული ვარ, რომ ჩემი სახელი არ შეიძლება 16-ზე მეტი სიმბოლო. და მეორე მხარე, რომელიც არის იმ შემთხვევაში, თუ მე მქონდა ნამდვილად გრძელი სახელი და სასურველი მართლაც დიდი მომხმარებლის სახელი როგორც ზოგიერთი თქვენ ბიჭები შეიძლება ჰქონდეს, რომ კოლეჯის ან განთავსებულია Yale.edu, თქვენ არ აქვს ერთი. ასე რომ, რეალურად, თუ თქვენ ოდესმე დარეგისტრირებული ნახვა და თქვენ დაიყვირა განაცხადა, თქვენი პაროლი არის ძალიან დიდი ხნის ან თქვენი სახელი არის ძალიან გრძელი, ეს არის უბრალოდ იმიტომ, რომ პროგრამისტი, როდესაც კონფიგურაციის მისი მონაცემთა ბაზა, გადაწყდა, რომ ამ სფეროში იქნება არ უნდა აღემატებოდეს ამ სიგრძეზე. ყველა უფლება, ასე რომ, თუ ჩვენ გაგრძელება სახელი? რამდენ ხანს უნდა ტიპიური ადამიანის სახელი იყოს? რამდენი პერსონაჟი, 16? მე გამოცნობა შეგვეძლო მოვძებნოთ ვინმე ამ ოთახში სადაც მისი პირველი პლუს ბოლო სახელი უმეტეს 16 სიმბოლოს. ასე რომ, რა არის უკეთესი, რომ 17? 18? 25? დიდი? 30? აუდიტორია: [INAUDIBLE] დავით Malan: 5000, ღმერთო ჩემო. ასე რომ, ეს, ალბათ, ღირსეული ზედა ზღვარი, უნდა ვთქვა. აქ ჩვენ სახის რათა განაჩენი ზარი. ისევე როგორც, არ არსებობს სწორი პასუხი აქ. Infinite არ არის გამორიცხული, იმიტომ, რომ ჩვენ საბოლოოდ გვექნება ჩვენ აპირებს ამოიწურა მეხსიერება. ასე რომ, ჩვენ უნდა მიიღოს გადაწყვეტილება ზარის რაღაც მომენტში. ძალიან ხშირი იქნება, მაგალითად, გამოიყენოს და ნება მომეცით დააკონკრეტა CHAR აქ როგორც ადრე 255 იყო ფაქტიურად ზედა ზღვარი ამ მონაცემთა ბაზის პროგრამული უზრუნველყოფა წლის წინ. ასე რომ, ბევრი ადამიანები უბრალოდ, ვამბობთ, ჯარიმა. 255 არის ლიმიტი. მოდით უბრალოდ გამოიყენოთ მაქსიმალურად. და ეს არის საკმაოდ სასაცილოა. მსგავსად, თუ თქვენ აკრეფით ვინმეს ასახელებს 200 plus გმირები, რომ ცოტა სასაცილოა. მაგრამ გახსოვდეთ, რომ ASCII არ არის მხოლოდ სისტემის სიმბოლო. ასე რომ, განსაკუთრებით ბევრი აზიური ენები იქ, სადაც გმირები არ შეგვიძლია, გამოხატონ კლავიშები, როგორც ჩემი აშშ კლავიატურის, ზოგიერთი პერსონაჟი რეალურად დასჭირდეს 16 ბიტი ნაცვლად რვა ბიტი. ასე რომ, ეს, ფაქტობრივად, არ არის, რომ დაუსაბუთებელი რომ ჩვენ გვჭირდება მეტი სივრცეში, თუ ჩვენ გვინდა, რომ შეესაბამება დიდი გმირები, ვიდრე ძალიან აშშ centric ვინც ჩვენ იმას განიხილავს. ასე რომ, ჩვენ გვჭირდება გარკვეული ზედა ზღვარი. მე არ ვიცი, რა საუკეთესო ერთი, მაგრამ 255 ზოგადად, საერთო ერთი. 25 გრძნობს დაბალია. 16, 32 გრძნობს დაბალია. მე err მხარეს რაღაც უმაღლესი. მაგრამ არსებობს ვაჭრობის, როგორც ყოველთვის. რა არის, ალბათ, ცხადია, სავაჭრო გამორთვა დაჯავშნა 255 სიმბოლო ყველას სახელით ჩემს მონაცემთა ბაზაში? აუდიტორია: [INAUDIBLE] დავით Malan: რა არის ეს? აუდიტორია: [INAUDIBLE] დავით Malan: ეს არის ბევრი მეხსიერება, არა? M-A-L-A-N. მე უბრალოდ გადაყრილი 250 გმირები მხოლოდ შესანახად ჩემი სახელი დაცვითი, მხოლოდ იმ შემთხვევაში ვინმე კლასში აქვს ძალიან გრძელი სახელი. ეს, როგორც ჩანს, გაუმართლებელი იდგა. ასე რომ, გამოდის, რომ SQL, ამ მონაცემთა ბაზაში ენის, რეალურად მხარს უჭერს რაღაც მოუწოდა Varchar, ან ცვლადი CHAR. და ეს არის სახის ლამაზი, რომ ამ გაძლევთ საშუალებას არ არის ფიქსირებული სიგანე, არამედ, ცვლადი სიგანე. და უფრო კონკრეტულად, მაქსიმალური სიგანე სფეროში. ასე რომ, ეს იმას ნიშნავს, რომ სახელი არ შეიძლება იყოს არაუმეტეს 250 სიმბოლო, მაგრამ ეს, რა თქმა უნდა ნაკლები. და მონაცემთა ბაზის იქნება ჭკვიანი. თუ თქვენ დააყენა M-A-L-A-N, ეს მხოლოდ აპირებს გამოიყენოს ხუთ, შესაძლოა, ექვსი bytes მოსწონს გადმოკიდული null ხასიათი, და არ ატარებენ დამატებით 249 ან 250 bytes ზედმეტად. ასე რომ, ეს, როგორც ჩანს, მე უნდა არ დაიწყო ეს ამბავი. მაგრამ იქ ყოველთვის იდგა. ასე რომ, ერთი მხრივ, სახელი მე მითითებული უნდა იყოს მყარი კოდირებული 16, და შესაძლოა, რომ არ იყო უფლება ზარი, შესაძლოა, არის, მაგრამ რატომ არ უნდა გამოვიყენოთ VARCHARs ყველაფერი? ის არსებობს ერთი მიზეზი. რატომ არ იყენებენ VARCHARs ყველა სფეროში რომლის სიგრძე არ ვიცი წინასწარ თუ ეს, როგორც ჩანს, დიდი რამ, არა? გამოიყენეთ მხოლოდ იმდენი სივრცე, როგორც თქვენ უნდა მდე ამ ლიმიტი? აუდიტორია: ნელია. დავით Malan: Speller? აუდიტორია: ხდის ნელია? დავით Malan: ოჰ, ეს ნელა. კარგი, რომ თითქმის ყოველთვის პასუხი, გულწრფელად. ისევე როგორც, რა იდგა? ეს არც ღირს მეტი სივრცე ან ღირს მეტი დრო. ასე რომ, ამ შემთხვევაში, ეს შეიძლება იყოს ნელი. რატომ? აუდიტორია: [INAUDIBLE] განსაზღვრის [INAUDIBLE]. დავით Malan: კარგი. ასე რომ, თქვენ შეიძლება გავიხსენოთ, თუნდაც PSED5, სათამაშო თქვენი მიდგომა ლექსიკონი, თუ თქვენ უნდა გამოყოს მეხსიერება დინამიურად შენარჩუნება მზარდი ბუფერული, რომ შეიძლება რეალურად იყოს ნელი. თუ თქვენ გაქვთ მოვუწოდო malloc ქვეშ hood და შესაძლოა ის, რაც MySQL აკეთებს, ასე რომ აუცილებლად, რომ შეიძლება იყოს საქმე. და თუ ფიქრობთ გზა უკან PSet-- ან თუნდაც კვირის ორი, როდესაც ჩვენ გავაკეთეთ რამ, როგორიცაა ორობითი ძებნა ან თუნდაც ხაზოვანი ძებნა, ერთი ლამაზი რამ ყველა სიტყვა მონაცემთა ბაზაში ან ყველა სიტყვა სვეტი უკვე ზუსტად იგივე სიგრძე, მაშინაც კი, თუ მთელი bunch of იმ პერსონაჟების არის ცარიელი, არის ის, რომ თქვენ შეგიძლიათ გამოიყენოთ წვდომის თქვენი მონაცემები, არა? თუ იცით, რომ ყოველ სიტყვა 16 სიმბოლო მოშორებით, თქვენ შეგიძლიათ გამოიყენოთ კურსორი არითმეტიკა, ასე საუბარი, და მერე ჩვენთვის 16, 32, 48, 64, და თქვენ შეგიძლიათ ხტომა მყისიერად გამოყენებით არითმეტიკული რომელიმე სიტყვა თქვენს მონაცემთა ბაზაში. ვინაიდან თუ ის Varchar, რას ნაცვლად უნდა გავაკეთოთ? [სატელეფონო ზარი] თუ ეს Varchar, თქვენ ვერ გამოიყენებს წვდომის. რა უნდა ვეძებოთ და გავაკეთოთ? ჰო? აუდიტორია: [INAUDIBLE] დავით Malan: შეხედეთ მეშვეობით whole-- კვალი მთელი სია რას ეძებს, სავარაუდოდ? რა განსაკუთრებული მნიშვნელობა? აუდიტორია: [INAUDIBLE] დავით Malan: ვეძებთ იმ null terminators რომ დემარკაციის გამოყოფის სიტყვა. ასე რომ, კიდევ ერთხელ, იდგა და იქ არ არის სწორი პასუხი. მაგრამ ეს არის, სადაც, განსაკუთრებით როდესაც თქვენი მომხმარებლები უნდა იყოს ბევრი და თქვენი დატვირთვის თქვენს სერვერზე, რაოდენობის ხალხი გამოყენებით იგი იღებს მაღალი, ეს არის რეალურად nontrivial გადაწყვეტილებები. ასე რომ, ჩვენ შეიძლება დატოვონ ეს, როგორც ეს, მაგრამ მოდით გადახვევა ქვემოთ მარჯვნივ აქ. ახლა, იქ რამდენიმე სვეტები სადაც ჩვენ უნდა მიიღოს გადაწყვეტილება ზარი. რა აზრი დაუშვას მომხმარებლის სახელი, მომხმარებლის სახელი ან მომხმარებლის სახელი, უნდა იყოს null? რომ არის, უბრალოდ ცარიელი. გრძნობს ცოტა nonsensical, ასე რომ მე არ აპირებს შეამოწმოთ იმ ყუთები. მაგრამ აღმოჩნდება, რომ ძალიან მონაცემთა ბაზა, შეიძლება ითქვას, ვინმე შესაძლოა აქვს მნიშვნელობა. ეს სვეტი არ აქვს რეალურად იყოს იქ. ახლა, იქ ამ drop მენიუში. და შენიშნავს, მე მაინც პირველ რიგში იქ, ასე რომ, მე ვსაუბრობ სახელი ახლა. და აღმოჩნდება, რომ მონაცემთა ბაზაში, განსხვავებით მარტივი უბრალო ცხრილების, აქვს ძლიერი თვისებები მოუწოდა ინდექსები. და ინდექსი არის გზა ვეუბნებოდი მონაცემთა ბაზის წინასწარ, რომ ადამიანის ვარ ჭკვიანია, ვიდრე თქვენ. მე ვიცი, რა სახის შეკითხვებს, აირჩიეთ ან ჩადეთ ან წაშლა ან განახლება, რომ ჩემი კოდი აპირებს დასრულდება მდე აკეთებს ამ მონაცემთა ბაზაში. მე მინდა, რომ ძალიან ბევრი მონაცემები. მინდა ჩადეთ ბევრი მონაცემები. მე მინდა, რომ მუდმივად წაშლა ბევრი მონაცემები. თუ ვიცი, რომ მე ვაპირებ წვდომის სფეროში, როგორიცაა ნიკი ბევრი, შემიძლია წინასწარ გითხრათ მონაცემთა ბაზა, მე ვიცი, მეტი, ვიდრე თქვენ, და მე მინდა, რომ ბრძანება, რომ თქვენ უნდა ინდექსი ამ სფეროში. სად ინდექსირებას სფეროში ან სვეტი იმას ნიშნავს, რომ მონაცემთა ბაზაში წინასწარ უნდა სესხის გარკვეული იდეების, ისევე, კვირაში ოთხი და ხუთი და ექვსი ეხლა CS50 და რეალურად დაამყარონ რაღაც ორობითი ძებნა ხე ან რამე ზოგადად მოუწოდა B ხე , რომ თქვენ ვისწავლოთ in კლასის მოსწონს CS124 ჰარვარდის, რომელიც ალგორითმები კლასი, ან ნებისმიერი რაოდენობის სხვა ადგილებში. მონაცემთა ბაზა და ჭკვიანი ადამიანები, რომლებიც განახორციელეს გაერკვნენ, თუ როგორ შესანახად რომ მაგიდასთან ინფორმაცია მეხსიერებაში ისე, რომ ჩხრეკა და სხვა ოპერაციები სუპერ სწრაფი. თქვენ არ გაქვთ ამის გაკეთება. თქვენ არ განახორციელოს ხაზოვანი ძებნა ან ორობითი ძებნა ან შერწყმა დალაგების ან შერჩევის დალაგების, რომ არც ერთი. მონაცემთა ბაზის აკეთებს იგი თქვენთვის თუ მეტყვით ეს წინასწარ ინდექსი ამ სფეროში. და თქვენ შეგიძლიათ ნახოთ ძალიან, არსებობს ზოგიერთი სხვა მახასიათებლები ჩვენ შეგვიძლია გითხრათ ბაზის აღსასრულებლად. რას შეიძლება ნიშნავდეს, თუ აირჩიოს უნიკალური ამ მენიუში, უბრალოდ ინტუიციურად? ჰო? აუდიტორია: [INAUDIBLE] დავით Malan: ჰო, სახელი უნდა იყოს უნიკალური. არის თუ არა ეს კარგია თუ ცუდი რამ მონაცემთა ბაზა, რომელიც ნახვა წევრებს? თუ სახელისა იყოს უნიკალური? ჰო, ალბათ. თუ ის, რაც სფეროში ვიყენებთ შესვლა, თქვენ ნამდვილად არ გვინდა, რომ ადამიანი, რომელსაც იგივე შეგრძნებას და იგივე სახელი. ასე რომ, ჩვენ შეიძლება ჰქონდეს მონაცემთა ბაზის აღსასრულებლად, რომ ასე რომ ახლა ჩემი PHP კოდი ან ნებისმიერ ენაზე, მე არ მაქვს, მაგალითად, შეამოწმეთ აუცილებლად აკეთებს ეს სახელი არსებობს, სანამ მე სხვამ რეგისტრაცია? მონაცემთა ბაზა არ დავუშვებთ ორი ადამიანი დაასახელა დავით და Malans რეგისტრაცია ამ შემთხვევაში. და როგორც განზე, მიუხედავად იმისა, რომ ამ მენიუ მხოლოდ გაძლევთ აირჩიოთ ერთი, უნიკალური ინდექსი არის ერთი, რომ ინდექსირებული for სუპერ სწრაფი შესრულება, მაგრამ ის ასევე ახორციელებს უნიკალურობა. და ჩვენ დავბრუნდებით, თუ რა დანარჩენი ორი ნიშნავს, რაღაც მომენტში. იმავდროულად, თუ მე ჩემი მეორე ზედიზედ, რომელიც არის მომხმარებლის სახელი, უნდა დავაზუსტო რომ სახელი უნდა იყოს უნიკალური? არა, იმიტომ, რომ თქვენ შეიძლება, რა თქმა უნდა ფლობის, რომ არ არსებობს ორი დავით Malans ამ ოთახში, სავარაუდოდ. მაგრამ თუ ჩვენ განსხვავებული სახელი აირჩიოთ, ჩვენ შეიძლება აუცილებლად უნდა შეჯახება. გაიხსენეთ hash მაგიდები და ასე შემდეგ. ასე რომ, ჩვენ ნამდვილად არ გვინდა, რათა სახელი სფეროში უნიკალურია. ასე რომ, ჩვენ უბრალოდ აპირებს დატოვოს რომ როგორც dash, ტირე, ტირე, არაფერი. და მე ვაპირებ დატოვოს ყველაფერი მარტო. მართლაც, ამ სფეროში ჩვენ არ აინტერესებს. და როდესაც მზად ვარ, შენახვა, თუ ინტერნეტ თანამშრომლობს, მე დააჭირეთ Save და ძალიან, ძალიან, ძალიან ნელა -ს მონაცემთა ბაზის გადაარჩინა. ახლა დავბრუნდი ამ ინტერფეისი, რომელიც მართლაც, აბსოლუტური ერთი შეხედვით. მაგრამ ყველა მე ვაპირებ ამის დაჭერით სიტყვა მომხმარებელი ზედა მარცხენა. მე ვაპირებ აქ, დააკლიკეთ მომხმარებელი, და ჩვეულებრივ, იგი აქვს შესრულებული ზოგიერთი SQL, მაგრამ უფრო, რომ ამ მომენტში. აქ მხოლოდ შემაჯამებელი რა გავაკეთე. და არ ინერვიულოთ, რომ ხედავთ ვთქვათ, ლათინური და შვედეთის აქ. ეს არის მხოლოდ ნაგულისხმები პარამეტრები, რადგან MySQL თავდაპირველად, ან PHP MyAdmin, ერთი ორი მოხდა უნდა ჩაიწეროს გარკვეული შვედური ენა. მაგრამ ეს შეუსაბამო ჩვენს შემთხვევაში აქ. ყველა უფლება, რატომ არის ეს ყველა საინტერესო? თურმე, შემიძლია ჩაწეროთ მონაცემები მონაცემთა ბაზის წერილობით კოდი. და მე წავიდეთ წინ და ჩემი ფაილი აქ, მე ვაპირებ წავიდეთ წინ და პრეტენზია მოსწონს ამ სახაზო რომ მონაცემთა ბაზაში, რომელიც ეს არ არის იმ მომენტში, მაგრამ ეს იქნება, როდესაც ჩვენ ვიღებთ პრობლემა მითითებული შვიდი. და მე ვაპირებ წავიდეთ წინ და შეასრულოს ფუნქცია მოუწოდა შეკითხვაზე, რომელიც ჩვენ მოგაწვდით პრობლემა შვიდი განაწილების კოდი, რომელიც სჭირდება მინიმუმ ერთი არგუმენტი, რომელიც მხოლოდ სიმებიანი. სიმებიანი SQL კოდი. ასე რომ, თქვენ უნდა ვისწავლოთ თუ როგორ უნდა წერენ სტრუქტურირებული შეკითხვის ენა. თუ მინდა ჩადეთ ახალი row ჩემს მონაცემთა ბაზის იმიტომ, რომ ვიღაცას წარმოდგენილი ფორმა, ჩემს კოდი, მე ფაქტიურად წერენ INSERT INTO მომხმარებლებს შემდეგი მიმართულებებით: სახელი, მძიმე, სახელი, ფასეულობები, და ახლა მე უნდა ჩაწეროთ რაღაც Malan და გაცემა, unquote დავით Malan. და ახლა თუნდაც იმ უცნობ SQL, რატომ ვარ მე გამოყენებით ერთჯერადი შეთავაზებები შიგნით ამ მწვანე სიმებიანი? რა შეიძლება იყოს ამის მიზეზი აქ? გაითვალისწინეთ, რომ მე ვარ ერთ-ერთი მისაღები ორ ენაზე. შეკითხვის არის PHP ფუნქცია, მაგრამ ის არგუმენტი. და ეს არგუმენტი აქვს, რომ თავად იყოს დაწერილი სხვა ენაზე ე.წ. SQL, სტრუქტურირებული შეკითხვის ენა. ასე რომ, ყველაფერი, რაც მე ახლახან ხაზგასმით აქ არის ამ ენის მოუწოდა SQL. ასე რომ, რა არის ერთჯერადი შეთავაზებები, ისევე როგორც სწრაფი საღი აზრის ქვითარი? წავიდეთ წინ. ისინი სიმები. ასე რომ, ციტირებით unquote Malan და გაცემა, unquote დავით Malan სიმები. და მხოლოდ ფიქრი, ინტუიციურად ახლა, იცის, რა იცით ამის შესახებ C და PHP, რატომ არ გააკეთებს, რომელიც მე, როგორც წესი, მეორადი ორმაგი შეთავაზებები strings? რატომ არ სურს ამის გაკეთება? ჰო? აუდიტორია: [INAUDIBLE] დავით Malan: ზუსტად. იმის გამო, რომ მე უკვე გამოყენებით ორმაგი შეთავაზებები გზაზე გარეთ არგუმენტი to PHP ფუნქცია, მე უბრალოდ ის აღრეული თარჯიმანი. ეს არ ვიცი, ამ ერთად წავიდეთ? ნუ ეს წავიდეთ ერთად? ნუ ეს წავიდეთ ერთად? ასე რომ, მე ალტერნატიული ნაცვლად. ან მე ვერ რაიმე ამის მსგავსი, წარმატებული ციტირებით ან წარმატებული ციტირებით. გულწრფელად ვამბობ, რომ უბრალოდ იწყებს ძალიან unreadable და მახინჯი. მაგრამ ეს მიღწევა იგივე შედეგი, ისევე. ასე რომ, თუ მე უნდა შეასრულოს ეს შეკითხვის ახლა, მოდით, ვნახოთ, რა მოხდება. მე ვაპირებ წავიდეთ წინ არის და საკმაოდ ვიდრე შეასრულოს PHP კოდი, რომელიც არის სადაც თქვენ ითამაშოთ პრობლემა მითითებული შვიდი, მე ვაპირებ ნაცვლად წასვლა PHP MyAdmin. და მე ხელით აპირებს წასვლა SQL tab, და ნება მომეცით მიუახლოვდით ინტერფეისი. და მე ვაპირებ ჩასვით რაც მე უბრალოდ აკრეფილი. და ფერი კოდირება აქვს შეიცვალა ცოტა, ახლა, მხოლოდ იმიტომ, რომ პროგრამის ფორმატის რამ ცოტა განსხვავებულად. მაგრამ შეამჩნია, რომ ყველა მე ვაკეთებ არის მე განაცხადა, ჩადეთ მომხმარებელი. მე მითითებული, მაშინ, მძიმით გამოყოფილი parenthesized სია ორ სფეროებში, რომ მინდა ჩადეთ და მაშინ მე სიტყვასიტყვით განაცხადა ღირებულებები მოჰყვა კიდევ ერთი paren, და შემდეგ ორი ღირებულებები მინდა დანამატი, და ახლა კარგი ღონისძიება, მე დააყენა მძიმით დასასრულს. ასე რომ, ეს არ არის C. ეს არ არის PHP. ეს არის SQL, და მე ჩავსვავ ამ ვებ დაფუძნებული ინტერფეისი, რომელიც არის უბრალოდ აპირებს მიადევნე თვალი, როგორც კი დააჭირეთ წადი, შეასრულოს ამ მოთხოვნის შესახებ მონაცემთა ბაზაში გაშვებული შიგნით CS50 IDE. ასე რომ, ეს არის კარგი. ყურადღება მიაქციეთ, რომ განაცხადა ერთ გრაფაში შეიყვანეს, წავიდა სუპერ სწრაფი, 0,0054 წამი ჩადეთ რომ მონაცემები. ასე, რომ ჟღერს საკმაოდ ჯანმრთელი. ეს reformatted ჩემს შეკითხვაზე ჩემთვის აქ მხოლოდ იმიტომ, რომ ის ერთგვარი ფერი კოდირებული ვერსია. მაგრამ ახლა თუ მე დააწკაპუნეთ იხილე შეამჩნევთ, რომ, მაშინაც კი, მიუხედავად იმისა, რომ იქ ბევრი clutter on ეკრანზე, ჩემი მაგიდა ახლა აქვს ორი რიგები. ასე რომ, ნება მომეცით წავიდეთ წინ და ნუ სხვა. იმის ნაცვლად, რომ, ნება მომეცით წასვლა SQL tab ერთხელ. და ამ დროს მე ჩადეთ რაღაც Rob და მისი სახელი იქნება Rob Bowden. Bowden. მოდით დააჭირეთ Save. Oops, საკმაოდ ტურიზმი. დაწკაპეთ იხილე კიდევ ერთხელ, და ახლა შეამჩნია, მე მაქვს ორი რიგები. ასე რომ, ეს არის მხოლოდ გზა უფრო რთული გზა გახსნას Google ცხრილები და მხოლოდ აკრეფით ზედიზედ შევიდა სვეტი. მაგრამ რა არის მთავარი ის არის, რომ ჩვენ ახლა აქვს სინტაქსის , რომელიც დაწერა კოდი ისე, რომ საბოლოო ჯამში, ჩვენ შეიძლება რეალურად დაკავდით და ეს. შეგახსენებთ, რომ PHP მხარს უჭერს სუპერ გლობალური ცვლადები. რა არის შიგნით დოლარის მოაწეროს ხაზგასმა მიიღონ PHP? ავიღეთ შევხედოთ ერთი ან ორი მარტივი მაგალითები. და pset6, მახსოვს, თქვენ გაქვთ მიესალმები dot PHP, რომელიც იყენებს ამ ცვლადი. რა მიდის იქ? ან რა არის ეს? ცოტა ხმამაღალი. აუდიტორია: [INAUDIBLE] დავით Malan: ეს არის თოვლის სათესლე მასივი, რომელიც არის მხოლოდ ლამაზი გზა ნათქვამია, რომ მასივი, რომელსაც აქვს გასაღები ღირებულება წყვილი. და გასაღებები არ არის რიცხვითი. ისინი სიტყვა ან სიმები. და კონკრეტულად, რა არიან ისეთებიც, გასაღები ღირებულება წყვილი? სად მოდის? ბოდიში? აუდიტორია: [INAUDIBLE] დავით Malan: არ არის? სად ის ძირითადი ღირებულება წყვილი მოდის? ამბობენ, რომ კიდევ ერთხელ? ისევ? ვარ მხოლოდ ერთი მოსმენა რაღაც? [სიცილის] ეს უფლება, არა? აუდიტორია: [INAUDIBLE] დავით Malan: ჰო, ისინი მოდის შეკითხვის სიმებიანი. ასე რომ, თუ გადახვევა დროს, როდესაც ჩვენ ითამაშა Google და ჩვენ წავიდა Google.com slash ძიება კითხვის ნიშნის რ შეადგენს კატა, თუ მე უნდა დააჭიროთ და თუ Google განხორციელდა PHP, PHP კოდი, რომელიც Google დაწერა ექნება ხელმისაწვდომობის დოლარის ნიშანი ხაზს უსვამს GET შიგნით, რომელიც არის გასაღები მოუწოდა Q და მნიშვნელობა მოუწოდა კატა, რომ მას შეუძლია შემდეგ გამოიყენოთ გამოყენებული უნდა გააკეთოს ფაქტობრივი ძიება. ასე რომ, რეალურად, რა მე ვაპირებ ახლა არის დაბრუნდეს ჩემი PHP კოდი რომ თქვენ კვლავ უფრო მეტი ამ pset7. და ნაცვლად ჩართვის მძიმე კოდირებული ღირებულებები, რომელიც არ ჩანს, როგორც ძალიან დინამიური ნახვა, მე ვაპირებ მოგცემთ teaser, რა თქვენი ფაქტობრივი კოდი ყველაფერს გააკეთებს. თქვენ დააყენა ორი კითხვის ნიშნები მოსწონს ეს. მე არ ვიცი, რა სახელი არის. მე არ ვიცი, რა სახელი იქნება, მაგრამ მე ვიცი, მე არ შემიძლია მიიღონ მათ დინამიურად ვითარდება. ასე რომ, თუ კოდი ჩვენ წერილობით ახლა არის კოდი გაშვებული Google- ის სერვერები, ან, თუ ეს მიესალმები dot PHP, რომელსაც გააჩნია pset6, მე ვაპირებ გაივლის შეკითხვის ფუნქცია ისევე printf, ორი სხვა არგუმენტები. მთავარი, ციტირებით unquote სახელი, და კიდევ, ციტირებით unquote სახელი. და ახლა, შეამჩნია რა ზოგადი სტრუქტურა აქ. მაქვს მარცხენა მხარეს ზარი, ამ ფუნქციის მოუწოდა შეკითხვის PHP. მე მაინც აქვს, როგორც პირველი არგუმენტი, უბრალოდ სიმებიანი ტექსტი. მაგრამ, რომ სიმებიანი ტექსტი ენაზე მოუწოდა SQL. და გულწრფელად, ეს არ არის დიდი ენაზე. ჩვენ მხოლოდ ვაპირებ ვისაუბრო ოფიციალურად დღეს, ნამდვილად. და მაშინ პრობლემა მითითებული შვიდი, იქ შედარებით რამდენიმე თვისებები, რომ ჩვენ აპირებს ბერკეტები. კითხვის ნიშნები, თუმცა, იმას ნიშნავს, რომ დანამატის მნიშვნელობა აქ და plug სხვა მნიშვნელობა აქ. და შეამჩნია, მე გამოტოვებული რა მთელი quote-- რა it-- გარშემო ციტატა აღნიშნავს ამ დროს. მე გამოტოვებული ციტატა ნიშნების გარშემო კითხვის ნიშნის, ვწუხვარ, ამ დროს გარშემო. ასე რომ, რა არის ლამაზი ამ კითხვის ნიშნის ფუნქცია, რომელიც PHP ტენდენცია მხარი დაუჭიროს, Ruby და Python და სხვა ენებზე, ეს მხოლოდ იმას ნიშნავს plug ზოგიერთ ვაფასებთ აქ და თქვენ იცით, რა? თქვენ გაერკვნენ, თუ არა გამოიყენოს ერთჯერადი შეთავაზებები და ორმაგი შეთავაზებები. არ შემეხო იმ ინტელექტუალურად უინტერესო დეტალები. მაგრამ, დარწმუნდით, რომ ეს სწორი ისე, რომ ჩემი კოდი, საბოლოო ჯამში, ოპერატიული და უსაფრთხო, რომელიც ექნება მნიშვნელობა, სანამ ხანგრძლივი. ახლა, რამდენი არგუმენტები საერთო, უბრალოდ იყოს მკაფიო, არის შეკითხვის ფუნქცია აყვანა? ყველას მინდა ხმას მეტი, ვიდრე ორი? სამი? რა თქმა უნდა, რატომ? რატომ სამი? აუდიტორია: [INAUDIBLE] დავით Malan: ზუსტად. პირველი ნაწილი არის სიმებიანი. მეორე არგუმენტი არის დოლარის ნიშანი ხაზს უსვამს GET bracket სახელი. და მესამე არგუმენტი არის იგივე, მაგრამ მხოლოდ სახელი. სხვა სიტყვებით, ახლა თუ მქონდა ვებ ფორმა რომ ჰქონდა ტექსტი სფეროებში, ერთი მომხმარებლის სახელი, ერთი მისი სახელი, უბრალოდ, ისევე როგორც თქვენ ხედავთ ნახვა როდესაც თქვენ დარეგისტრირდეთ ზოგიერთი ნახვა, ეს შეიძლება იყოს კოდი უკან ბოლომდე, რომ რეალურად აკეთებს ჩასმა ახლა მონაცემთა ბაზაში. ახლა პირიქით, მოდით სწრაფი ნაბიჯია. დავუშვათ შესახებ არის ხე და გსურთ წერენ PHP კოდი, რომელიც ამოწმებს თუ არა პირი, რომელიც მხოლოდ შესული სისტემაში ფაქტიურად შესახებ, თქვენ შეგიძლიათ გამოყენება საკმაოდ მარტივია სინტაქსი. შეიძლება ითქვას, SELECT, ვთქვათ, ვარსკვლავი, სადაც ვარსკვლავი ნიშნავს ყველაფერს. მე არ ვიცი, რა გსურთ, ასე რომ უბრალოდ მომეცი ყველა სვეტები მაგიდა მოუწოდა წევრებს, სადაც, და ეს არის ლამაზი. აირჩიეთ მხარს უჭერს რა არის ე.წ. შემასმენელს, რომელიც მოსწონს გზა შესარჩევი რა გსურთ. სად სახელი უდრის ციტირებით unquote Malan. ასე რომ აქ ძალიან, მე ჩართული შიგნით არგუმენტი to PHP ფუნქცია, ხაზი SQL კოდი. და რომ SQL კოდი ეს დრო არის ფაქტიურად აპირებს მოძებნოთ ციტირებით unquote Malan. ახლა, რომ ეს არ არის ყველა, რომ სასარგებლო, ამიტომ მე ვაპირებ გაფართოებული რომ და მე ვაპირებ გაიტანა ეს წვერი Brady, და წავიდეთ და plug-in ნაცვლად კითხვის ნიშნის აქ. ასე რომ, უბრალოდ უნდა იყოს მკაფიო, რა უნდა ჩემი მეორე არგუმენტი უნდა თუ ვინმე უბრალოდ შესული და მე გსურთ შეამოწმოთ, თუ იგი ფაქტიურად ხარ? აუდიტორია: [INAUDIBLE] დავით Malan: ჰო. მესმის დოლარის ნიშანი ხაზგასმა GET ციტირებით unquote სახელი. და რომ უნდა დამიბრუნდება ნებისმიერ რიგში ჩემს მონაცემთა ბაზაში რომ აქვს მომხმარებლის სახელი Malan. ახლა, იმედია, მე ვაპირებ, რომ მიიღოთ უკან ნულოვანი თუ Malan ის არასოდეს ყოფილა აქ, ან ერთი, თუ მას აქვს. მე არ უნდა დავუბრუნდეთ ორი ან სამი ან ოთხი. რატომ? აუდიტორია: [INAUDIBLE] დავით Malan: მე ვთქვი, უნიკალური, არა? უბრალო მიზეზის გამო. იმის გამო, რომ მე ვთქვი, ის მიიღო იყოს უნიკალური, უბრალოდ ლოგიკურად, თქვენ შეგიძლიათ მხოლოდ ნულოვანი ან ერთი Malans ამ კონკრეტულ მონაცემთა ბაზის ცხრილში. ახლა, როგორც განზე, უბრალოდ, ასე რომ თქვენ ვნახე მას, მიუხედავად იმისა, რომ მე შენარჩუნება გამოყენებით GET და მიუხედავად იმისა, pset6 გამოიყენება მხოლოდ კიდევ, თქვენ, რა თქმა უნდა POST. და გავიხსენოთ, რომ პოსტი სხვა ტექნიკა წარდგენის ინფორმაცია ფორმა, მაგრამ ეს არ გამოჩნდება URL. ეს ცოტა უფრო უსაფრთხო რა თქმა უნდა, რამ, როგორიცაა სახელები და პაროლები, რომელიც pset7 რომელიც, ფაქტობრივად, გულისხმობს. ასე რომ, მოდით გავაკეთოთ ეს PHP MyAdmin და ვნახოთ, რა მოხდება. მე ვაპირებ წასვლა MySQL tab. და შენიშნავს, რომ ნაგულისხმევი მნიშვნელობა PHP MyAdmin, უბრალოდ ცდილობენ იყოს სასარგებლო, არის ასარჩევად ვარსკვლავი წევრებს, სადაც ერთ-ერთი. ისე, ერთი ყოველთვის მართალია, ასე რომ ეს სულელური ეფექტური უბრალოდ აირჩიეთ ყველაფერი. მაგრამ მე ვაპირებ, რომ იყოს პატარა უფრო pedantic და ხელით აკრიფოთ გარეთ SELECT ვარსკვლავი მომხმარებლებს. ახლა ტექნიკურად, თქვენ შეგიძლიათ შეთავაზება სახელი მაგიდები. ეს იშვიათი, რომ თქვენ უნდა, მაგრამ შეამჩნია, რომ ეს არ არის თქვენი ნორმალური შეთავაზებები აშშ-კლავიატურაზე. ეს არის ე.წ. backtick, რომელიც არის ზოგადად ზედა მარცხენა კუთხეში თქვენს კლავიატურაზე. მაგრამ ეს იშვიათი, რომ თქვენ რეალურად უნდა გადაიტვირთოთ, რომ, ასე რომ მე უბრალოდ გამომრჩეს მათ მაინც. ასე რომ, ახლა ნება მომეცით წავიდეთ წინ და მოხვდა წასვლა. და რამდენი რიგები უნდა მივიღო უკან, როდესაც მე აირჩიეთ ვარსკვლავი წევრებს? აუდიტორია: [INAUDIBLE] დავით Malan: სტრიქონების რაოდენობა, დარწმუნებული ვარ. მაგრამ რამდენი ამ კონკრეტული ამბავი ახლა? ორი, რადგან არ იყო მე და იყო Rob. ასე რომ, თუ მე დააწკაპუნეთ წადი, მე ვხედავ ვიზუალურად, რომ მე მიღებული თავში, მართლაც, ორ რიგები. არსებობს ბევრი clutter შესახებ ეკრანზე, მაგრამ მე მხოლოდ ორ რიგები. ამის საპირისპიროდ, თუ მე ეს კიდევ ერთხელ და ნუ SELECT ვარსკვლავი მომხმარებლებს, სადაც სახელი უდრის ციტირებით unquote Malan, ახლა თუ მე დააწკაპუნეთ წადი, მე მხოლოდ აპირებს დაბრუნებას ერთი მწკრივი. და ბოლოს, თუ მე მსგავსი რამ, ვფიქრობ, რომ მე არ აინტერესებს მიღების ყველაფერი, რომელიც არის ერთგვარი უაზრო ახლა, იმიტომ, რომ იქ მხოლოდ ორი სვეტით. ეს იმას არ ნიშნავს რომ მე ვარ შერჩევის დიდი რაოდენობით მონაცემები. დავუშვათ, რომ წავიდეთ წინ და არ SELECT სახელი მომხმარებლების, სადაც სახელი ტოლია Malan, რა ლამაზი SQL პატიოსნად, არის ის, რომ ნამდვილად არ რას გეტყვით, რომ ამის გაკეთება. ეს არის საკმაოდ ლაკონური, მაგრამ თქვენ ფაქტიურად უბრალოდ ვამბობ, რომ ის, რაც თქვენ გსურთ. აირჩიეთ სახელი წევრებს, სადაც სახელი ტოლია Malan. და ეს ნამდვილად ის არის, რომ გამოკვეთილ. ასე რომ, ახლა თუ მე მოხვდა წადი, რამდენი რიგები ვარ აპირებს დაბრუნებას? ერთ-ერთი, იმიტომ, რომ ეს მხოლოდ Malan, იმედია. ან ნულოვანი თუ ის არ არის არსებობს, მაგრამ ერთი მაქსიმალურად. და რამდენი სვეტების დავიბრუნებ? რამდენი სვეტების? ამჯერად, მე უბრალოდ აპირებს მიიღოს ერთი იმიტომ, რომ მე არ აირჩიეთ ვარსკვლავი, რომელიც ყველაფერს. ახლა მე შერჩევისას მხოლოდ სახელი, ამიტომ მე უბრალოდ დავუბრუნდეთ ერთი სვეტი და ერთი ზედიზედ. და ეს გამოიყურება ერთგვარი სათანადოდ სასაცილოა, უბრალოდ ეძებს super პატარა მოსწონს ეს. ასე რომ, რა ხდება რეალურად? როდესაც თქვენ შეასრულოს SQL შეკითხვის გამოყენებით აირჩიეთ, რა თქვენ მისაღებად უკან მონაცემთა ბაზიდან ჰგავს დროებითი მაგიდა რიგები და სვეტები, შესაძლოა, მაგრამ, რომ გამომრჩეს, რომ არაფერი არ იყო რეალურად მიერ შერჩეულ თქვენ. ასე რომ, ეს იგივეა, თუ ვინმეს ჰქონდა დიდი ცხრილების ყველა სტუდენტები რეგისტრირებული გარკვეული სტუდენტი ჯგუფი, და თქვენ ამბობთ, მომეცი ყველა პირველკურსელთა, რომლებიც უკვე რეგისტრირებული ჩვენი სტუდენტური ჯგუფი, რა თქვენი კოლეგა სტუდენტი ჯგუფი შეიძლება გავაკეთოთ არის, რომ მათ შეეძლოთ მხოლოდ გადასცემს თქვენ მთელი ცხრილების. ეს იგივეა, თითქოს ამბობდა აირჩიეთ ვარსკვლავი. და ეს ცოტა შემაშფოთებელი თუ თქვენ მხოლოდ სურდა პირველკურსელთა. ასე რომ, თუ თქვენ ნაცვლად განაცხადა, აირჩიეთ ვარსკვლავი მონაცემთა ბაზის ცხრილში სადაც წლის უდრის ციტირებით unquote freshman, ეს თითქოს თქვენს მეგობარს სტუდენტი ჯგუფი ფაქტიურად ხაზგასმული და გადაწერა მხოლოდ პირველკურსელთა რიგები, გაკრული მათ ახალი Google ცხრილების ან Excel ფაილი, და გადასცა თქვენ უკან შედეგად ფაილი მხოლოდ. ეს არის ის, რომ აპირებს on კონცეპტუალურად აქ. და ბოლოს, ჩვენ შეგვიძლია გავაკეთოთ ზოგიერთი საკმაოდ ლამაზი რამ შენახვის რამ, როგორიცაა სახელები და პაროლები და ასე შემდეგ. მაგრამ, თურმე, ჩვენ უნდა გავაკეთოთ ცოტა განსხვავებულად, ვიდრე ეს. ეს არ არის, რომ ჭკვიანი მხოლოდ შესანახად სახელი და პაროლი. ვიღაცამ ადრე, მე ვფიქრობ, აქ, შესთავაზა ID. ახლა ID შეიძლება იყოს, როგორც ჰარვარდის ID ან იელის წმინდა ID, მაგრამ ეს შეიძლება იყოს უფრო მარტივი ამ მომენტისთვის ჩვენს ბაზაში შემთხვევაში. მართლაც, საერთო საქმე არის კიდევ ერთი სვეტი. და მე ვაპირებ წასვლა წინ და შეცვალონ ჩემი მაგიდა. და თუ თქვენ ითამაშოს გარშემო ამ ინტერფეისით pset7, თქვენ ნახავთ, რომ თქვენ შეგიძლიათ ნახოთ ამ ღილაკს აქ და დაამატოთ სფეროში დასაწყისში მაგიდაზე. და ახლა თუ მე დააწკაპუნეთ წადი, ის აპირებს მომეცი ერთი იმ ფორმით ადრე. მე ვაპირებ, რომ დაამატოთ სფეროში მოუწოდა ID. და მე ვაპირებ, რომ მას რიცხვითი ტიპის. მე მაქვს მთელი bunch ღირებულებათა Numerics. მე უბრალოდ აპირებს აირჩიოს INT და არ ინერვიულოთ შესახებ განსხვავებული ზომის. მე არ უნდა მიუთითოთ სიგრძე და მნიშვნელობა, იმიტომ, რომ ეს იქნება 32 ბიტი არ აქვს მნიშვნელობა რა. ატრიბუტები, ჩვენ არ ვხედავთ, ადრე. ნებისმიერი ინტერესი ნებისმიერ ამ მენიუ ვარიანტი ამ დროს? Int? რას შესთავაზოს? არ არის? რაიმე ამ აზრი? ჰო. ჰო, ხელმოუწერელი, არა? საერთოდ, თუ ჩვენ ვაპირებთ, რათა ყველას უნიკალური ნომერი, რომელიც არის, სადაც ეს ამბავი აპირებს, მე ნამდვილად მხოლოდ მინდა ადამიანს ჰქონდეს ნომერი, როგორც ნულოვანი და ერთი და ორი და სამი და ოთხი. მე არ უნდა გაუმკლავდეთ უარყოფითი ნომრები. უბრალოდ, როგორც ჩანს, როგორც გაუმართლებელი სირთულის. მინდა ოთხი მილიარდი შესაძლო მნიშვნელობებია, ოთხი მილიარდი შესაძლო მნიშვნელობებია, ასე რომ მე უბრალოდ გაორმაგდა სიმძლავრე ჩემი INT. როგორც განზე, თუ გვინდა, რომ ეხებოდეს ეს რაღაც Facebook, უკან ერთგვარი ჩემი დღე, როდესაც Facebook პირველად გამოვიდა, მე მჯერა, რაც იყო გამოყენებით მათი MySQL მონაცემთა ბაზის შესანახად მომხმარებლის იდენტიფიკატორი, იყო მხოლოდ INT. მაგრამ, რა თქმა უნდა, არსებობს ბევრი რეალური ადამიანი მსოფლიოში. არსებობს უამრავი ყალბი Facebook ანგარიშები მსოფლიოში. ასე რომ, საბოლოოდ, Facebook overflowed ზომა INT, ოთხი მილიარდი მნიშვნელობა. სწორედ ამიტომ, თუ გადავხედავთ გარშემო და იქ საიტები რომ შემიძლია გითხრათ, რა თქვენი უნიკალური ID არის. და თუ თქვენ არასოდეს აირჩია მომხმარებლის სახელი Facebook, თქვენ ნახავთ თქვენი უნიკალური ID. მე ვფიქრობ, რომ ეს ნახვა dot PHP კითხვის ნიშნის ID უდრის რაღაც. ეს არის რაღაც დიდი INT, ან ხანგრძლივი ხანგრძლივი თუ გნებავთ, რომელიც არის 64-bit მნიშვნელობა ან რამე შედარებით. ასე რომ, თუნდაც რეალურ სამყაროში გავაკეთოთ ეს საკითხები, საბოლოო ჯამში, ზოგჯერ აქვს. და აღმოჩნდება, რომ აქ, თუ მე ვაძლევთ ყველა ჩემი მომხმარებლებს უნიკალური ID, მინდა იყოს სუპერ სიცოცხლისუნარიანობა და მინიმალურად, რათა ამ სფეროში უნიკალურია. მაგრამ აღმოჩნდება, რომ არსებობს ერთი ნაჭერი ნომენკლატურა დღესაც რომ არის პირველადი გასაღები. თუ თქვენ დიზაინისა მონაცემთა ბაზაში მაგიდა და თქვენ იცით, წინასწარ რომ ერთ-ერთი გრაფა, რომ მაგიდასთან უნდა და ცალსახად იდენტიფიცირება რიგები მაგიდა, გსურთ დააკონკრეტა და გითხრათ, მონაცემთა ბაზა, ეს არის ჩემი პირველადი გასაღები. ამას შეიძლება ეგზ სხვა სფეროებში, მაგრამ მე გეუბნებით მონაცემთა ბაზა, რომელიც ამ ჩემი დაწყებითი, ჩემი ყველაზე მნიშვნელოვანი სფეროში, რომ გარანტირებული იყოს უნიკალური. ახლა, ეს, როგორც ჩანს, გადაჭარბებული. მე ახლა ვთავაზობთ, რომ ჩვენ რჩეულებში დაჭერით Save აქ, სფეროში called-- და მე ვაპირებ წავიდეთ წინ და დააჭირეთ AI, ჩვენ დავბრუნდებით რომ ამ მომენტში, შენახვა. მე ვთავაზობ, ახლა რომ ჩემი მაგიდა გამოიყურება. მაქვს INT სფეროში მოუწოდა ID, არის char სფეროში მოუწოდა ნიკი, Varchar სფეროში მოუწოდა სახელი, მაგრამ ID, თუ ის პირველადი და, შესაბამისად, უნიკალური, რატომ უბრალოდ დაკარგავთ შემოგვაქვს რა ეფექტურად მეორე უნიკალური სფეროში მოუწოდა ID, რომ არის INT? ნიკი იხსენებენ, იყო უკვე უნიკალური, ჩვენ ვთქვით. ასე რომ, უბრალოდ ლოგიკურად, თქვენ არ უნდა ნებისმიერი მონაცემთა ბაზაში გამოცდილება მიზეზი ამ გზით, თუ რატომ შეიძლება მე არ გააცნო int როგორც ჩემი უნიკალური იდენტიფიკატორი ისევე? რა ამას ამბობენ, კიდევ ერთხელ? აუდიტორია: [INAUDIBLE] დავით Malan: შემთხვევითი ხელმისაწვდომობის ადვილია, რატომ? აუდიტორია: [INAUDIBLE] დავით Malan: ჰო, ეს უბრალოდ წვდომის ნომრები. ასე რომ, თუ თქვენ ფიქრობთ, რომ ეს ნამდვილად მაგიდა, როგორიცაა მასივი, ახლა მე მაქვს უნიკალური იდენტიფიკატორები რომ მე შემიძლია ხტომა გარშემო. და სჯობს, რომ ჯერ კიდევ არის ის, რომ რამდენად დიდი არის int იქნება ისევ? 32 ბიტი ან ოთხი ბაიტი. რამდენად დიდი არის ჩემი სახელი იქნება? მაქსიმალურად? 16 ბაიტი. ასე რომ, თუ თქვენ ნამდვილად ზრუნავენ შესრულება თქვენი კოდი, ვფიქრობ, უკან Pset5, რომ თქვენ გსურთ მოძიება ოთხი ბაიტი ღირებულება ან 16 byte ღირებულება, არა? ეს ნამდვილად არ არის ისეთი მარტივი, როგორც, რომ. თქვენ უნდა გავაკეთოთ ოთხჯერ იმდენი მუშაობა მოძებნოთ სახელისა, რადგან იმ 16 ბაიტი. ასე რომ, თქვენ უნდა სიტყვასიტყვით შევადარებთ ყველა 16 ბაიტი უნდა იყოს დარწმუნებული ვარ, დიახ, ეს არის სახელი მინდა. ვინაიდან ამისთვის INT, თქვენ შეგიძლიათ ამის გაკეთება მხოლოდ ოთხი ბაიტი. და როგორც განზე მათთვის დაინტერესებული კომპიუტერული ტექნიკა, გამოდის, რომ თქვენ შეუძლია მოერგოს რაღაც int ან 32-bit ღირებულების რაღაც ეწოდება რეესტრში კომპიუტერი CPU, რაც იმას ნიშნავს, სუპერ, სუპერ სწრაფი, თუნდაც ყველაზე დაბალი დონე კომპიუტერის ტექნიკა. ასე რომ, არსებობს მხოლოდ უპირატესობა გარშემო. ასე რომ, რას ნიშნავს ეს? სინამდვილეში, როდესაც თქვენ დიზაინისა მონაცემთა ბაზის ცხრილში, თითქმის ყველა დროის აპირებთ თუ არა გაქვთ მხოლოდ მონაცემების აინტერესებს, არამედ რაღაც უნიკალური იდენტიფიკატორი იმიტომ, რომ ეს აპირებს მოდით გავაკეთოთ სხვა რამ. და მოდით მოგზაურობა დასრულდა ერთი პრობლემა აქ. ვარაუდობენ, რომ წევრებს არ აქვთ მხოლოდ სახელისა და სახელები, მაგრამ მათ აქვთ რამ, როგორიცაა ქალაქებში და სახელმწიფოებს და საფოსტო კოდები, მინიმუმ აქ, აშშ. ასე რომ, მე ვაპირებ წავიდეთ წინ და მხოლოდ მაშინ შეიძლება ითქვას, მომეცი კიდევ სამი სვეტები ბოლოს მაგიდასთან. და ეს იქნება ქალაქი, ეს იქნება სახელმწიფო, და ეს იქნება Zip. ახლა City, რა ტიპის მონაცემები უნდა იყოს ეს, ალბათ? Varchar? მე არ ვიცი, რა გრძელი სახელი ქალაქში. სადღაც ამერიკაში, იქ ალბათ ზოგიერთი ridiculously გრძელი სიტყვა, ასე რომ, მოდით უბრალოდ წავიდეთ ერთად 255, გარკვეულწილად ისტორიულად ან თვითნებურად. სახელმწიფო, თუ რა უნდა გავაკეთოთ? გადაწყვეტილება ზარის, არა? რა არის ალბათ ყველაზე ეფექტური? რამდენი გმირები? შესაძლოა მხოლოდ ორი, შევძლებთ თუ არა მიიღოს away მასთან აკეთებს მხოლოდ, როგორიცაა, MA მასაჩუსეტსის და სხვ. ასე რომ, მე ვაპირებ წავიდეთ CHAR ღირებულება ორი. Zip კოდი საინტერესო ერთი. ჩვენ აქ 02138, ისე, რომ ვარაუდობს, ჩვენ უნდა გამოვიყენოთ რა? ეს არის INT, არა? INT, INT, მოკლე? შემოკლებული იმუშავებს. არ არის? CHAR ან ხუთი, მაგრამ მინდა INT. რატომ დააყენებს უკან int? დამარწმუნებს ამ. რა არის სულელური შესახებ INT, ჩემი იდეა? ჰო. აუდიტორია: დასჭირდეს მეტი მეხსიერება. დავით Malan: დასჭირდეს მეტი მეხსიერება. ოთხი ბაიტი, მაგრამ თქვენ სთავაზობს ZIP კოდი ხუთ bytes ან ვინმე იყო, როგორც CHAR, რომელიც იგრძნობა eh, რომ ნამდვილად არ არის იმ შემთხვევაში. ისე, სახალისო ამბავი. წლების წინ, როცა მე გამოიყენოს Microsoft Outlook ჩემი ელექტრონული ფოსტის, მე საბოლოოდ სურდა გადავიდეს Gmail. ასე რომ, მე ექსპორტზე ყველა ჩემი კონტაქტების Outlook, როგორც CSV ფაილი. მძიმით გამოყოფილი მნიშვნელობები, რომელიც მხოლოდ იმას ნიშნავდა, მე ჰქონდა ყველა ჩემს მეგობრებს სახელები და ბოლო სახელები და ტელეფონის ნომრები და საფოსტო კოდები და ყველა რომ. და მერე გააკეთა შეცდომა გახსნის it up Excel, რომელიც არის ცხრილების პროგრამას, რომელიც ესმის CSV ფაილი, როგორც ჩვენ ვნახეთ. მაგრამ შემდეგ, მე უნდა მოხვდა, როგორიცაა, Command ან კონტროლის S ერთ მომენტში. და Excel, როგორც ჩანს, იმ დროს, ჰქონდა მხატვრული რომლის დროსაც ნებისმიერ დროს დაინახა ნომერი, ის ცდილობდა იყოს სასარგებლო. და თუ ნომერი დაიწყო zeros, რომ ის უბრალოდ მოშორება მათ. რატომ გვჭირდება წამყვანი zeros მთელი რიცხვები? ისინი უაზრო, მათემატიკურად. ისინი არ არის უაზრო წელს აშშ საფოსტო სისტემა. ასე რომ, მე მქონდა წლების განმავლობაში, ამ დღეს, მე მაინც მეგობრები, როდესაც იშვიათი შემთხვევაა, რომ მე უნდა ვინმეს ამ დღეებში, მე მაინც ვხედავ, რომ მე აქვს მეგობარს კემბრიჯში, Massachusetts, 2138. და ეს არის შემაშფოთებელი, თუ თქვენ ცდილობს დასალაგებლად პროგრამულად გენერირება კონვერტების ან უბრალოდ jot მას. და ეს იმიტომ, რომ ამ მიზეზით, მე აირჩია არასწორი მონაცემები ტიპის. ასე რომ, მე მიყვარს თქვენი იდეა. მოდით გამოიყენოთ CHAR სფეროში. ხუთი პერსონაჟი, გარდა არ არის კუთხეში შემთხვევაში. თუ თქვენ ჯერ კიდევ ფოსტის გაგზავნა, ზოგჯერ zip კოდები ამ დღეებში, ისინი, ისევე, პლუს ოთხი. ასე რომ, ჩვენ უნდა დეფისი და შემდეგ ჩვენ გვჭირდება კიდევ ოთხი ნომრები. ასე რომ იყოს პატიოსანი, მას შეეძლო წასვლა სხვადასხვა გზები. ახლა, მე ვაპირებ შენარჩუნება ეს მარტივი და მე მხოლოდ ვაპირებ ვთქვა, რომ ეს არის ხუთ CHAR მნიშვნელობა და ჩვენ აპირებს გამოტოვოთ მთელი dash პლუს ოთხი. მაგრამ ეს არის სახის tradeoffs. და შეგიძლიათ წარმოიდგინოთ, რომ იგივე პრობლემები, რომლებიც წარმოიქმნება ტელეფონის ნომრები ან სხვა სფეროებში. და ახლა, ეს არის რეალურად სულელური გზა დაცემას. დავუშვათ, როგორც Rob და მე და ჰანა და მარია და [? Davon?] და ენდი და სხვა პერსონალის ყველა ცხოვრობს კემბრიჯი, მასაჩუსეტსი, 02138. ეს რეალურად იგრძნობს, სულელური, რომ მე ვარ და დასძინა, რომ ჩემი მომხმარებლებს მაგიდა, ქალაქი, სახელმწიფო, და zip. რატომ? აუდიტორია: [INAUDIBLE] დავით Malan: ამბობენ, რომ კიდევ ერთხელ? აუდიტორია: [INAUDIBLE] დავით Malan: ისინი ყოველთვის აპირებს წავიდეთ ერთად, არა? როდესაც აღმოჩნდება, რომ, ჩვენ უნდა ვიფიქროთ, ეს იყო შემთხვევა, სანამ ჩვენ ამომწურავად ჩხრეკა მთელი აშშ, და აღმოჩნდება, რომ არსებობს ზოგიერთი შეუსაბამობა სადაც მრავალი ქალაქებში აქვს იგივე zip, რომელიც არის უცნაური. მაგრამ, თუ ჩვენ ითვალისწინებს ახლა რომ 02138 ყოველთვის კემბრიჯი, მასაჩუსეტსი, რატომ მთელს მსოფლიოში, რომ თქვენ შესანახად თქვენს მონაცემთა ბაზაში კემბრიჯის და სამაგისტრო და 02138 ჩემთვის და Hannah და რობ და ამისთვის [? Davon?] და სხვები, რომლებიც ცხოვრობენ აქ Cambridge, ეს შესანიშნავად გადაჭარბებული. ჩვენ უნდა მიიღოს დაშორებით მხოლოდ შენახვის, რა? უბრალოდ zip კოდი. მაგრამ შემდეგ, თუ ჩვენ ვინახავთ მხოლოდ ZIP კოდი, მე მინდა, ალბათ, ჩემი ნახვა უნდა იცოდეს, სადაც 02138 არის. ასე რომ, მე უნდა კიდევ ერთი მაგიდა. და რომ კარგადაა. და სინამდვილეში, ეს არის ერთ-ერთი დიზაინი პროცესების დიზაინისა მაგიდები ის, რომ თქვენ ამის გაკეთება pset7, ისევე, რომლის დროსაც გსურთ ფაქტორი საერთო მონაცემები. ისევე, როგორც ჩვენ უკვე ფაქტორინგული საერთო კოდი და ფაქტორინგი საერთო სტილის CSS, აქ ძალიან მონაცემთა ბაზაში, თუ მე მხოლოდ უნდა 02138 ცალსახად იდენტიფიცირება ვინმეს მშობლიურ, არ შესანახად კემბრიჯის, მასობრივი ყველა darn შესახებ თქვენს მაგიდასთან. ამის ნაცვლად, აქვს ცალკე მაგიდა სახელწოდებით Zips, რომ რა უნდა სვეტები? ალბათ ID სფეროში, უბრალოდ იმიტომ, რომ პრინციპები, ჩვენ ვსაუბრობთ ახლა. ალბათ zip სფეროში 02138. და მერე, ალბათ, სხვა რა სვეტები? ქალაქი და სახელმწიფო, მაგრამ მხოლოდ ერთი ზედიზედ 02138, ერთი რიგის 02139, ერთი რიგის 90210. და ეს არის ფაქტიურად ყველა საფოსტო კოდები ვიცი. ახლა, რა შეგიძლიათ გააკეთოთ? ეს არის პრობლემატური, რადგან ახლა მაქვს ორ მაგიდას. ასე რომ, ჩემი წევრებს, ძირითადად, სწორედ აქ, მაგრამ მათი ქალაქი სახელმწიფო საინფორმაციო არის აქეთ. ასე რომ, თურმე ერთად SQL, არსებობს რეალურად გზას შეუერთდება ინფორმაციით, და თქვენ ხედავთ, ამ PSet. მაგრამ აღმოჩნდება, რომ თქვენ შეგიძლიათ რაღაც მოსწონს ეს. SELECT ვარსკვლავი მომხმარებლებს, შემოგვიერთდით zip არქივის ON მომხმარებლის dot zip ტოლია zip არქივის dot zip. რომელიც არის პატარა wordy, მართლაც, მაგრამ ეს მხოლოდ ნიშნავს აირჩიეთ ყველაფერს პროცესს ჩემი მომხმარებლებს მაგიდა და ჩემი zip არქივის მაგიდასთან. შეუერთდებიან ერთი სფეროში აქვთ სვეტი. ასე რომ, ფაქტიურად თავისსავე ასე, და მომეცი უკან ახალი დროებითი მაგიდა რომ არის ფართო, რომ უფრო დიდი, რომ აქვს ყველა სვეტების ორივე მათგანი. და რომ, უბრალოდ, იქნება სინტაქსი აკეთებს რაღაც მსგავსი. ასე რომ, არ არის ეს წინ, მაგრამ იქ უნდა იყოს სხვა დიზაინის გადაწყვეტილებები თქვენ უნდა მიიღოს, არა მხოლოდ ინდექსები არამედ გაშვებული შევიდა გამოწვევებს. ფაქტობრივად, არ არსებობს გამოწვევა ნებისმიერი მონაცემთა ბაზაში დიზაინი რომლის დროსაც ზოგჯერ ორი ადამიანი დაგვჭირდება წვდომის იგივე რიგები მონაცემთა ბაზა მაგიდა. ასე რომ, ეს არის ის, რასაც ჩვენ გამოგიგზავნით ექმნებათ pset7 ისევე. მაგრამ მე მინდა შევხედოთ ერთი თავდასხმა, რომ შესაძლებელი იყო SQL. რა არის ზოგიერთი პრობლემა, რომელიც შეიძლება წარმოიშვას? ასე რომ, თქვენ ექმნებათ ამ pset7. და ჩვენ გეტყვით, აშკარა, თუ რა კოდირების გადაწყვეტა ამ პრობლემის არის. მაგრამ თუ თქვენ მიიღოს უმაღლესი დონის კლასი, განსაკუთრებით ოპერაციული სისტემები, თქვენ აპირებს ექმნებათ საკითხი Atomicity, პრობლემა ცდილობს გააკეთოს მრავალი რამ ერთდროულად შეუწყვეტლად. და მეგონა, მე მინდა წარმოგიდგინოთ ამ იდეა pset7 მეტაფორა რომ გავიგე, თავს Margo Seltzer ის CS164 ოპერაციული სისტემები კლასი წლის წინ. დავუშვათ, რომ თქვენ ერთი ამ საერთო საცხოვრებელში მაცივრები თქვენი საცხოვრებელი ოთახი ან სახლი, და თქვენ გაქვთ რეალური მიდრეკილება რძე. ასე რომ, თქვენ მოვიდა სახლში კატეგორიები ერთ დღეს, თქვენ გახსნა მაცივარი. ოჰ, რა იგი. არ არსებობს რძის მაცივარი. ასე რომ, თქვენ დახურეთ მაცივარი, კარის ჩაკეტვა, დაიბლოკოს თქვენი საერთო საცხოვრებელი, ფეხით გარშემო კუთხეში რომ CVS, მიიღონ ხაზი, და დაიწყოს შემოწმების out ზოგიერთი რძე. და ის აპირებს, ხოლო, იმიტომ, რომ ეს რა თვითმმართველობის checkout მრიცხველები სამუდამოდ გამოიყენოს მაინც. ასე რომ, იმავდროულად, თქვენი roommate მოდის სახლში. იგი ნამდვილად უყვარს რძე, ასევე. ისინი მოვიდეს საცხოვრებელი ოთახი, გავხსნათ მაცივარი, oh, darn ეს. არ არსებობს უფრო მეტი რძე. ასე რომ, მას ასევე მიდის გარშემო კუთხეში. მაგრამ ახლა, მას შემდეგ, რაც იქ, როგორც ორი ან სამი ან ოთხი CVSes მიმდებარე ტერიტორიაზე, ისინი არ უნდა წავიდეს ერთი სხვადასხვა პირობა მოედანზე. ასე რომ, ახლა, რამდენიმე წუთში შემდეგ, როგორც თქვენ მოვა სახლში და ugh, უარესი პრობლემა ოდესმე. ახლა თქვენ გაქვთ ძალიან ბევრი რძე იმიტომ, რომ ის აპირებს წავიდეს მაწონი. და გსურთ რძე, მაგრამ თქვენ არ მიყვარს რძე. ახლა, ეს იყო ძვირი შეცდომა, რადგან, როგორც თქვენ მიიღო გადაწყვეტილება ეფუძნება სახელმწიფო ზოგიერთი ცვლადის რომ იყო პროცესში იცვლება თუ არა, ინიციატორი აპირებს მიიღოს რძე. ასე რომ, რა არის, ალბათ, ადამიანის გამოსავალი, რომ პრობლემა? აუდიტორია: [INAUDIBLE] დავით Malan: დატოვე შენიშვნა, არა? ყოველთვის დატოვონ შენიშვნა, თუ თქვენ იცნობს, რომ შოუ. დიახ, არსებობს ორი ჩვენგანი. ასე რომ, ყოველთვის დატოვონ შენიშვნა, ან ფაქტიურად ჩაკეტვა მაცივარი გარკვეული სახის ბოქლომი ან რაღაც ზე ზევით, როგორიცაა, რომ. მაგრამ ეს რეალურად იქნება მთავარი პრობლემა მონაცემთა ბაზის დიზაინი, განსაკუთრებით მაშინ, როდესაც თქვენ შეიძლება ჰქონდეს სხვადასხვა ბრაუზერები, მრავალი ლაპტოპები, მრავალჯერადი მომხმარებლებს ყველა ცდილობს განაახლოთ ინფორმაცია ერთდროულად. განსაკუთრებით მგრძნობიარე ინფორმაცია ფინანსური ინფორმაცია, რომლის დროსაც ერთად სავაჭრო ნახვა როგორც თქვენ მშენებლობის, თუ თქვენ გსურთ შეამოწმოთ რამდენად ფული თქვენ და თუ თქვენ გაქვთ საკმარისი, ყიდვა ზოგიერთი საფონდო? მაგრამ რა, თუ ვინმე სხვა ვინც აქვს ერთობლივი ანგარიში თქვენ იმავდროულად ცდილობს ყიდვა ზოგიერთი საფონდო? ასე რომ, იგი შემოწმების ანგარიშის ბალანსი, როგორც თქვენ დავუბრუნდეთ იგივე პასუხი, არ არსებობს რძე. ან ორივე თქვენ დავუბრუნდეთ პასუხი, თქვენ გაქვთ $ 100 ანგარიშზე. როგორც თქვენ ცდილობენ, რომ გადაწყვეტილება ყიდვა ერთი წილი ზოგიერთი კომპანია საფონდო. და ახლა, რა ხდება? თქვენ გაქვთ ორი აქციები? თქვენ არ გაქვთ აქციები? პრობლემები, როგორიცაა, რომელიც შეიძლება წარმოიშვას. ასე რომ, ჩვენ ექმნებათ, რომ. SQL ინექცია თავდასხმები, საბედნიეროდ, არის რაღაც ჩვენ დაგეხმაროთ, მაგრამ ეს არის atrociously საერთო ამ დღეებში მაინც. ასე რომ, ეს არის მაგალითი. მე არ აცხადებს, რომ ჰარვარდის PIN სისტემა დაუცველი ამ კონკრეტულ თავდასხმა. ჩვენ შევეცადეთ. მაგრამ, თქვენ იცით, რომ ჩვენ აქვს სფეროში მოსწონს ეს. და იელის წმინდა ID აქვს მსგავსი ეძებს ეკრანზე ამ დღეებში. და აღმოჩნდება, რომ, შესაძლოა, PIN სისტემაში ხორციელდება PHP. და თუ ეს ვიყავით ეს not-- ისინი შეიძლება აქვს კოდი, რომელიც ასე გამოიყურება. მათ აქვთ ორი ცვლადი. მომეცი სახელი და პაროლი პოსტი სუპერ გლობალური ცვლადი რომ ჩვენ ვისაუბრეთ ადრე. იქნებ ჰარვარდის აქვს შეკითხვის როგორც SELECT ვარსკვლავი მომხმარებლები სადაც სახელი უტოლდება, რომ და პაროლი შეადგენს, რომ. და შენიშნავს, რომ მე მხოლოდ ჩართვის ის გამოყენებით Curly გაუწიოს notation სხვა დღეს, რაც იმას ნიშნავს, უბრალოდ შეაერთედ მნიშვნელობა აქ. მე არ გამოყენებით კითხვის ნიშნის ტექნიკით. მე არ მაქვს არანაირი მეორე ან მესამე არგუმენტები. მე უბრალოდ სიტყვასიტყვით მშენებლობის სიმებიანი თავს. პრობლემა, თუმცა, ის არის, რომ თუ ვინმე მინდა scroob, რომელიც არის მინიშნება ფილმი, ჟურნალი ერთად რაღაც მსგავსი, და მე ამოღებულ წერტილები რომელიც, როგორც წესი დაფაროს პაროლები, რა, თუ იგი არ არის განსაკუთრებით მუქარის და მისი დაგავიწყდათ იქნებ არის 12345, თითო ფილმი სახელწოდებით "Spaceballs" მაგრამ მან კრიტიკულად ტიპები ერთ პასუხის შემდეგ ხუთი, მაშინ ფაქტიურად, სიტყვა ან სივრცეში, და შემდეგ ციტირებით unquote ერთი უდრის პასუხის ერთი, მაგრამ შეამჩნია ის გამოტოვებული რა? ის გამოტოვებული პასუხის მარჯვენა და ის გამოტოვებული პასუხის მარცხენა. იმიტომ, რომ თუ ეს თავდამსხმელი scroob ის პრეზუმფციის ის არის, რომ ხალხი, ვინც წერდა ამ PHP კოდი არ იყო იმდენად ნათელი, შესაძლოა, ისინი მხოლოდ გარკვეული ერთი მოჰყავს გარშემო ინტერპოლაცია ცვლადი in curly braces? ასე რომ, შესაძლოა, მას სახის სრული მათი აზრის მათთვის, მაგრამ ისე, რომ აპირებს დაე კალენდარი შევიდა PIN სისტემა. სხვა სიტყვებით, ვფიქრობ, რომ ეს არის კოდი და ახლა ჩვენ შეაერთედ რა scroob აკრეფილი. და ეს წითელი, იმიტომ, რომ ეს ცუდია. და ძირითადი ტექსტი არის ის, რაც აკრეფილი, scroob შეეძლო Trick ჰარვარდის სერვერზე შევიდა აშენებს SQL query სიმებიანი რომ ასე გამოიყურება. პაროლი უდრის 12345 ან ერთი უდრის. შედეგი, რომელიც, ლოგიკურად, არის, რომ ეს იქნება შეხვიდეთ scroob იმ შემთხვევაში, თუ მისი პაროლი 12345 ან თუ ერთი ტოლობის ერთ-ერთი, რომელიც რა თქმა უნდა, ყოველთვის ასეა, რაც იმას ნიშნავს, scroob ყოველთვის იღებს. ასე რომ, გზა დაფიქსირება ამ, როგორც ბევრი შემთხვევა, იქნება წერა დაცვას. იმისათვის, რომ გამოიყენოთ რაღაც ჩვენი ფაქტობრივი შეკითხვის ფუნქცია, რომელიც დაინახავთ pset7, სადაც ჩვენ შეაერთედ რაღაც კითხვის ნიშნები აქ. და სილამაზე შეკითხვის ფუნქცია, რომ ჩვენ გაძლევთ არის ის იცავს ამ ე.წ. SQL ინექცია თავდასხმები, სადაც ვინმე არის tricking თქვენი კოდი შევიდა ინექციური საკუთარი SQL კოდი. იმის გამო, რომ ის, რაც შეკითხვის ფუნქცია ჩვენ მოგაწვდით რეალურად გააკეთებს, თუ თქვენ იყენებთ კითხვის ნიშნის სინტაქსი და მეორე და მესამე არგუმენტი აქ, არის რას დავამატოთ შეტანის, რომ მომხმარებელს გათვალისწინებული? ისინი წარმატებული მოჰყავს. ასე რომ, ეს escapes ნებისმიერი პოტენციურად საშიში გმირები. ეს გამოიყურება უცნაური ახლა, მაგრამ ეს არ არის დაუცველი იმიტომ, რომ ეს არ არის შეცვლა ლოგიკა აღარ იმიტომ, რომ მთელი პაროლი ახლა ერთი გაცემა, რომელიც არ არის, ფაქტობრივად, scroob პაროლი. ასე რომ, არსებობს გარკვეული ხუმრობები ამ წლების განმავლობაში. ასე რომ, ეს იყო გადაღებული ფოტო ზოგიერთი geek ავტოსადგომზე რომლის დროსაც თქვენ ალბათ იცით, რომ ზოგიერთ ქალაქებში სახელმწიფოები და ცდილობენ სკანირების თქვენი ლიცენზია დისკო ანგარიშსწორება თქვენ ან ბილეთი თქვენ თუ თქვენ გავლა გარეშე, ისევე, E-Z Pass რამ. ასე რომ, ამ პირის წინააღმდეგ, რომ, შესაძლოა, ადამიანები, წერილობით E-Z Pass სისტემა არ იყო ასე ნათელი, და შესაძლოა, ისინი უბრალოდ concatenated ერთად სიმებიანი, ისე, რომ მას არ შეეძლო ბოროტად არა მხოლოდ შეავსოთ მათი აზრის, მაგრამ რეალურად შეასრულოს ცუდი ბრძანება, რომელიც ჩვენ არ არის ნახსენები არ არის, მაგრამ თქვენ ალბათ შეუძლია გამოიცნოს. რომ გარდა წაშლა და ჩადეთ და განახლება და შერჩევა, არსებობს ასევე სიტყვით მოუწოდა წვეთი, რომელიც ფაქტიურად შლის ყველაფერი მონაცემთა ბაზა, რომელიც განსაკუთრებით ცუდი. ჩვენ შეგვიძლია ზომით ეს თუ ეს არის პატარა მკაცრი ვხედავთ. ეს, ახლა, არის ცნობილი მულტფილმი რომ შესანიშნავად ჭკვიანი ახლა და გასაგები. [სიცილის] ჰო, მაგარი. კეთილი geeking out. ასე რომ, ეს, მაშინ, SQL ინექცია თავდასხმები. და ისინი ისე ადვილია, რათა თავიდან ავიცილოთ გამოყენებით სწორი კოდი ან უფლება ბიბლიოთეკები. და დაინახავთ pset7, რომ ის ამიტომ, ჩვენ გაძლევთ შეკითხვის ფუნქცია. ასე რომ, რამდენიმე teasers რომ გვეგონა ჩვენ გვინდა გაძლევთ აქ ჩვენს დარჩენილი წუთების ერთად. ასე რომ, როგორც გახსოვთ, კვირაში ნულოვანი, ჩვენ გააცნო ამ ორი ნათურებით, რომელიც კარგია, არა მხოლოდ იმიტომ, ისინი საკმაოდ და ფერადი, არამედ იმიტომ, რომ ისინი მხარს უჭერენ რაღაც მოუწოდა API, განაცხადის ინტერფეისი და ამ CS50 ჯერჯერობით, ჩვენ გვაქვს ძირითადად GET და POST, მაგრამ აღმოჩნდება, არსებობს სხვა HTTP ზმნები, როგორიცაა PUT. და სინამდვილეში, ეს იყო სლაიდ კვირაში ნულოვანი რომლის მიხედვითაც, თუ წერთ კოდი, რომელიც აგზავნის a la pset6 HTTP მოთხოვნის, რომ ასე გამოიყურება ეს ბლოკი ტექსტი ბოლოში, რომელსაც JSON, ან JavaScript Object ნოტაცია რომ ჩვენ ვსაუბრობთ მომავალ კვირას, შეგიძლიათ ჩართოთ ან გამორთოთ ან იცვლება ფერი განათება, როგორც იმ. ასე რომ, თუ CS50 ასევე აქვს გარდა ზოგიერთი იმ ნათურები აქ New Haven თუ გსურთ სესხის მათ საბოლოო პროექტები, ასევე ზოგიერთი Microsoft Bands, რომლებიც მოსწონს საათები, რომ თქვენ აცვიათ გარშემო მაჯის რომ ასეთივე აქვს API ასე რომ თქვენ შეგიძლიათ დაწეროთ თქვენი პროგრამული უზრუნველყოფა მათთვის. ჩვენ გვყავს ანგარიში Apple- ის iOS კოდი ისე, იმ შემთხვევაში, თუ თქვენ გაქვთ Apple Watch ან iPhone ან iPad და iPod, თქვენ შეგიძლიათ დაწეროთ კოდი, რომელიც რეალურად გადის იმ. ჩვენ გვაქვს მთელი bunch საქართველოს Arduinos, რომლებიც პატარა კომპიუტერები გარეშე შემთხვევა, არსებითად, რომელიც შეგიძლიათ დაკავშირება მეშვეობით USB, როგორც წესი, საკუთარი Mac ან PC, დაწერა კოდი, რომელიც ეშვება ამ ფიზიკური მოწყობილობა, რომელიც ხშირად აქვთ სენსორები მათ ასე რომ თქვენ შეგიძლიათ ურთიერთქმედება რეალურ სამყაროში. ჩვენ გვაქვს მთელი bunch საქართველოს Leap Motion მოწყობილობები, რომლებიც USB მოწყობილობები Macs და კომპიუტერები, აქ და კიდევ ერთხელ, New Haven. და თუ თქვენ დააკავშირებს მას თქვენს Mac, თქვენ შეგიძლიათ რეალურად აკონტროლოთ თქვენი კომპიუტერის წერილობით პროგრამული უზრუნველყოფა რომ მეშვეობით ინფრაწითელი სხივების, გათვლით, სადაც თქვენი ადამიანის ხელში არიან, კი არ ეხება თქვენს კლავიატურაზე. გვეგონა ჩვენ ავღნიშნო გაუზიაროს სწრაფი ერთი შეხედვით ეს, მაგალითად. [მუსიკის დაკვრა] ასე რომ, ჩვენ გვაქვს მთელი რამოდენიმე ეს ყველაფერი, ძალიან, მოუწოდა Myo arm შემსრულებლები რომელიც დააყენა მეტი მხარის ზემოთ დაიკავეს და შემდეგ შეგიძლიათ აკონტროლოთ უძრავი მსოფლიოს ან ვირტუალურ სამყაროში მოსწონს ეს. [მუსიკის დაკვრა] ან, ასევე გვაქვს Google მუყაო, რომელიც სიტყვასიტყვით, ისევე, მუყაოს ყუთში თქვენ შეეძლო თქვენი სახე, მაგრამ slide თქვენი ტელეფონი შევიდა ასე, რომ თქვენ დააყენა მინის თქვენი ტელეფონი მართლაც ახლოს თქვენს თვალში. და Google მუყაო საკმაოდ იაფი $ 10 ან $ 20. და მას აქვს პატარა ლინზები რომ ოდნავ ცვლის იმიჯი ეკრანზე თქვენი ადამიანის თვალები გადმოგცეთ გრძნობა სიღრმე ასე რომ თქვენ რეალურად აქვს 3D გარემოს წინაშე. ჩვენ ასევე გვაქვს Samsung Gear, რომელიც არის უფრო ძვირი ვერსია, მაგრამ ეს შეიძლება ასეთივე ლღობას წელს Android ტელეფონი და მოგცემთ იმის ილუზია, of-- ან მისცეს გამოცდილება ვირტუალური რეალობა. და ჩვენი საბოლოო ორი წუთი, გვეგონა ჩვენ გვინდა ცდილობენ ამის გაკეთება. თუ შემიძლია პროექტის რა კოლტონი აქვს აქ მხოლოდ whet თქვენი მადა, ნება მომეცით წავიდეთ წინ და სახიფათოა up დიდ ეკრანზე აქ. მიადევნე თვალი მოკვლა განათება. კოლტონი, გინდათ წავიდეთ წინ და ამით თქვენს მობილურ ერთი წუთით და მოდის მეტი შუა ეტაპზე? და არ გსურთ project-- ეს არის ის, რაც კოლტონი ხედავს. ახლა, Wi-Fi აქ არის არ არის იმდენად ძლიერი ამ მოწყობილობის რომ ეს არის სუპერ მყარი, მაგრამ კოლტონი ფაქტიურად ამ ჯადოსნური ფუტურისტულ ადგილი. მან მხოლოდ ხედავს ერთი იმიჯი. თქვენ ხედავს მისი მარცხენა და მარჯვენა თვალის რომ მისი ტვინის stitching ერთად სამ განზომილებიანი გარემოს სახეზე. ის უბრალოდ შერჩეული მენიუ ვარიანტი აქ. ასე რომ, კიდევ ერთხელ, ის ეცვა ამ ყურსასმენის ერთად Samsung ტელეფონი, რომ არის უკაბელო პროექტირება ჩვენი ოვერჰედის. ახლა თქვენ მარსზე, ვფიქრობ? COLTON: მე ასე ვფიქრობ. მე არ ვარ დარწმუნებული [INAUDIBLE]. [სიცილის] დავით Malan: თურმე Mars აქვს ამ მენიუები. COLTON: [INAUDIBLE] ზოგიერთი cool ადგილები, თუ ჩვენ გვინდა წასვლა, რომელთა მიზანია: დავით Malan: სად გვინდა წასვლა? COLTON: [INAUDIBLE] დავით Malan: მოდით ვნახოთ სადაც კოლტონი აღების ახლა. COLTON: [INAUDIBLE] დავით Malan: ასე, რომ იქ ამდენი სხვადასხვა ადგილას შეგიძლიათ მიიღოს თავს. არსებობს FAPIs მეშვეობით, რომელიც შეგიძლიათ წერენ თამაშები და ურთიერთობებზე, აწარმოებს, საბოლოო ჯამში, ტელეფონით. ასე რომ, თქვენ ნამდვილად წერა მობილური ტელეფონი app. თუმცა, პროგრამული უზრუნველყოფა და გრაფიკული შესაძლებლობები, ახლა კოლტონი არის ამ პატარა კოტეჯი. და რისკის აბსოლუტური თავს, კოლტონი და მე გამყარებაში გარშემო ხოლო ბოლოს კლასის დღეს აქ თუ გსურთ ამუშავება და ითამაშოს. და ჩვენ, რათა მათ მომდევნო კვირას, ისევე. გარეშე, ado ეს არის ის დღეს. ჩვენ დავინახავთ, თქვენ მომავალ კვირას. [მუსიკა - Ragga TWINS "ცუდი კაცი"]