11 - Внешние ключи (Foreign Keys) - Уроки PostgreSQL

Поділитися
Вставка
  • Опубліковано 18 жов 2024
  • Войти в IT: Вся Необходимая База. 3 Уровня Объяснения Материала
    stepik.org/a/1... Если не можешь напрямую покупать со Stepik, заказывай отсюда:
    avecoders.gith... Введение в Искусственный Интеллект с Python для Начинающих: stepik.org/a/1... Введение в Искусственный Интеллект с Python для Начинающих: stepik.org/a/1... Курс: "Поколение Трансформеров": Нейросети для Естественного Языка (NLP)
    Вне Свифта (Россия, Беларусь): stepik.org/a/1...
    Свифт (Все остальные): avecademy.teac...
    Практический Курс по Python:
    Stepik: stepik.org/a/1...
    Udemy: www.udemy.com/...
    Аве Кодер! В этом уроке мы на практике разберем пользу от первичных ключей. В качестве примера мы возьмем бонусную схему вымышленного работодателя по которому, наши работники должны получить в качестве бонуса велосипед.
    Но не все так очевидно - наше решение в Postgresql должно отвечать трем обязательным условиям:
    1) Работник может получить только один велосипед
    2) Велосипед может принадлежать только одному работнику
    3) Это может быть либо велосипед, либо ничего.
    В этом нам как раз и помогут внешние ключи.
    Следующее видео:
    12 - Объединение таблиц (JOINS) - Уроки PostgreSQL
    • 12 - Объединение табли...
    Предыдущее видео:
    10 - UPSERT и Работа с Конфликтами (ON CONFLICT DO) - Уроки PostgreSQL
    • 10 - UPSERT и Работа ...
    Плейлист целиком:
    • Уроки PostgreSQL для н...
    #авекодер #урокиpostgresql #postgresql #sql #субд
    Поддержи проект:
    www.donational...
    paypal.me/avecoder
    / avecoder
    BTC: 1BmLvUFiJaVpCAwhzW3ZwKzMGWoQRfxsn4
    ETH: 0x6f1A488c9b12E782AEF74634a40A79b1631237aB
    История Технологий:
    / АвеТех
    VK: avecoder
    Телега: t.me/avecoder_ru
    ______________________
    Аве Кодер! Меня зовут V и я кодер. На моем канале ты сможешь найти актуальные туториалы по интересным технологиям, базу по computer science, брейнхаки, лайфхаки, материалы по здоровью кодера, отчеты о визитах в интересные локации, английский для кодера, как кодеру не помереть с голоду, юмор и многое другое.
    Так что ставь императорский палец вверх, подписывайся и бей в колокол!

КОМЕНТАРІ • 36

  • @avecoder
    @avecoder  Рік тому +1

    Практический Курс по Python:
    Stepik: stepik.org/a/126242
    Udemy: www.udemy.com/course/avecoder-advanced-python/?referralCode=270C5D0661A966B53743

  • @Blamingplayer
    @Blamingplayer 3 роки тому +2

    Очень классно объяснил, спасибо большое) 👍
    Всем друзьям советую кто учит со мной

  • @MifitoS777
    @MifitoS777 3 роки тому +11

    Уроки огонь! Как фильмы со Стэтэмом! Этот комментарий будет историческим, ибо 3,24 тыс. подписчиков ты не достоин. Нужно как минимум пол ляма.

  • @ВячеславКулагин-р7т

    Спасибо! Очень доходчиво рассказываете!

  • @egorpython9683
    @egorpython9683 3 роки тому +2

    отличные уроки, спасибо!

  • @aleksbroadcast
    @aleksbroadcast 2 роки тому +1

    не сработало так, но разобрался с этим инженерингом мтодом проб и ошибок. Почувствовал отличие от mySQL основательное))

  • @РавильШаймердянов
    @РавильШаймердянов 3 роки тому +1

    Спасибо за старания)

  • @ДенисКузнецов-я5я
    @ДенисКузнецов-я5я 2 роки тому +4

    Подскажите плиз почему до этого мы делали уникальным поля через команду : ADD CONSTRAINT unique_email UNIQUE (email)
    А сейчас просто через ADD UNIQUE (bicycle_id) есть определенные условия для этого или есть какая то разница?

    • @АлександрКубраков-у2ш
      @АлександрКубраков-у2ш 11 місяців тому

      Отвечаю на комментарий годовой давности, раз никто не ответил. Одно дело изменять уже существующее поле, делая его уникальным (email), а другое, добавлять новое уникальное поле (bicycle_id)

  • @alexandrkomar4741
    @alexandrkomar4741 2 місяці тому

    Добрый день. А как потом вывести данные по второй таблице используя первую. То есть как сделать select, чтобы с данными первой таблицы и вывелся столбец, что именно этот велик принадлежит Лизе.

  • @olegmitnik9617
    @olegmitnik9617 Рік тому +1

    Спасибо!

  • @ct_yurk_1510
    @ct_yurk_1510 3 роки тому +1

    Отличные уроки, спасибо! Но у меня есть вопрос: почему вы используете '100.00', а не просто 100.00? Price же чисельной тип.

    • @avecoder
      @avecoder  3 роки тому +3

      чтобы показать, что PostgreSQL может спарсить String в numeric даже с ' '. Это одна из пасхалок которые я раскидал по курсу. Молодец!

  • @kuaranir2440
    @kuaranir2440 4 місяці тому

    4:40 А почему bicycle_id в таблице велосипедов у нас bigserial, а в таблице *emplpoyee* bigint?

  • @dnr_8365
    @dnr_8365 9 місяців тому

    Непонятно с уникальным полем nullable, перед присвоением bycicle_id все значения были одинаковыми. Мне кажется что с таким индексом пустой может остаться лишь одна запись.

  • @ДианаАвдеева-о3ф
    @ДианаАвдеева-о3ф 8 місяців тому

    простите ради бога, не могу удержаться........
    БИКУКЛЕ

  • @gregevans8722
    @gregevans8722 2 роки тому

    Т. е. в результате получится что только один работник (с одним id) может иметь к примеру велосипед Indi ATB, а другой работник этот же велосипед иметь не сможет? Или всё-таки сможет?

    • @avecoder
      @avecoder  2 роки тому +1

      Привет. Я настоятельно рекомендую экспериментальным путем проверять гипотезы. Напиши потом сюда, к какому выводу ты пришел.

    • @gregevans8722
      @gregevans8722 2 роки тому

      @@avecoder Экспериментальный путь проверки гипотезы показал, что всё-таки один работник может иметь только один велосипед из таблицы bicycle ☝️. Спасибо, я просто как велолюбитель сам себя запутал в процессе урока.

    • @МуратВахитов-п8ф
      @МуратВахитов-п8ф 6 місяців тому

      @@avecoder , здравствуйте! Есть вопрос: если я уже создал поле bicycle_id предварительно командой ALTER TABLE employee ADD bicycle_id BIGINT; а потом хочу создать связь foreign key c id таблицы bicycle. Но я уже не могу выполнить команду ALTER TABLE employee ADD bycicle_id BIGINT REFERENCES bicycle (id); , потому что bicycle_id уже создан. Что делать в таком случае, если удалять поле bicycle_id не хочется?

  • @AcidWall
    @AcidWall 4 роки тому +6

    Познавательное видео и ни одного комментария?

    • @avecoder
      @avecoder  4 роки тому +12

      Безумно можно быть первым

  • @gottastoppo
    @gottastoppo 3 роки тому

    Я вот верстаю ролики по сто раз и такой вопрос навернулся: а можно уже существующее поле преобразовать во внешний ключ? Просто не совсем представляю, как оно должно выглядеть, и просто хотелось бы сохранить порядок столбцов. Но если такое провернуть нельзя, то тоже хотелось бы знать.

    • @avecoder
      @avecoder  3 роки тому

      можно. об этом и урок

    • @gottastoppo
      @gottastoppo 3 роки тому

      @@avecoder я не увидела этого, тут только создается новое поле с внешним ключом, а на уже созданное не было. Хотя может я действительно слепа, пересмотрю, возможно, видео.

    • @avecoder
      @avecoder  3 роки тому

      @@gottastoppo Что выдает гугл по запросу о проблеме?

    • @gottastoppo
      @gottastoppo 3 роки тому

      @@avecoder Не поняла немного.
      Ничего пока путного не находила, но займусь этим вопросом поглубже уже позже.

    • @gottastoppo
      @gottastoppo 3 роки тому

      @@avecoder Хорошо, я вот такую информацию нашла: postgrespro.ru/docs/postgrespro/9.5/ddl-constraints
      Не знаю, подходит ли оно сюда, но если да, то такого у вас в видео точно не было.
      РЕД: не совсем то, что нужно, но хоть что-то близкое.

  • @НуртайЕртаев-д2й
    @НуртайЕртаев-д2й 3 роки тому

    как сделать так чтобы bicycle_id (которых 3 ) могли относиться ко всем сотрудникам?

  • @МіцнийволоснефритовийстерженьК

    Прикольно, но не понятно нафига оно нужно и что даёт.

    • @avecoder
      @avecoder  3 роки тому

      и действительно нафига нужен SQL

    • @Office-Clerk
      @Office-Clerk 3 роки тому

      @@avecoder возможно вопрос был "зачем вообще нужны foreigh key?" у меня такой же вопрос, я именно из-за него сюда зашел. Делаю приложение простое, там три таблицы. Но не могу заполнить child, пока не заполню родительскую, а мне это не удобно с точки зрения асинхронности приложения - у меня разные методы пишут в разные таблицы, и я не знаю какой выполнится раньше. Хотел найти ответ на вопрос "можно ли без внешних ключей". А что не будет работать? Выборка? Джоины? Мне кажется, должны работать же?

    • @avecoder
      @avecoder  3 роки тому +1

      ​@@Office-Clerk да, технически невозбраняется зафигачить все в одну таблицу, как здесь: ua-cam.com/video/SnBhRJVXkJw/v-deo.html что можно сравнить с написанием программы в одном файле. Многие ребята могут несколько лет проработать в IT, так и не использовав ни один Foreign Key (softwareengineering.stackexchange.com/questions/375704/why-should-i-use-foreign-keys-in-database), но как и со всем прочим, разделяя свою БД логически, ты облегчаешь себе жизнь в дальнейшем. Пример из видео: мы раздаем работникам велосипеды, но представь, что мы решили раздавать машины, но возможно вернемся к велосипедам позже (летом). Гораздо проще по внешнему ключу подключить таблицу с машинами, нежели вбивать в основную таблицу доп. поля, которые может будут использоваться, а может нет. Внешний ключ работает как реферальная ссылка из одной таблицы к другой. Но опять же, если у тебя простое приложение, которое обращается к каждой таблице отдельным запросом, то проблем пока что не возникнет.

    • @RusIvan2022
      @RusIvan2022 2 роки тому

      @@Office-Clerk Это дает огромное преимущество. Представьте вы пишете код допустим на php. И вам нужно удалить работника, но за работником стоят куча таблиц отдельных где есть ссылки на данного работника. В обычном варианте вам предается реализовать удаление всех таблиц, а именно каждую в ручную. А так вы можете настроить что БД сама позаботится об удалении всех связанных записей и для этого в том числе понадобится внешний ключи.

  • @ihoryanovchyk
    @ihoryanovchyk 3 роки тому

    Спасибо!