Ответы пользователя по тегу Базы данных
  • БД SQL - нормальны ли magic numbers в БД, которые имеют константы в back end коде? Или лучше сделать таблицу и отношение?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если дальнейшего расширения не предполагается, сделайте поле с типом ENUM.
    Ответ написан
    2 комментария
  • Шифрование телефонных номеров пользователей через RedBean?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Опасны - потому, что можно увести всю информацию из базы, ну или поломать её.
    Скажем, в своём запросе подставьте $id = '1 OR true'
    Защита - использование подготовленных выражений с плейсхолдерами.
    Ответ написан
  • Какое решение выбрать для этой ситуации?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Сделайте для сотрудников Web-приложение, пусть получают задания и отмечают их выполнение прямо в нём.
    Добавьте скрипты импорта и экспорта для обмена со страховыми.
    Ответ написан
    Комментировать
  • Важен ли порядок столбцов в индексе Mysql при поиске Where?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В вашем примере речь идёт, скорее, не о порядке сравнений во WHERE, а о порядке колонок в индексе.
    При поиске используется только начальная часть составного индекса. То есть индекс (a, b, c) можно использовать при поиске по a, ab или abc. Поиск по b, c или bc использовать такой составной индекс не будет.

    Обратите внимание на строчку 'rows' в ответе EXPLAIN'a, подозреваю, что у вас в таблице всего семь строк, а значит запрос просмотрел их все, не воспользовавшись индексом.

    Эврика! Здесь говорится, что в случае покрывающего индекса (а здесь именно такой случай) записи индекса используются для ускорения доступа к данным при переборе, так как записи индекса, в общем случае, занимают меньше места и расположены компактнее, чем записи самой таблицы.
    Ответ написан
    Комментировать
  • Email или User id в БД created_by?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как раз Id пользователя в БД меняться не должен никогда. А вот email можно менять как угодно.
    Ответ написан
    1 комментарий
  • Где взять базу всех русских слов во всех падежах?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Без контекстного анализа словарь справится далеко не со всеми словами.
    пиши́те - пи́шете
    писец (профессия) - песец (животное)
    белуга (рыба) - белуха (млекопитающее)
    в течении (реки) - в течение (суток)
    Ответ написан
  • Зачем нужна схема данных в access?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ER-диаграмма нужна не для работы БД, а для самого разработчика. Она позволяет наглядно отобразить таблицы и связи между ними. MySQL Workbench позволяет нарисовать ER-диаграмму и сгенерировать по ней команды создания таблиц с внешними ключами, а также умеет восстанавливать ER-диаграмму из имеющейся БД.
    Ответ написан
    Комментировать
  • Как задать текущие дату и время значениями по умолчанию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вешать на таблицу триггер BEFORE INSERT с заполнением поля.
    Ответ написан
  • Как подписывать документы ЭЦП и хранить их в базе данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как правило, электронная подпись документа делается в виде хэш-суммы контролируемого набора атрибутов документа (текст, название, автор и т.д.), зашифрованной закрытым ключом. Для проверки снова производится вычисление этой же хэш-суммы, подпись расшифровывается парным открытым ключом и расшифрованная хэш-сумма сравнивается с вычисленной. Если они совпадают - подпись действительна. Если какой-либо атрибут документа был изменён, то хэш-суммы не совпадут.
    В первом варианте обе части ключа хранятся в системе, для подписи документа пользователь вводит пароль к закрытому ключу, подписание идёт непосредственно на сервере.
    Во втором, более сильном, варианте закрытая часть ключа хранится у пользователя на криптоносителе. Сформированный документ передаётся с сервера клиенту, подписывается через криптопровайдер (например, КриптоПро ЭЦП Browser plug-in) и подпись отправляется обратно на сервер.
    В обоих случаях открытая часть ключа хранится на сервере и служит для проверки подписи.
    Ответ написан
  • Как построить алгоритм жеребьевки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Берёте полный список команд, тасуете его, выводите парами (i, i+1) из списка.
    Алгоритм тасования массива [1..n]:
    для всех i от n  до 2 выполнить
      j ← случайное число 1 ≤ j ≤ i
      обменять местами a[j] и a[i]
    Ответ написан
    Комментировать
  • Как ускорить mysql запрос с JOIN LEFT?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала - записать запрос понагляднее. В условиях ON записать поля присоединяемой таблицы в левых частях сравнений:
    SELECT * 
      FROM `tbl_1` 
      LEFT JOIN `tbl_2` ON `tbl_2`.`id_fp` = `tbl_1`.`foto_id` AND `tbl_2`.`sklad` = 'Склад' 
      WHERE (deleted="no" AND `where`="arh")  AND (`type`="Cloth" ) 
      ORDER BY `foto_id` ASC 
      LIMIT 9447,20;

    Теперь видно, что для ускорения JOIN'а стоит сделать в таблице `tbl_2` составной индекс (`id_fp`, `sklad`).
    Затем надо смотреть EXPLAIN и, возможно, переносить условия из WHERE в предварительную выборку из `tbl_1`.
    Но, если к одной строке из `tbl_1` присоединяется несколько строки из `tbl_2`, то ORDER BY и LIMIT надо оставить снаружи.
    SELECT * 
      FROM (
        SELECT *
          FROM `tbl_1` 
          WHERE (deleted="no" AND `where`="arh")  AND (`type`="Cloth" ) 
          ORDER BY `foto_id` ASC 
          LIMIT 9447,20
      ) AS `t1`
      LEFT JOIN `tbl_2` ON `tbl_2`.`id_fp` = `t1`.`foto_id` AND `tbl_2`.`sklad` = 'Склад'

    Ну и, напоследок, заменить * на необходимый список полей, чтобы не тянуть из базы лишние данные.
    Ответ написан
    Комментировать
  • Какой аналог check есть в mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Навесить на вставку/изменение строк триггеры BEFORE INSERT / BEFORE UPDATE, в котором будет идти нужная проверка и выдаваться ошибка.
    Ответ написан
  • Можно ли вернуть таблицу из функции mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак. В MySQL функция возвращает только одно значение. Может вам подойдёт VIEW?
    Ответ написан
  • Как правильно построить таблицу MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    классы (id, номер)
    предметы (id, название)
    преподаватели (id, фио)
    расписание (id_класса, id_предмета, id_преподавателя, день_недели, номер_урока)
    корректировки (id_класса, id_предмета, id_преподавателя, дата, номер_урока)
    Ответ написан
    Комментировать
  • Как оптимизировать запрос?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    LEFT JOIN `Block_Random` ON `Blocks`.`Block_Type` = 'random' 
      AND `Block_Random`.`Block_ID` = :some_id
    Ответ написан
  • Mysql как сделать поле альтернативной нумерации?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Повесьте триггер
    DELIMITER $$
    CREATE TRIGGER `items_BEFORE_INSERT` BEFORE INSERT ON `items` FOR EACH ROW
    BEGIN
    	DECLARE oldmax INT;
    	SELECT IFNULL(MAX(`alt_id`), 0) 
    		FROM `items` 
    		WHERE `category_id` = NEW.`category_id` 
            INTO oldmax;
    	SET NEW.`alt_id` = oldmax+1;
    END$$
    DELIMITER ;
    Ответ написан
    2 комментария
  • Как улучшить модель бд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Привести, как минимум, в третью нормальную форму.
    Ответ написан
  • Достать данные из БД edb, возможно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С .edb умеет работать ESEDatabaseView
    Ответ написан
    Комментировать
  • Как сделать read only конкретной таблице mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Определитесь, вам нужна read-only таблица или строка в таблице?
    Для таблицы решение дал Boris Korobkov
    Для строки тоже можно извратиться:
    - добавляете в таблицу колонку `readonly` BOOL DEFAULT 0;
    - создаёте триггер BEFORE UPDATE, который проверяет значение колонки `readonly` и, если там стоит 1, то заменяет все NEW.поля, кроме NEW.`readonly` на соответствующие OLD.поля;
    - создаёте триггер BEFORE DELETE, который проверяет значение колонки `readonly` и, если там стоит 1, то выбрасывает ошибку;
    - меняете значения `readonly` на 1 в строках, которые надо закрыть от изменения.
    Ответ написан
    Комментировать