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