Ответы пользователя по тегу SQL
  • Почему не работает запрос в БД?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    $NameVideo = $_POST ['name'];
    $idVideo = $_POST ['message'];
    echo $NameVideo;
    $db = mysql_connect("localhost","d9",774272722");
    mysql_select_db("dlx",$db);
    mysql_query("SET NAMES utf8");
    $resultat = mysql_query("INSERT INTO `dlx`.`videoByMe` (`id`, `DenumireaVideo`, `VideoMixID`) VALUES (NULL, '$NameVideo', '$idVideo')"); // тут был бардак с кавычками
    if(!$resultat){
     var_dump(mysql_error()); // тут скорее всего ругнётся, что id не может быть NULL
     exit();
    }
    mysql_close($db);
    Ответ написан
    Комментировать
  • Запрет на join? Оптимизированная выборка из связи многие-ко-многим без join с параметрами из линкованных таблиц?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Они так говорят, потому что:
    1) Если вы везде используете JOIN то на большом проекте у вас перестаёт работать кеш встроенный в БД, т.к. insert или update хотя бы в одну из таблиц участниц join сбросит кеш всего запроса, а на больших проектах изменения данных идут постоянным потоком.
    2) JOIN делает жётские связи на уровне данных, это хоронит возможность оптимизации на уровне архитектуры приложения. Когда таблицы не связанны внешними ключами и запросами то мы можем перенести любую таблицу, в другую БД оптимизированную для нужных типов запросов, написать например на Си отдельный сервис/демон для этих данных. При этом нам надо будет переписать только одну сущность в приложении. В случае с разрешёнными JOIN может выясниться что переписать надо вообще всё.
    3) Существует популярный подход переваривания больших нагрузок/данных это шардинг, т.е. раскидывание диапазонов данных по разным серверам, это когда первые 10 миллионов записей лежат на одном сервере а вторые на другом, join в этом случае сделать нельзя.
    4) Нормализация, полностью нормализованная БД самая медленна(т.к. куча JOIN, каждый из них это умножение двух матриц), но зато самая компактная, полностью не нормализованная БД самая быстрая (так как всё берём одним простым запросом), но очень жирная и неприемлемо сложная в работе.

    Ваш пример очень абстрактен, если про него ясно только, что данных очень много и не известно кто и в каких условиях будет с этим работать, но скорость ответа важна, а количество запросов будет большими. (Например это API к которому сторонние люди будут писать приложения и потенциально рекламировать эти приложения по ТВ)
    То например так:
    1) Запросом c JOIN скормить данные этих двух таблиц в поисковый индекс на sphinxsearch
    2) Делаем запрос с параметрами book.param = 1 AND author.param = 2 поисковому индексу сфинкса, он возвращает нам PK ID нужных сущностей
    3) Делаем SELECT * FROM t WHERE id in(1,2,3..N)

    Таким образом мы получаем сложную и тяжёлую фоновую индексацию, но очень быстрые и отъедающие крохи ресурсов сервера запросы в онлайне. Из минусов сильно усложняем архитектуру, а соответственно написание, отладка и поддержка кода становятся намного дольше, а количество людей которые могут это делать намного меньше, что в свою очередь является серьёзной проблемой но другого уровня.
    Ответ написан
    Комментировать
  • Насколько важно сейчас начинающему веб-разработчику разбираться в SQL досконально?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Реализация ORM обычно такова, что это тот же SQL синтаксис только в виде объекта вызовов методов объектов.

    1. В простых случаях, что то типа: User::findAll()->where(['id'=>10])
      Это как бы прикольно, но тот же SQL: SELECT * FROM user WHERE id =10 не выглядит более сложным.
    2. Join, ORM как бы скрывает джойны:

      $UserCollection = User::findAll()->where(['id'=>10]);
         foreach($UserCollection as $User){
            if($User->ProfileSetting->is_enable == 'yes'){
               doSomething($User);
            }
         }

      Тут как бы скрыто то, что запрос происходит к двум связанным таблицам (user и profile), это достаточно в многих случаях, но в любом случае это не круто, т.к. вы не знаете какой запрос или запросы генерит ORM и не понимаете, что происходит на самом деле.
    3. Внешний вид запросов в объектном представлении становиться тяжёлым для восприятия даже для запросов средней сложности, с SQL таких проблем нет.
    4. Для сложных запросов ORM не даёт ни чего, кроме варианта писать тот же SQL.


    ORM имеет серьёзные преимущества в кодогенерации, в написании автоматизированных тестов.

    Если у вас есть какие то планы стать не начинающем разработчиком, то вам неприменимо нужно начать разбираться как работают базы данных в целом, т.е. понимание реляционной алгебры (это по сути и есть SQL), и понимание того, что стоят запросы (насколько нагружают диск/процессор).

    Так происходит потому, что по мере роста вашей квалификации у вас будут пропадать сопутствующие задачи типа вёрстки и js, готовую архитектуру вам навяжут фреймворки, а вашей основной задачей будет манипуляции с небольшими блоками данных хранящимися в больших массивы данных.
    Ответ написан
    Комментировать
  • SQL, MySQL/Oracle, что и как учить?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Не стоит MySQL приравнивать к Oracle, сфера применения этих БД разная.
    По mysql можно почитать документацию на официальным сайте, и полистать вопросы на соответствующем форуме на sql.ru для большего понимания предметной области и в принципе уже как то можно начинать работать.
    С Oracle всё несколько сложнее, это дорогая БД в которой обычно данные на порядки дороже, тут путь проще начинать с официальных курсов и официальной сертификации.
    Ответ написан
    2 комментария