>> Wszystko w porządku.
Tak więc, bez zbędnych ceregieli, SQL, Structured Query Language.
Tak, to prawdopodobnie używany w ten najmniej w CS50, może w CS165,
może w swoim własnym osobiste projekty.
I co to SQL pozwala zrobić w SQL Server bardziej ogólnie?
Tak?
[Niesłyszalny Uwaga]
OK, to był bardzo Bezpieczna droga mówiąc to.
Tak. Więc pozwala przechowywanie danych
i co ważniejsze, pozwala do kwerendy dla danych.
I jest to krok do przodu
z pomocą czegoś prostsze jak CSV, prawda.
Przecinek separacji zmiennych.
Podobne wartości.
Podobnie pozwala zapisać Informacje o jeden rząd
w pliku tekstowym.
Ale to, co jest minusem CSV do przechowywania danych,
nawet jeśli skutecznie uzyskać wiersze i kolumny z nim?
Tak.
>> Nie "mają sama organizacja
Wydajność [niesłyszalne].
>> Nie musisz sam efektywność organizacji.
Co masz na myśli?
>> No, jak [niesłyszalne] mają podobne podstawowe [niesłyszalne].
>> OK. Tak.
>> Jest to relacyjna baza danych można mieć wiele baz danych
są połączone ze sobą w bardzo szczególny sposób.
>> OK. Dobry.
>> To [niesłyszalne] ustawić CSV.
>> I niech mnie uszczypnąć trochę terminologii.
Tak wielu tabel w bazie danych, na pewno,
i które wykraczają poza to, co można to zrobić za pomocą jednego pliku CSV.
Ale tak naprawdę ograniczenie z CSV Uważam to
że nieefektywność tego wszystkiego.
Jest bardzo łatwy w układzie.
Ale jeśli chcesz zrobić zapytanie, co jest czas pracy
jakiejkolwiek kwerendy wybierającej na pliku CSV?
Mam na myśli, że to wielki stary [niesłyszalne], Dobrze, bo w najgorszym przypadku,
wzrosły na samym dole.
Nawet jeśli nie sortowane całość CSV, jeśli nie wiesz,
że z góry, dobrze, ty nadal będzie mieć
aby sprawdzić całość.
Tak więc, wśród rzeczy mamy zamiar dostać
używania rzeczywista bazy danych za pomocą języka
jak SQL to możemy zapytać to i my możemy z góry
projektantów baz danych określić, jakie obszary
które prawdopodobnie będzie mieć pytania o to, że ludzie,
w MySQL lub Microsoft czy Oracle,
każdy, kto ma w bazie danych używasz może zrobić wszystko
z ciężkiej pracy zastanawianie się, OK,
podane milionów tych IDS.
Jak możemy układ - je w pamięci?
Jakiś rodzaj drzewa struktura może,
tak, że gdy robisz faktycznie wykonywać Select,
to jest coś, co jest logarytmiczna lub logarytmiczna
z logarytmiczną w czasie, a niż faktycznie przekazanymi
w coś liniowego.
Więc mamy dużo wydajność w ten sposób.
Dużo i możemy również przechowywać więcej Dane łatwiej bo SQL
Serwer jest zazwyczaj przechowywany w pamięci RAM, chociaż części
o to może być zapisane na dysku i prawdopodobnie wiesz już,
że RAM jest zazwyczaj szybciej niż dyski,
tak, to jest dobra rzecz.
Możemy również obsługiwać współbieżności znacznie lepiej.
Jeśli wziąć 165 lub 161, wiesz, że jeśli dwie osoby starają
zrobić to samo jednocześnie w systemie
ogólnie złe rzeczy mogą się zdarzyć.
Zatem, między innymi, że funkcje można uzyskać, jeśli projektujemy nasze stoły
we właściwy sposób jest lepsze wsparcie i bezpieczeństwo
jeśli chodzi o współbieżności.
Tak, dwie osoby w dwóch częściach
świata, stosując takie same Strona www, jeśli oboje starają
kupić coś w sam czas, że zamówienie nie będzie
, aby przejść w tym samym czasie.
W jakiś sposób będą one w odcinkach przez kogoś innego niż nasz -
ktoś inny niż my sami.
Baza danych będzie zrobić dla nas.
Więc kiedy jest to najprostszy,
SQL pozwala nam kwerendy relacyjnej bazy danych.
Relacyjna baza danych jest taki, który zawiera jeden
lub więcej tabel w nim zazwyczaj.
I, jeśli jest to trochę zna,
naprawdę można tylko myśleć od tego, jak Excel lub liczb
lub arkuszy kalkulacyjnych Google.
To po prostu ma wierszy i kolumn i zazwyczaj w górnej części każdej
z tych wierszy zawiera nazwę dla niego.
A więc może to być ID kolumna, kolumna nazwa,
Adresem Kolumny i tak dalej.
I wtedy można mieć wiele takie tabele, jeśli chcesz
rozpocząć układanie różne rodzaje danych.
Ale może pamiętacie co najmniej z CS50, że próbuje
dać GUI Narzędzie [niesłyszalne]
do zarządzania bazą danych.
Nazwano phpMyAdmin.
Więc to tylko zbieg okoliczności, że został napisany w PHP, tak naprawdę,
ale to był tylko internetowy PRZODU do bazy danych.
I za pośrednictwem różnych kartach i linki, można rozpocząć
konfigurowania bazy dla siebie.
Ale dobre narzędzie, aby rozpocząć trochę bardziej komfortowe
z jest Klient wiersza poleceń.
Tak więc, jeśli użyciem urządzenia CS50 czy naprawdę za pomocą dowolnego komputera makro
że ma wiersza poleceń MySQL klienta, można również zrobić to sortowania
od starej szkoły, jak ta.
Tak na marginesie projektu MySQL, co najmniej w wersji open source
o to jest teraz nazywane MariaDB dla różne przyczyny można przeczytać
się na Wikipedii, ale to samo oprogramowanie,
to samo składnia i tak dalej,
niemal tak samo baza kodu.
I tak, kiedy jestem na to poprosi mogę teraz wchodzić w interakcje
z mojej bazy danych wiele więcej ręcznie.
Więc przykładem, pozwól mi iść do przodu
i po prostu otworzyć okno terminalu.
Zdarzyło mi się być przy użyciu CS50 Urządzenia, ale można to zrobić
na każdym systemie, w większości których masz prawo
zainstalowane oprogramowanie.
I mam zamiar zrobić MySQL-u John Harvard dla użytkownika
w tym szczególnym układzie,-P o hasło, że będę wpisać
w nieco bardziej pewnie trafiając Enter.
Teraz mam monit.
Zamierzam wpisać purpura w urządzeniu CS50
i teraz widzę zasadniczo że ten sam ekran.
Ale teraz nie ma polecenia że możemy zacząć pisać
jak pokazują baz danych i że będzie mi pokazać wszystkie
baz danych, które mam Już utworzone w systemie
niemal tak samo lista można zobaczyć w phpMyAdmin.
Jest kilka innych, takich jak Schemat informacje i testy,
które jeśli rozglądamy CS50 urządzenia, możemy ukryć niektóre
z tych tabel niższym poziomie
ale oni byli tam cały czas.
MySQL ma rzeczywiście niski poziom Właściwości takie jak nazwy użytkowników
i haseł do bazy danych Sam, nie dla aplikacji
że może być działa na nim.
Więc z góry, dzisiaj, stworzył kilka baz danych,
z których jedna jest nazywany courses50.
Kursy są niektórzy z was używane Oczywiście CS50 narzędzia handlowe,
który jest duża interfejs Katalog przedmiotów stanu cywilnego.
I to jest rzeczywiście ładny Zbiór danych o tym mówić, bo,
jeden, jesteśmy jakby wszystko oczywiście znane z kursów
i instruktorów oraz spotkanie lokalizacje i wszystkie sortowania
zwykłych rzeczy z uczelni,
ale to też ma pewne ciekawe możliwości
projektu.
Więc myśleliśmy, że będziemy korzystać Pojęcie Katalog przedmiotów
i jako narzędzie do zakupów Przykładem całym dzisiaj do sortowania
z ramką część konstrukcji decyzje, które musimy zrobić.
Więc zacznijmy.
Załóżmy, że tak naprawdę chciał reprezentować super najprostszej
Oczywiście zakupy narzędzi.
I najprostszym na świecie Mogę sobie wyobrazić, a jeden
, w którym przedstawione są przebiegi i tam są instruktorzy.
I załóżmy, do sake dyskusji
Oczywiście, że każdy zawiera co najmniej nazwę.
Warto więc zacząć szkic to.
Zamierzam użyć phpMyAdmin po prostu dla wygody,
więc nie trzeba wpisywać się wszystkie ręcznie zapytań.
Ale jestem tutaj w moim Baza danych courses50.
Jeśli znają to, że będziesz być bardzo proste, gdy nurkujesz
się do własnego projektu jeśli chcesz go używać.
Mam zamiar stworzyć Tabela o nazwie Pola
i mogę tylko myśleć z jednego pola
teraz, nazwa przedmiotu.
Mam zamiar iść do przodu i powiedz mi jedną kolumnę.
Teraz, jak pamiętacie masz interfejs, który jest nieco
jak ten.
I inne góry szczerze z phpMyAdmin jest to, że rodzaj
od siebie i instruowania za pomocą rozwijanego menu można sortować
z zobaczyć, co można decyzje projektowe.
Więc mam zamiar dać co oczywiście nazwa.
To jest nazwa kolumny.
I jak o tego typu danych?
Większość z was powinien wiedzieć, co co najmniej niektóre z tych rodzajów danych
z wcześniejszych doświadczeń.
Co jest właściwe do nazwy przedmiotu?
Sharon?
>> Varchar.
>> OK, varchar, które jest zmienna Char.
I co to oznacza bardziej technicznie?
[Niesłyszalny Uwaga]
OK. Więc jest to ciąg znaków.
I aspekt var z oznacza to, co?
Zmienna. Ale to, co to znaczy?
Tak?
[Niesłyszalny Uwaga]
Dokładnie. Więc jest to zmienna liczba znaków
w ciąg do góry do pewnego maksimum.
Więc tutaj jest nasz pierwszy projektu decyzji.
Aktualnie mamy do decydowania ile bajtów maksymalnie
przydzielić do każdego takiego ciągu.
Ogólnie rzecz biorąc, chcesz jakby nie zbyt małe,
nie sprawiają, że zbyt duży Bo oczywiste
jeśli zbyt mały jesteś tylko zaczynać obcinania danych
i stracisz informacji.
I jeśli jest zbyt duża, jesteś po prostu jakby mówił do bazy danych
się spodziewać i do Więcej danych zoptymalizować
niż może to faktycznie kiedykolwiek.
Więc co jest uzasadnione uczucie Numer w nazwie kursu?
60? OK, więc 60.
To wydaje się dość rozsądna
jak długo nie ma Wyjątki od tej.
Naprawdę nie ma twardy, szybki przepis.
Szczerze mówiąc, na Wiele powodów historycznych
wśród osób wybierze 255 Bo przez lata, że ​​było coś w rodzaju
z domyślnej przy użyciu maksymalnie 8 bajtów - 8 bitów jako swojego licznika.
Ja bym bardziej [niesłyszalne] może użyć uprawnień 2
ale to jakby nieistotne.
Więc możemy iść z 60.
Wydaje się rozsądne, że tak długo
jak to w końcu nie żałuję Bo to jest górna granica.
Teraz załóżmy, że na odwrót Decyzja została podjęta,
zmienne znaki, ale nie tylko pola char.
Tak więc w przeciwieństwie do C i C + +, char nie oznacza jeden char
i bazy danych, które ogólnie oznacza stałą liczbę
znaków w ciągu.
Co będzie górą i / lub Minusem mojego wyboru 60
dla pola char zamiast varchar?
To jest dokładnie to, pierwszy rodzaj decyzji będziesz musiał zrobić
podczas inspekcji [fonetycznie] z projektu z partnerami.
Tak, Sharon ponownie.
[Niesłyszalny Uwaga]
Dobry. Tak więc, jeśli nazwa jest mniej
niż 60 to marnujesz cokolwiek to jest delta
między 60 a rzeczywista długość.
Tak, że po prostu czuje się marnotrawstwem, więcej bajtów, niż trzeba.
Ale dlaczego istnieje?
Na pewno jest jakiś odwrotnie.
Tak?
[Niesłyszalny Uwaga]
Pewny. Więc czasami można może znać numer stały
znaków, takich jak 10 cyfr numeru telefonicznego, na przykład.
Ale kogo to obchodzi, jak, dlaczego Nie tak po prostu powiedzieć 11
i dlaczego nie powiedzieć 60 tak z varchar?
Jakie korzyści możemy uzyskać wiedząc i projektowanie
dla ustalonej liczby znaków?
[Niesłyszalny Uwaga]
Jesteś na dobrej drodze.
Tak, ale to jest optymalizacja to jest naprawdę z - tak?
[Niesłyszalny Uwaga]
OK. Dobry. Skupmy w tej ostatniej części.
Więc indeksowania.
Tak więc okazuje się, jeśli z góry wiedzieć, że wszystkie
z pól będą być 60 znaków,
naprawdę można myśleć o tym kolumna na bazie Excel
jako o bardzo prosty, lewa uzasadnione
i wyrównane do prawej krawędzi
ponieważ każda kolumna ma 60 znaków szerokości.
To oznacza, że ​​ta Ciąg 60 znaków oddalony
z tego ciągu, 60 znaków z dala od tego
i ten i ten.
Więc tak jak z powrotem, gdy nauczył C, miałeś swobodny dostęp
w świecie tablic, sam pomysł tutaj.
Jeśli kolumna jest reprezentowany używając tylko stała długość znaków,
Indeks można skutecznie losowo do 60 lub 120 lub 180
i można dostać się indywidualnie ciągi znacznie szybciej.
Następnie, jeśli zamiast, Twój kolumna miała prosto lewej krawędzi tak powiem
ale bardzo wytrzymały prawo krawędzią do kolumny
ponieważ może ma 10 znaków,
15 znaków, 5 znaków.
Więc to też jest kompromis.
A czasem tylko metodą prób i błędów
i eksperymentowanie można dowiedzieć
się, co naprawdę w porządku zadzwoń jest jednak to, że rodzaje
pytań, które należy iść
przez wasze umysły i / lub stoły, gdy przychodzi czas
do projektowania bazy danych.
Tak więc, nie koniecznie prawo odpowiedzieć, ale zalecana
co najmniej jedne zdanie lub dwa na uwadze
do tworzenia kopii zapasowych, co Decyzja zrobić.
Dobrze.
Więc trzymajmy przewijanie w tutejszych podpowiedzi
że są phpMyAdmin UI.
Tak więc, wartość domyślna dla nazwa, należy określić
że należy mieć Wartość domyślna null?
Co o tym sądzisz?
Można oczywiście mieć pustą nazwę?
Po prostu czuje się dziwnie, prawda?
Nie mogę myśleć o każdym Kursy nienazwane na Harvardzie.
A może jest jakiś niejasny przypadek rogu
gdzie kurs jest podany numer
i profesor nie ma wybrano nazwę dla niego, ale -
To znaczy, do diabła z tym,
jak niech nawet nie przeszkadza wspieranie tego.
Powiedziałbym, że w interesie ładne czyste bazy danych,
niech określić, że nie można mają wartość domyślną null.
Alternatywnie możemy zrobić Oczywiście coś takiego bez tytułu
co nie jest w przeciwieństwie do Mac OS i Windows do
podczas tworzenia folder, na przykład,
ale sprawia, że trochę więcej sensu
tak, że człowiek coś zobaczyć.
Mówimy o bazę danych przypuszczalnie
do katalogu kursów.
Więc tak naprawdę nie nawet podoba mi się pomysł oddania go
w nazwach oczywiście bez tytułu
ponieważ to nie jest pomoże każdemu.
Więc zostawmy to jako brak, co oznacza, że ​​po włożeniu
do tej bazy danych, masz dać każdego kursu nazwę
który czuje się trochę odkurzacz do mnie.
Dobrze.
Tak przewijanie dalej, sortowanie.
To właśnie ma do czynienia z zestawy znaków i etażerka
jeśli kiedykolwiek widziałem wspomina o szwedzkim
w phpMyAdmin to Bo ludzie
który napisał phpMyAdmin były szwedzki.
Jest to, że jest to PHP czy MySQL?
Jeden z dwóch, że zapomniałem bezceremonialny.
Ale to ze względów historycznych
ale co można wyrazić znaków w języku angielskim
że można z szwedzku więc jest to w dużej mierze nie problem.
CS50 Urządzenie jest jednak używany - skonfigurowany do korzystania z UTF-8,
tak, że generalnie powinno nie pojawiają się dla Ciebie.
Atrybutów.
Tak więc żaden z nich bardzo istotne tutaj.
Widzę binarnych, bez znaku, Unsigned ZEROFILL,
i aktualizacji bieżącego znacznika czasu.
Dotyczy tylko tego pola dla jakiegoś pola liczbowego
lub niektóre pola czasu.
Będziemy więc pominąć że całkowicie.
Null. Pole to może być null?
Więc nie ma. Mamy już tego typu rozmów.
Więc nie chcemy wartość domyślna.
Nie ma to być null.
Co z indeksu?
Jest cztery wybory tutaj.
Co to znaczy, jeśli mamy określić
że ten rząd będzie jest klucz podstawowy?
Wracając do CS50 lub CS165 jeśli podjęliśmy ją.
[Niesłyszalny Uwaga]
Dokładnie. Więc klucz podstawowy definicji jest pola
który jednoznacznie identyfikuje Każdy wiersz w tej tabeli.
I można liczyć na to, aby zrobić że niepowtarzalny identyfikator.
Więc, co to znaczy następnie po prostu być wyjątkowa?
Cóż, w pewnym sensie te dwa ma sortowania
z pod implikacji pod wyciągiem.
Ale ogólnie, to klucz podstawowy rodzaj umowy można zrobić
z rzeczą bazy danych.
Kiedy zrobić kwerend patrząc na kurs,
Mam zamiar korzystać z tego konkretnej dziedzinie.
I wrócimy do Dlatego możemy mieć dwa
takie wybory tutaj, podstawowy lub unikatowe.
Unikalny tylko mówi, to Pole będzie wyjątkowy
ale nie jestem co każdy rodzaj werbalnego zaangażowania tutaj
do korzystania z tego pola robić swoje wyszukiwanie
ze względów będziemy zobacz za chwilę.
Jeśli chcemy użyć zamiast indeksu, co to znaczy, aby określić
że pole ma indeks na to?
Tak?
[Niesłyszalny Uwaga]
Dokładnie. To było zoptymalizowany do zapytania.
Więc - serwer bazy danych, Oracle, MySQL, niezależnie,
generalnie będzie działał jego magii za kulisami po kliknięciu
że, a następnie kliknij opcję Zapisz i będzie budować
się zazwyczaj strukturę drzewa, B-drzewa, jeśli widziałeś
lub słyszał od których jest Drzewo bardzo krótkim patrząc
, który daje bardzo ładne Właściwości logarytmiczne
podczas wyszukiwania na danych.
Jeśli nie określisz indeksu na polu, co się dzieje
być uruchomiony czas poszukiwania
za arbitralne [Fonetycznie] nazwa przedmiotu?
Co to jest?
[Niesłyszalny Uwaga]
Och, [niesłyszalne], liniowy, prawda?
Jeśli nie ma optymalizacje uzyskano z bazy
i nie pomyślał, bazy danych, jakie
danych można się spodziewać.
Najlepsze co możesz zrobić, to sprawdzić wszystko, jeśli szukasz
dla pewnej wartości, szczególnie jeśli nie może
w rzeczywistości duplikaty.
Pełny tekst w międzyczasie, będziemy fala nasze ręce na razie.
Jednak ogólnie jest Typ wskaźnika, który pozwala
do optymalizacji dla słowa kluczowego wyszukiwania w polu.
Więc to może być dobrym kandydatem
dla jak opis przedmiotu gdzie można mieć kilka
z ust i to polubisz chcą robić dopasowań podciągów.
Pełnotekstowe ogólnie niech będzie to zrobić dość sprawnie.
AI, to straszne sortowania wyjaśnienia, ale jeśli będziemy oscylować
nad nim zobaczysz Automatycznego przyrostu.
Nie dotyczy zarówno tutaj ale przyrost jest przydatna auto
dla jak pola int, ponieważ Baza danych będzie dbać
procesu wraz plusing to za każdym razem zrobić wkładkę.
Tak, że nawet jeśli dwie osoby dosłownie kliknij przycisk Prześlij
w tym samym czasie, próby tworzenia wiersza jakiś
w bazie danych, jeden im będzie uzyskać numer I,
inne będzie Numer ja plus 1.
Nie musisz się martwić
około dwóch liczb przypisane identycznie, jeśli były
Aby to zrobić samodzielnie w kodzie.
Dobrze.
Więc niby jak, gdzie Mamy nazwę, aby być.
Więc kliknij przycisk Zapisz.
Czy to dobry projekt dla tabeli bazy danych?
I jak na bok, jeśli zardzewiały na SQL lub sortowania
po prostu zawsze przymknąć oko na to, co się dzieje,
Mogłem wpisany dokładnie to, że -
te trzy linie na które czarny i biały szybka
w wierszu poleceń klient lub mogłem zrobić
że w kodzie programowo.
Więc wszystko robi dla phpMyAdmin mnie, jest mi po prostu wysiłek oszczędzania
pamiętania czasem składnia i wpisując się na
jak żmudnych poleceń.
Dobrze.
Więc to nie ma ochoty najlepszy projekt, jeden stół pola.
Teraz możemy mieć rzeczy, jak profesorowie
i lokalizacje i opisy.
Ale nawet wtedy, używając tylko nazwy
zidentyfikować kursy nie czuje się idealnie.
Co mają na ogół zrobiliśmy w przeszłości
Jeśli używany baz danych jednoznacznie wiersze?
Nie używając varchars zazwyczaj.
Tak?
[Niesłyszalny Uwaga]
Tak. Więc zazwyczaj ID Oczywiście.
Zatem najczęściej podejść tutaj szczególnie
przy użyciu ramy jest właściwie tylko
używać szereg jak całkowita.
Więc pozwól mi iść do przodu i to zrobić.
I możemy to zrobić na kilka sposoby, ale informacja, jeśli powiększyć
w na dole tutaj.
Idę powiedzieć dodasz kolumny przy końcu stołu,
zazwyczaj tylko wizualny wygoda umieścić identyfikatory
na początku tabeli nawet jeśli nie ma prawdziwej
wpływ funkcjonalny.
Więc mam zamiar powiedzieć dodać jeden kolumny
na początku tabeli.
Zamierzam kliknij Dalej, aby daje mi z powrotem ten UI tutaj.
Nazwijmy ten identyfikator.
Jeśli myślimy, że będziemy mieć nie więcej zrobić 4 mln kursów
pola int jest w porządku.
Możemy nawet zmniejszyć go w dół
ale miejsce jest tanie więc kto naprawdę troszczy.
Ale staramy się Napisać Facebooka teraz,
może nie być złe przewidywać duże ints
co daje nam 64-bitowymi przerwaniami
ale to jesteś dosłownie podwajając liczbę bitów
że używasz, tak drobne kompromis
ale coś do rozważenia.
Teraz, to jest mylące Dziedzictwo rzeczą.
Można przypomnieć, z MySQL
że w każdej chwili możesz zadeklarować int Pole będziesz często zobaczyć numer
obok niego jak numer 10.
To nie ma nic wspólnego z Wielkość liczby
lub szereg bitów.
Że ma do czynienia z liczbą znaków, które są stosowane
wizualnie wyświetlacz że pole int
przy stosowaniu terminala okna.
Tak więc widzimy, że w jednej chwili.
Tak więc, nie daj się zwieść wpisując numery
tam nawet jeśli jest to skutecznie prosząc nas
dla jednej tutaj.
Tutaj, mam zamiar śmiało powiedzieć, bez znaku.
Nie ma powodu do odpadów wszystkich naszych liczb ujemnych
od bazy danych jest na ogół dzieje
przyjąć pozytywne wartości lub wartość null.
ID zdecydowanie nie powinien być zerowy.
A co sądzisz o indeks dla pola ID?
Zróbmy to podstawowa.
Więc, co jeśli, choć, jak mogę że tylko z jednego przedmiotu, CS164
na Harvardzie i tylko jeden Oczywiście CS50 na Harvardzie
i to dość dużo prawda ogólna
że nie może być wyjątków [Niesłyszalne] oba semestry
lub coś dziwnego w tym stylu.
Ale zasadniczo, dlaczego jest lepiej
użyć numerycznego identyfikatora do integralną kursy raczej jednoznacznej identyfikacji
nie tylko unikalny ciąg?
Tak?
[Niesłyszalny Uwaga]
OK, ciekawe.
Tak więc, gdybyśmy mieli coś w rodzaju cross-wymienione kursy.
Więc to jest dobry przykład.
Nie jestem pewien, chciałbym rozwiązania, że ​​choć
dając im takie same Numer identyfikacyjny, jeśli jest to
gdzie się dzieje z tym.
Nie? OK. Ale na pewno Sprawa rogu do rozważenia.
Jeśli istnieje coś w rodzaju - musimy jakąś
z aliasing potencjalnie.
[Niesłyszalny Uwaga]
Pewny.
[Niesłyszalny Uwaga]
To jest dobry przykład.
Nazwa może się zmieniać w czas, całkowicie uzasadnione.
Co jeszcze?
[Niesłyszalny Uwaga]
Niestety, jeszcze raz.
[Niesłyszalny Uwaga]
Tak, dokładnie.
Tak naprawdę, to Oponka jest prawdziwy
że za pomocą 32-bitowego int jest prawdopodobnie będzie szybciej
od pewnej zmiennej Długość pola char.
W pierwszym przypadku może dosłownie pasują do rejestru,
nie wspominając już o wiele mniejsze zużycie pamięci.
W tym ostatnim przypadku, będziesz musiał zrobić ośrodek [fonetycznie]
do porównywania ciągów znaków, które w siebie liniowymi
w rozmiarze Ciąg potencjalnie.
Tak, to jest po prostu ładny optymalizacja,
w szczególności, że będzie
pozwolili nam robić to, co nazywa się Łączy skuteczniej
za chwilę.
Więc zróbmy to.
My określić, że jest to podstawowy
bo ja nie szczególnie chcą opieki lub że
co numer jest kurs.
Niech się na niezależnie od wartości chcą.
Idę powiedzieć automatycznego przyrostu więc mogę zlecić to szczegół.
Jak w bok to polubisz wiem, że Harvard
przynajmniej ma unikalny Numery dla kursów.
Nie przypominam sobie co ten kurs jest.
Wiem, że CS50 jest numer katalogowy to 4949,
całkowicie arbitralne.
Ale nie jest dziwne przypadki, że nawet w rogu
w registrarial wysypisko oczywiście dane katalogowe,
czasami kursy, stare Kursy mają wiele jak 4.
Ale technicznie, że jest polem char
że po prostu zaczyna się od 0004.
Więc też, trzeba być Uważaj, o odróżnienie
od rzeczy, jak Oczywiście numer katalogowy
które mogą mieć jakieś ludzkie Pojęcie stałej długości, 0004,
i nie należy przechowywać który na przykład, w wskazówki.
Ten rodzaj pola powinny być przechowywane w innym miejscu.
Więc w Harvardzie, gdybyśmy byli rzeczywiście co kurs
Narzędzie zakupy, to prawdopodobnie nie wystarczy
do pól numerycznych z tylko 1, 2, 3, 4.
My prawdopodobnie będziemy mieć
mieć kolejne pole zwany numer katalogowy,
że powinno się również Oparty jest wyjątkowa
na ludzkich konwencji tutaj ale nie jest to najlepszy wybór
unikatowego identyfikatora, ponieważ może być różnej długości.
To może nie być cztery znaki, może to być pięć.
W rzeczywistości, myślę, że kilka lat temu poruszają
do sprawy tam pięć znaków " było ponad 999 kursów
w całości lub coś że, lub 9999 kursy.
Tak więc, że może być Przykład gdzie pole nie jest podstawowym
ale powinna być unikalna.
I adres e-mail jest jeszcze jeden.
Warto, że jest wyjątkowy
lecz niekoniecznie Twój klucz podstawowy.
Dobrze.
Więc pozwól mi się kolejny huk Tabela znacznie szybciej niż ten.
Więc mam zamiar nazwać jeden Instruktorzy i idę
dać to w sumie Liczba kolumn po dwa.
Idę się uczyć moje lekcja z ostatniego czasu.
Mam zamiar zadzwonić Pierwszy ID kolumna.
Mam zamiar zadzwonić Druga kolumna Nazwa.
Mam również zamiar zrobić VARCHAR.
Mam zamiar założyć, nie Profesor ma już nazwę
niż 60 znaków, choć teraz to może być przesuwając ją
a niektóre długie nazwy, specjalne ludzie z nazwiskami pośrodku.
To jest w porządku na dziś.
Więc przejdź tutaj.
Zróbmy to jeszcze raz niepodpisane.
Zróbmy to pierwotne.
A my pozwalają zduplikowane nazwy
W przypadku występowania dwóch John Smith czy coś takiego.
I teraz mamy dwie tabele.
Więc teraz, to nasuwa pytanie jak mogę skojarzyć
w instruktora z kursu?
Czuję, że rodzaj ma przed sobą
bo jeśli instruktor uczy się w trakcie,
moim pierwszym odruchem byłoby faktycznie wrócić
na kursy sprawę, to Nie był to dobry pomysł.
Pozwól, że faktycznie dodać jedną kolumnę Na koniec stołu
kliknij przycisk Dalej, a będę Nazywamy to instruktora.
I zrobię to varchar i zrobię to 60.
A może ja go teraz zostawić wartość null
w przypadku, oczywiście, że nie ma instruktor został bez znaku w
co czasem zdarza się przed Termin rozpoczyna się i kliknij przycisk Zapisz.
Które z tych wzorów wolisz?
Pierwszy z nich, w których mamy oddzielnej tabeli instruktora
lub drugi, gdzie tylko dodać pole do kursu?
Więc jest to ściśle powiązać Instruktor z kursu.
[Niesłyszalny Uwaga]
OK. Dobry. Ale pozwól mi odepchnąć.
To takie proste, jak mogę wystarczy wpisać nazwisko osoby
w tej tabeli, jak na pewno że ma jakąś wartość lub -?
[Niesłyszalny Uwaga]
Dobrze.
Cóż, pozwól mi być trudno tutaj.
Więc pozwól mi powiedzieć, że ten kurs jest CS51
i wiem, że to nauczyło w tym roku przez dwie osoby.
Tak, Henry Leitner i Jesse Tov, ale -
więc po prostu umieścić przecinek między nimi, prawda.
Jestem bardzo dobry w CSV z przeszłości.
[Niesłyszalny Uwaga]
Dokładnie, tak.
Jak najszybciej uciekać do czegoś takiego,
które mogą czuć się rozsądne i można czuć
jak jest to rodzaj inteligentnej.
Jestem jakby wypożyczania pomysł, który jest dobrze,
pożyczyć nowy pomysł i jakby je połączyć.
Jesteś rodzaju całkowicie pokonać punkt przy użyciu bazy danych
Po pierwsze dlatego, Jeśli jedna z wartości
stosowania jest szybsze wyszukiwania z powodu różnych wskaźników
i tabele, które mogą być budowane dla Ciebie
przez silnik samej bazy danych.
Teraz, jeśli chcesz sprawdzić na wszystkie kursy
że Jesse uczy, teraz masz zrobić dopasowywany podciąg na wszystko
pól instruktora,
który w rzeczywistości oznacza liniowy sprawdzić jeszcze raz, bo masz
znaleźć to dowolny zestaw z trzech znaków gdziekolwiek
w dziedzinie instruktora poprzedzony
Może po terminie przecinkiem.
Więc to na pewno nie nie wróży dobrze.
Więc pozwól mi wrócić do stołu.
Pozwólcie mi iść do przodu, aby Kursy, cofnąć, że.
Zamierzam pójść przed i upuść pole.
A jeśli chcesz, aby to zrobić ręcznie,
Składnia jest ALTER TABLE Kursy DROP instruktora.
Więc śmiało i powiedzieć tak do tego.
I wrócić do tego wcześniejszego pomysłu
gdzie mam oddzielny Stół dla instruktorów.
Ale teraz to jest trochę jak mogę umieścić na kurs
w tabeli w trakcie i instruktor
w tabeli instruktora ale jakoś trzeba połączyć dwa.
I jak można Proponuję zrobić?
[Niesłyszalny Uwaga]
Dobry. Więc zróbmy to.
I można nazwać Tabela w teorii wszystko.
Idę świadomie nazwać to, co wiele
ram byłoby nazwać między nimi
Laravel jak zobaczymy za chwilę.
Mam zamiar nazwać to oczywiście podkreślenia instruktora.
Używając liczby pojedynczej w tym przypadku każdego ze słów
i małymi literami ponownie, a także -
następnie alfabetycznie posortowane od lewej do prawej.
To jest całkowicie arbitralna, ale ma tendencję do konwencji
w wielu z tych ram w PHP w innych językach.
Ile kolumn potrzebuję, tego, co nazywamy dołączyć tabelę,
dołączyć dwa inne stoły razem?
Trzy kolumny?
Który z nich - jakie by one były?
[Niesłyszalny Uwaga]
OK. Dobry. Że działa.
I mogliśmy technicznie wyciąć róg tutaj, ale wiele
ram w szczególności wciąż daje nawet tych wierszy
chociaż unikatowe identyfikatory semantycznie wiersz
że naprawdę dbają o lub kolumny, które naprawdę dbają
o są dwa ostatnie z , co pan powiedział, ID przedmiotu
i ID instruktor.
Więc zróbmy to.
Zadzwonię ten wiersz tylko ID, podobnie jak zrobiliśmy wcześniej.
Ale to idę zadzwonić przedmiotów ID.
Ten zamierzam zadzwoń instruktora ID.
I mam zamiar określić, że wszystkie
z nich są podpisane Bo chcę
aby zmaksymalizować 4 mld int zakres.
Żaden z nich nie powinien być zerowy.
Idę do określenia, że Identyfikator powinien być nadal podstawowym.
I znowu, to jest tylko konwencja,
Wiele ram nawet jeśli nie są sortowane
fundamentalnie trzeba unikalny identyfikator rzędu
Okazuje się, że to wygodne dla kod SQL, który będzie
być automatycznie wygenerowany dla nas.
Więc zostawię, że jako podstawowy.
Ale teraz, to za orzeczenie projektu,
Identyfikator kursu i instruktora ID.
Co jeśli indeksy powinni dostać?
Jeśli nie zostawiam indeksy, co jest implikacja?
Co jest implikacja?
Wydajność jak wcześniej, prawda?
Jeżeli nie ma indeks Najlepsze co możesz zrobić, to rodzaj
z [niesłyszalne] przez Całość wyszukiwanie numerów.
Tak, że nie czuje się mądry.
Powinno być podstawowym?
Więc dlaczego nie?
Dlaczego nie podstawowym?
[Niesłyszalny Uwaga]
Idealny. Więc toczyć z [fonetycznie] podstawowym.
My już wybraliśmy to.
Tak więc, powinien on być unikalny?
[Niesłyszalny Uwaga]
Dobry. Tak więc, jeśli przyjąć, jeden instruktor na kursie,
całkowicie w porządku.
I to jest na pewno wspólna sprawa
ale już odłożyć jedną chyba znanym przykładem.
CS51 ma dwóch instruktorów więc jesteśmy rodzajem
od teraz wkręca w tym przypadku.
Jeśli my nie pozwalają jeden instruktor,
moglibyśmy zrobić drogę z przyłączenia stół w całości,
wrócić do wcześniejszego podejścia
i nie umieścić nazwisko osoby być może, ale ID instruktora.
Jeśli wiesz, co oczywiście, jak tylko jeden instruktor może mieć tylko
jedna kolumna.
Zmienność jest jednak co ma nas w kłopoty.
Dobrze.
Tak więc, powinien on być unikalny?
Nie Pełny tekst nie czuć dotyczy.
Jak powiedzieliśmy wcześniej, że jest
do podobnego fragmentu pasujące do opisów.
Więc co z indeksu?
Cóż, prawdopodobnie jest indeks nasz najlepszy kandydat
Optymalizacja MySQL, który mówi do poszukiwań na ten
lub pozwól mi rozwinąć, optymalizacji dla wyszukiwania lub łączy
jak zobaczymy za chwilę
tak, że są one trochę bardziej wydajny
niż cokolwiek czysto liniowym.
Chcę auto zwiększa to pole?
Więc nie, bo prawda Element nadrzędny istnieje
w tabeli szkolen.
To miejsce, gdzie jest to dostanie plus
Plus, gdy jest to rzeczywiście włożona.
Tutaj to wszystko dzieje być wprowadzane ręcznie
przez nas przypuszczalnie w kodzie.
Więc po prostu określić Oczywiście, że zarówno ID
i instruktor ID mają indeksy.
Teraz idziemy dalej i zapisać.
A teraz, żeby pokazać Ci korespondencja
pomiędzy tym, co jest ładne Przyjazny interfejs GUI
i interfejs wiersza poleceń.
Pozwólcie mi iść do przodu i robić następujące w tym wierszu MySQL.
Idę powiedzieć użytkowania courses50
którego nazwa jest dowolna Dałem do tej bazy danych.
A teraz, nie wiem nawet, pamiętam, co zrobiliśmy.
Więc pozwól mi TYPU Pokaż tabele
i ogólnie średniki będzie twój przyjaciel
, aby zakończyć zapytanie.
I nie jest to.
Więc tutaj są wiersze lub raczej tabele, które mamy tutaj.
Teraz nie pamiętam, co Oczywiście wygląda na to,
więc pozwól mi opisać kursy i teraz widzę swego rodzaju ASCII
lub wersja tego, co phpMyAdmin robi
i widzę, że ID jest int.
Nie jest to, że 10.
Co to znaczy?
To oznacza, że ​​gdy jest to wyświetlona to zajmie
maksymalnie 10 znaków na okno terminalu.
Jest pustych?
Nie, to jest klucz podstawowy.
Może mieć wartość domyślną?
No i dodatkowe, które jest szczególne Flagi jak auto przyrostu.
Więc po prostu zrobić kilka szybkiego wstawienia tutaj.
Mam zamiar iść do góry do - powiedzmy.
Zmieńmy stan do slajdu
gdzie rodzaj wstępnie przygotować ta.
Jest to podsumowanie, a następnie z wszystkie trzy z tych tabel.
I już tylko ręcznie wpisane pierwsze polecenie.
I tu, poszedł do przodu i wpisz innych dla Ciebie.
To jest po prostu stylistyczne rzeczą.
Ogólnie rzecz biorąc, wiele osób wpisz SQL we wszystkich czapkach
a następnie nazwy tabel i Nazwy pól w dolnej części obudowy,
choćby dlatego, że rodzaj trybuny
co masz na terminologię a co składnia bazy danych.
Więc tutaj mamy trzy tabele, kursy, instruktorzy,
oraz kursy instruktorów.
Na slajdzie zrobiłem wcześniej, Nie mam pole ID
ale to nie jest faktycznie złe w ogóle.
Chcemy po prostu zobaczyć Trzecia kolumna istnieje.
Ja zrobiłem, że się tutaj?
Więc teraz pozwól mi zaproponować robimy kilka wstawek.
Więc oto niektóre dane, Będę powiększyć obraz
Więc mam zamiar zaproponować że w kursach,
mamy tylko do czynienia z trzech dań.
I wybrałem te trzy Bo są reprezentatywne
z jakieś fajne - mają kilka ciekawych właściwości.
CS1, CS50, CS51, że mają coraz większe identyfikatory
ale to, co jest, co ID jest zupełnie bez znaczenia.
To jest po prostu kolejność były auto wstawione przeze mnie.
Jak o instruktorów?
Więc teraz, ponieważ Henry Leitner uczy zarówno CS1 i CS51,
jest to rodzaj dogodny implikacje dla naszego projektu.
I Jesse uczy CS51 i Malan uczy CS50.
Więc teraz - a raczej są to tylko tych ludzi unikalne identyfikatory.
I kursów i instruktorów, - Prowadzący kurs, zauważyć tutaj.
ID1 golfowe, które uczono się CS1
przez instruktora ID1 który jest Henry.
ID2 golfowe, które że uczono jest CS50
przez instruktora ID2, który jest Malan.
I wtedy wreszcie, CS51, i zauważyć, mamy dwa wiersze.
A teraz to dlaczego dołączyć Stół jest nauczana jest potężnym
zarówno przez Henryka i Jessego.
Tak, to wszystko jest w porządku i dobre,
ale ledwo pamiętam z góry
z mojej głowy, kto jest kim tutaj.
Jak możesz zajmować się, że w kodzie,
bez konieczności twarde rzeczy kodu?
Cóż, to jest, gdy sam SQL zaczyna być naszym przyjacielem.
I mam zamiar zaproponować, możemy wpisać następujące polecenie.
Zrobię to co w Rzeczywisty szybka.
Pozwólcie mi iść do przodu i włóż te rzeczy.
Tak więc, do tabeli kursów zróbmy dokładnie to, co mieliśmy
chwilę temu.
Idę dalej i powiedzieć, niech wstawić CS1 i CS50.
Miejmy wstawić kilka więcej wiersze na raz, CS51.
Teraz, pozwól mi iść dalej i zapisać.
Dobra, więc jestem odtwarzając tak szybko
jak mogę relacje właśnie zobaczyłem na ekranie.
I tak mamy tu Leitner, tutaj mamy Malan.
Dajmy się inny wiersz i Tow.
Teraz pozwól mi uratować to.
I robię je celowo w tej kolejności.
Nie, nie pamiętam, aby dać to automatycznego przyrostu.
Pozwól mi szybko naprawić.
Zrobię to w w trybie online.
Że nie powiodło się w bok.
Fakt, że nie mogłem wstawić Leitner i Malan
i Tow nie udało, bo nie podać numer identyfikacyjny, nawet jeśli
to i ja spodziewałem się jeden zapomniałem sprawdzić auto przyrostu,
co oznacza, że ​​wszyscy domyślnie się zero.
Ale, że to stoi w sprzeczności, które Lokale, że mamy określone.
Klucz podstawowy został naruszony więc nawet nie pozwól mi to zrobić.
Więc pozwól mi to naprawić.
Teraz, pozwól mi wrócić do Kartę wstawić tutaj i określić
że chcę Leitner, Malan i jeszcze jeden wiersz, Tow.
A teraz wreszcie, tylko jeden, że to trochę trudne
do zapamiętania jest to, oczywiście instruktor.
Załóżmy teraz, że wkładka Oczywiście jest instruktorem ID1 ID1
więc to CS1 i Henry.
ID2 Oczywiście jest instruktorem ID2, który jest CS50 i Malan.
A następnie te ostatnie mamy martwić się o to oczywiście ID3
który jest CS51, nauczył się
przez instruktora kursu 1, którym jest Henry.
I trzy, jak również nauczał przez 3, który jest Tow.
Więc mam nadzieję, że teraz my odtworzył ten -
cholera, zrobiłem to samo.
Kurs instruktora potrzebuje auto przyrostu.
Dobrze.
Zrobię to szybciej, tym razem, Kurs 1, kurs 1, 2, 2.
A teraz wreszcie zrobimy CS51 który ma przedmiotów ID3 i Henry.
I oczywiście ID3 i Jesse.
, Że wygląda dobrze.
OK. Więc teraz, wróćmy do okna terminala.
Jeśli więc opiszę Kursy zobaczymy to.
Jeśli chcę zobaczyć kursy i może teraz zrobić wybierz gwiazdę z kursów,
pół jelita grubego, a teraz widzimy te wartości.
A teraz, co jeszcze chcę zrobić?
Wybierz gwiazdę z instruktorami, to jest, jak się spodziewałem,
wybierz gwiazdę z kursów - Oczywiście podkreślenia instruktor.
Więc jak mam teraz przyłączyć te tabele?
Tak piękna, które zdecydowały wartości ID w ten sposób jest
, że jeśli myślisz o biorąc tabeli przedmiotów
i instruktor Tabela, a następnie wkładając
między tymi dwoma w swoim Kurs instruktora umysły
Stół można rodzaj linii Całą tych kolumn ID
tak, aby połączyć je w jeden masywne kolumny, które ma wszystko
informacji dbamy o.
Składnia SQL dla tego Nie zawsze jest oczywiste
ale zobaczymy, czy możemy to zrobić.
Więc wybierz gwiazda z kursów,
i jest kilka sposobów jak można to zrobić.
Zamierzam po prostu naciśnij Enter rodzaj formatu rzeczy ładnie,
ale to jest tylko strzałka objawem narzędzia po stronie klienta
nie ma nic zrobić z samego SQL.
Więc wybierz gwiazda z kursów.
Zamierzam teraz przyłączyć Tabela kursów
na stole instruktora kursu.
W jaki sposób? Na polu zwanym courses.id równa przedmiotów
podkreślenia instruktora dot, co się nazywa
odpowiedniego pola tutaj, że chcę kilka.
To nie ID.
It's - co, przepraszam?
>> ID przedmiotu.
OK, niech pomniejszyć.
Ale chcę zrobić ten jeden krok dalej.
Mam teraz zrobić to Stół i ten.
Teraz chcę wyciągnąć ten facet w, jak również.
Więc pozwól mi dalej dołączyć całość
na instruktora Tabela na co?
Podkreślenia golfowe instructor.instructor id
równa instructors.id.
Tak, że nie napisał zapytanie to na kilka sposobów.
Kolejność, w jakiej to zrobiłem nie jest tak ważne.
Właśnie niby zrobił to w mój umysł od lewej do prawej.
Mogliśmy zrobić, to na kilka różnych sposobów
ale jeśli mam teraz pół jelita grubego i naciśnij klawisz Enter,
Zauważ, że wrócę nowy tabeli tymczasowej, zestaw wyników
że tak powiem, w mowie bazy danych.
I co mam w tym rzecz?
Mam na ID, nazwę, inny Identyfikator, który jest rodzajem mylące
dla mnie w tej chwili, ID przedmiotu,
Instruktor ID, ID i nazwa.
Tak więc, na koniec dnia mamy odpowiednie dane teraz.
Widzę, że nauczył się CS1 przez Leitner, CS51 nauczył się
przez Leitner i Towa i CS50 jest prowadzone przez Malan.
Ale jestem trochę zdenerwowany ta dwuznaczność stworzyłem.
Co jest niejednoznaczność Ja nawiązując do?
Tak?
[Niesłyszalny Uwaga]
Są trzy kolumny ID.
Tak naprawdę możemy to naprawić i będziemy rzeczywiście będzie
odroczyć do naszego ramach ostatecznie pomóc nam z tym,
ale okazuje się, że jest słów kluczowych w SQL o nazwie S,
, w którym można określić alias, nowa nazwa dla pola
tak, że można tego uniknąć dwuznaczność całkowicie.
Ale uświadomiłem sobie, że jeśli tego nie zrobimy adres to jakoś tak z
że słowo kluczowe lub ramy,
to jest potencjalnie Jeśli spróbujesz dwuznaczność
aby uzyskać dostęp do pola ID bo tam są te wyraźnie
z tam samych nazwach.
Więc to jest dołączyć i myślę w myślach to najlepszy sposób
myśleć o tym bardzo ma mieć dwie tabele,
ich układanie w sposób, w jaki chcesz.
I to tak zwane sprzężenia wewnętrznego w sensie
że mamy połączenie tu stoły.
Istnieją inne typy łączy, że możemy napotkać
w czasie jak sprzężenia zewnętrzne,
jednak w przeważającej części tego jest chyba najczęstszym
do rekonstrukcji danych.
Co zrobiliśmy to ogólnie, co się nazywa
normalizacji danych, tak, aby nie ma powielania w dowolnym miejscu
w tabelach.
I powielania, chciałbym sprawiły, że pierwsze podejście.
Gdybyśmy wspomniano Leitner i w wielu miejscach Tov
w bazie danych, to nie jest ogólnie najlepsza decyzja
zwłaszcza jeśli ich nazwa może zmiany w godzinach nadliczbowych lub w przypadku
małżeństwa, nazwisko panieńskie potęgi zmieni się po prostu chcesz jeden
kanoniczne miejsce dla niektórych wartość danych jak imię i nazwisko.
Dobrze.
Tak więc, aby Przypomnę, mieliśmy Kilka decyzje projektowe zarabiania
i najważniejsze prawdopodobnie obniżona do niektórych
z tych wyborów indeksów.
Ale chciałbym zwrócić uwagę jedna rzecz, jak również.
Jeśli wrócę do phpMyAdmin,
jedna funkcja może nie spotkałem wcześniej, jest
następujące.
Jeśli pójdę do instruktora kursu, I już było określić, że niektóre
te rzeczy mają indeksy.
Ale pozwól mi iść do struktury Zakładka z instruktorem kursu.
Pozwól, kliknij teraz na indeksy i zauważyć, co następuje.
I tu, że określono jest klucz podstawowy
w kolumnie o nazwie ID.
Jest to dość skomplikowany sposób określania liczność
i tak dalej jako odnoszące się do Wielkość pola w bajtach.
Ale teraz mam również inny Pole, ID przedmiotu, który jest -
Oczywiście ID, który odbywa z góry i wyjątkowy, OK.
Zrobiłem ten jeden w przejść do nas.
Więc dlaczego jest to - daj mi spaść to ze względu na dyskusji.
Och, wiesz, co zrobiłem?
OK. Tak więc wcześniej, jedną z Niebezpieczny przy użyciu narzędzia GUI
jak to, kiedy byliśmy tworzeniu tej dołączyć tabelę,
Tabela instruktor Oczywiście, Przypomnijmy, że określony
że chcę indeksu na tym polu
, a indeks ten inne pola.
Efektem ubocznym sprawdzanie obydwu tych pudełek
na tym samym ekranie jest phpMyAdmin wywnioskować, że
że chcę, a nie dwa oddzielne indeksy,
że chcę dołączyć których indeks jest na ogół tylko pomocne
lub najbardziej przydatne, gdy jesteś poszukiwania na nie jedno pole
a oba te pola.
I dlatego musieliśmy je tam conjoin
więc rzuciłem go bo to nie było to, co chciałem.
Raczej będę przerobić to tutaj.
Mam zamiar iść do ID przedmiotów
i pod bardziej jestem powie dodać indeks.
I zamierzam iść pod Instruktor ID i powiedzieć dodać indeks.
A teraz, jeśli kliknij tutaj, Zauważ, trzy indeksy,
jeden podstawowy i jak przeznaczone po jednej dla każdego
z tych kluczy obcych.
A ja nazywam to zagranicznych, ponieważ ID Oczywiście w tej tabeli map
do którego pola, po prostu się wyczyścić, w innej tabeli.
Klucz podstawowy nazwie ID, w tabeli o nazwie kursy,
a sama sprawa dla drugiego.
Ale teraz, jest interesująca oszukać i naprawdę technika.
Po prostu poszedł do przodu i niech mi zrobić trochę wolniej.
W tym samym ekranie, informacja mówi Widok relacyjny tutaj.
Klikam to i teraz zauważyć I dostać się zrobić kilka ograniczeń.
Tak więc, jednym z upsides również
o nie tylko za pomocą koncepcyjnie klucze obce i inne tabele
jak mamy po prostu na to , że przez określenie indeks
na nich można mieć Pomoc Baza danych można jeszcze bardziej
zapewnienia integralności tej dziedzinie.
W szczególności, mogę teraz określić za pomocą tego spadku
w dół, że pole Oczywiście ID
faktycznie w tej tabeli mapy do courses.id.
Podobnie, instruktor podkreślenia ID odwzorowane na instructors.id.
Teraz, dlaczego jest to przydatne?
Cóż, zawiadomienia, na prawo hand side, co wydaje się teraz.
Teraz mogę uczyć bazy danych, które, jeśli Henry
na przykład nigdy nie odchodzi na emeryturę zniknie i jego rząd
z tabeli instruktora co jest zupełnie
usunięta, mogę przez to kaskadowe podejście zapewnić
że wszelkie kursy uczy się nie wiąże się z nim.
Mogę uczyć bazy danych usunąć wiersze
W tym tak zwanym stole przyłączenia automatycznie, jeśli Henry lub jeśli jeden
swoich kursów zniknie.
Teraz, dlaczego jest to przekonujące?
Tak?
[Niesłyszalny Uwaga]
Trzeba tylko zrobić to raz i dłuższy okres, prawda?
To bardzo proste, jeśli rodzaj ludzie przychodzą i odchodzą, przychodzą kursy
i iść, baza danych może Po prostu zaśmiecona kursów
i wykładowców, które nie są już istotne dla zbioru danych.
I dane zaczyna się bardzo niechlujny i brudny i przestarzały,
i tak oto możemy posortować
od egzekwowania niektórych te ograniczenia.
Tak?
[Niesłyszalny Uwaga]
Wie, w drodze tego.
Jest to ekran, na którym jesteśmy określenie powiązania
między klucz obcy i klucz podstawowy.
Tak więc wszystkie nazewnictwa konwencje wspomniałem
się wcześniej, to tylko konwencje.
Nie ma nieodłączne znaczenie.
To jest ekran które to użyteczne
po określonych indeksów każdej z tych dziedzin, jak my.
A do tego mamy rozwijanej kilka rzeczy, na przykład
jeśli oczywiście zostanie usunięty można rzeczywiście zapobiec, że usunięcie
dzieje, jeśli nie jest wiersz w tabeli
po prostu mówiąc, ograniczać.
Innymi słowy Henry Nie można przejść na emeryturę
aż go oddzielić z CS51 i CS1.
Więc to jest dobra rzecz.
Ale może to wywołać błędy w kodzie
jeśli nie przewidujemy, że lub możemy mieć kaskadę,
podobne do jak kaskada kaskadowe arkusze stylów
i kaskadowych wodospadu oznacza, że ​​jeżeli -
jeśli Henry odchodzi tak - przez coraz usunięta
tak będzie jego rząd tutaj zostaną usunięte.
Brak działania oznacza nic lub wartość null niby przydatna, jeśli rodzaj
z ma jakiś historyczny rekord z Henry po nauczył CS51,
ale po prostu chcesz to pole do być null tak, że wiersze
ale to nie jest już dłużej związany z nim.
To są bardzo silne Techniki, które można
i mimo, że powinien użyć Szczególnie w interesie
uratować was od siebie.
Więc pozwólcie, że wzmianki o Kilka szczegółów końcowych tutaj,
Składniki, z którymi które mogą być pomocne
jak planujemy do projektowania baz danych.
Masz również wybór przez silnik bazy danych
że używasz w kodzie.
Jeśli znasz z CS161 to polubisz -
lub nawet 61, to może ogólnie zapoznać się z systemami plików.
I nie ma rzeczy podobne, NTFS i HFS +
i X2FS4 [fonetycznie] i 3 i tak dalej.
Jest różne sposoby przechowywania danych na biurku.
Podobnie istnieją różne sposoby przechowywania danych
w bazie danych domyślnie co najmniej w urządzeniu
z najnowszą wersją MySQL.
Używaliśmy Aparat bazy danych o nazwie, NoDB,
który wspiera kilka fajnych funkcji.
Ale inna jest też jeden wspólny nazywa MyISAM i kolejny
który może być użyty jest Pamięć, co oznacza, że ​​nie należy kłaść
na dysku, po prostu zachować rzeczy w pamięci.
W przeważającej części, prawdopodobnie nie udać dopiero zaczyna
z NoDB, ale dla wszystkich projektów które wydają się wiązać wysokie stawki
insercji, na przykład, jak dużo szybkiego pozyskiwania drewna,
setki rzeczy na sekundę lub tysiące rzeczy.
W każdej chwili masz Wiele rzeczy dzieje
na w bazie to ten rodzaj
Decyzje z niższego poziomu zacząć się angażować.
Funkcja tekst na pełnym instancja działa tylko w MyISAM
tak, że ma wpływ.
Ale może pamiętacie to, niech przynajmniej uzasadnić, dlaczego dbamy
o NoDB w szczególności.
A warunki wyścigu ogólnie odnosi się do czego?
Dobra, to jest aluzja do np. niektóre
z może słyszeliście w lat przeszłości, czy 161 lub 50
gdzie masz współlokatora, oboje bardzo lubię mleko,
jeden z was wróci do domu pierwszy otwiera lodówka nie ma mleka,
zamknij spacer lodówkę całej ulice do CVS i
w kolejce, aby kupić trochę mleka.
Tymczasem twój współlokator wraca tutaj.
Ona też lubi mleko.
Otwórz lodówkę i zdaje sobie sprawę, nie mleko.
Oto ona następnie idzie do zapisać, może inne CVS.
Szybkie przewijanie do przodu kilka minut potem wracasz i teraz zarówno
o zakupie mleka.
Jednym z nich jest obecnie na zepsuć, bo nie
jak i tak dużo mleka jest to problem, prawda?
Ponieważ oboje kontrolowane stan jakiejś zmiennej
i podjął decyzję w oparciu na nim, nawet jeśli stan
tej zmiennej była zasadniczo w trakcie zmianie
Wszystkie się powoli w ciągu Ilość czasu potrzebnego
aby dostać się do i z CVS.
Tak więc to, co jest prawdziwe w rodzaju głupiego świecie rozwiązanie tego problemu?
Zostawić notatkę, prawda?
To się stało ostatnim razem.
Zawsze zostawić notatkę lub kłódki rzeczy dosłownie.
I mówię kłódki, ponieważ jeśli nie podejmują lub trwało CS161,
blokujący jest podstawowym ideą tego rodzaju świecie.
Więc mogą pojawić się warunki wyścigu i na świecie bazy
i może pamiętacie może z CS50 finansowanie jeśli wziął 50,
ten kod, który rzeczywiście daliśmy wy w specyfikacji
w czasie, tak aby Operacja jest tzw atomowej.
Jeśli chcesz, aby w ten Sprawa, kupić część akcji
i że czas ma niektóre szczególności symbol.
Powiedzieliśmy Ci, aby użyć kodu jak to, ponieważ za pomocą tego
na duplikatu klucza aktualizacji składni, który jest zbudowany
w MySQL jesteś skutecznie wykonując jedną z wkładką
lub aktualizacji po robi select, aby zobaczyć
jeżeli stado jest już w środku.
Innymi słowy, analogowy Świat kupowania akcji
mleka i lodówce może być pierwszy
przed zakupem udział Google może chcesz wybrać
z bazy danych wszystkich akcji Google, że David jest właścicielem
aby sprawdzić, czy posiada on zero lub więcej.
Gdy zauważysz, jeśli posiada zero lub więcej masz
aby następnie wykonaj następujące czynności.
Trzeba albo zrobić wkładkę
jeżeli właścicielem przyczynę zero " nie ma jeszcze wiersz dla Dawida,
lub trzeba zrobić aktualizację jeśli przynajmniej w teorii chcesz
mieć jeden wiersz na użytkownika.
Problemem jest wybranie że liczba akcji
a następnie aktualizowania lub wstawianie może zostać przerwany
przez kogoś innego w innym terminal komputerowy próbuje kupić
lub sprzedać część Dawida akcje akcje czy to
dla dobrych celów lub sortowania szkodliwych celów.
To tak jak iść do sklepu kiedy twój współlokator wróci
i sprawdza stan zmiennej.
Tak więc w tym momencie składni który był swego rodzaju stosowne
dla CS50, że unika Problem w ogóle.
I to właśnie, że nie wszystkie Magia blokowania dla Ciebie,
ale teraz z tych rodzajów projektów dla tego kursu
które najprawdopodobniej obejmować bardziej złożone zestawy danych,
nie można osiągnąć zawsze ta niepodzielność.
Wszystko dzieje się na raz lub w ogóle
bez przerwy tak elegancko.
I tak MySQL, inny silnik bazy danych,
rzeczy wsparcia zwane zamki,
przy czym można powiedzieć, Zamek Ta stół tak, że tylko jedna uczta
i na ogół tylko jeden użytkownik może dotknij go w dowolnym momencie
odczytu lub zapisu i następnie można je odblokować.
Jest to przykład z jednego z własnych odniesień MySQL,
gdzie jeśli masz jak w banku konto, które próbujesz
odliczyć pieniądze z , a następnie dodać pieniądze.
Warto upewnić się, że zarówno
z tych rzeczy się ze sobą
tak, że nie ma Błędy matematyczne
i nie ma strat w jeden pieniądze, jakoś.
Problem z zamkami jednak w bazie danych jest
Oznacza to, że na ogół cały stół jest zablokowany
co oznacza, że ​​jeśli setki ludzi, którzy próbują
robić interesy z bankiem online w tej samej ilości
czas tylko jeden nich może przejść na raz.
Co jest głupie, zwłaszcza Obecnie na serwerach
, które mają osiem przedmiotów, 16 Oczywiście, mają wiele
z pamięci, nie ma powód do wszystkich odcinkach
z transakcji, jeśli te klienci są tylko będzie
interakcję z własnymi rzędach.
Więc NoDB pozwala robić rzeczy bardziej inteligentny
i ten będzie ogólnie Podejście wziąć w kodzie,
jak użyć czegoś nazwie transakcji.
I zrobić to na ogół w kodzie PHP,
Kod Ruby, Python, cokolwiek.
Ale to jest kod SQL ostatecznie stosowany jest ten,
zazwyczaj.
Następnie można rozpocząć transakcji podać dwa lub więcej pytań
, które chcesz wykonanie całkowicie
bez przerwy lub wcale.
Nie może być nawet kilka SELECT w
lub niektóre usuwa lub aktualizacje.
Ale miłą rzeczą jest to, że Baza danych będzie wystarczająco inteligentny
aby upewnić się, że to będzie tylko zablokować wiersze są one rzeczywiście
udział w tej aktualizacji lub wybiera lub usuwa.
Więc jeśli masz tysiące wierszy a ty tylko dotyka trzy
wśród nich, tylko podzestaw tabeli zostanie zablokowany
co oznacza, że ​​te pozostałe 99 klienci mogą dotknąć ich wiersze
bez odcinkach i spowolniony przez Ciebie.
Tymczasem, jest to najpiękniejsze aspekt transakcji.
Są to transakcje na Wyczuwam jak 161 w systemie plików,
oni transakcyjny
co oznacza, że ​​można toczyć je z powrotem, można je cofnąć.
To jest jak komenda lub sterowania F baz danych.
Jeśli odkryjesz część sposób przez wszystkie
swojej różnych operacji na danych, strzelać, coś jest nie tak.
Dosłownie wykonać inna rolka zapytanie SQL z powrotem
i wszystkich tych tendencji - wszystko sprawozdania można realizowanych
po mówiąc początek znikają transakcji
jakby nigdy nie stało,
co jest niezwykle potężna rzecz.
I są to rodzaje rzeczy na pewno w 50 my sortowania
z zamiatać pod dywan i po prostu rodzaj zakładać
że wszystko będzie dobrze.
Ale po uruchomieniu myśleć o rzeczywistych projektów
i real users i integralności bazy danych,
Są to rodzaje decyzji projektowych
które będą ważne.