Задать вопрос
Ответы пользователя по тегу Базы данных
  • Зачем login повторяется в phpmyadmin?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Удаляем дубли:
    DELETE u.*
      FROM users AS u
      JOIN users AS d
        ON d.login = u.login AND d.id < u.id;

    2. Ставим уникальный индекс на login, чтобы добавить дубль было невозможно даже при ошибке в коде:
    ALTER TABLE users ADD UNIQUE (login);
    Переписываем код.
    3 (необязательно). Прежде, чем добавлять логин в таблицу, делаем запрос на наличие в ней такого логина и, если он есть, то возвращаем сообщение, что такой логин уже есть.
    4. Делаем вставку и, если она не удалась, то проверяем ошибку. Если это ошибка 1062 Duplicate entry, то какой-то поток успел вставить такой логин раньше и, опять же, возвращаем сообщение, что такой логин уже есть.
    Ответ написан
    Комментировать
  • Как правильно связать таблицы Postgesql с таблицей File?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Я бы выбрал вариант с несколькими полями в таблице Files. Он позволяет указать FOREIGN KEY и, соответственно, получить автоматический контроль целостности связей.
    И при отсутствии связи в поле должен быть не 0, а NULL.
    Ответ написан
    Комментировать
  • 5 млн файлов JSON или DB?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если по записям нет никакого поиска и всегда точно известно (вычислимо) имя файла, то база данных не нужна. Заливка на CDN тоже не имеет смысла, поскольку ваш API будет на одном сервере, а не разбросан по миру. Проще всего в этом случае хранить все файлы локально на API-сервере.
    Ответ написан
  • Не понимаю как правильно ли использую функцию DISTINCT?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы неправильно понимаете работу с базой данных. Результат запроса - таблица, в которой каждое поле каждой строки заполнено данными или NULL. Как вы себе представляете желаемую таблицу?
    JSON у вас тоже неправильный. В объекте не может быть нескольких свойств с одним именем.
    Сделать JSON из таблицы можно. Например, в MySQL для этого используются функции JSON_ARRAYAGG и JSON_OBJECTAGG в сочетании с GROUP BY.
    Ответ написан
    3 комментария
  • Как следить за изменением авторизации пользователя?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не надо "следить". У вас должен быть короткоживущий основной токен. Каждый раз при его обновлении проверяйте статус пользователя и не выдавайте новый токен, если пользователь заблокирован.
    Ответ написан
    Комментировать
  • Как спроектировать приложение? Или как лучше хранить данные?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Картинки, документы, архивы и прочие файлы хранятся как обычные файлы в файловой системе. В базе данных хранится путь к ним.
    Если файлов много и возможно совпадение названий, то файлы переименовывают по какой-либо единой схеме (например, GUID).
    Ответ написан
    Комментировать
  • Не могу выполнить запрос к БД используя PDO. В чём проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Плейсхолдеры только для данных.
    Ключевые слова, названия баз, таблиц и колонок плейсхолдерами не заменяются.
    Ответ написан
    Комментировать
  • Как решить проблему с удалением статей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Значит между таблицами создана связь с опцией ON DELETE CASCADE.
    В принципе, это логично. Публикации содержат в себе идентификатор категории. Если удалить категорию, то идентификатор будет указывать на несуществующую запись в таблице категорий, нарушится логическая целостность БД.
    Можете изменить связь, задав опцию ON DELETE SET NULL. В этом случае в поле идентификатора категории запишется NULL и вам придётся учитывать факт существования публикаций без какой-либо категории.
    Ответ написан
    2 комментария
  • Как вложенный запрос в select'ах вынести отдельно в WITH?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Полностью уберите условие присоединения. Тогда строка из Max_amount будет присоединена к каждой строке из book.
    Ответ написан
  • Почему PARTITION BY в запросе сгруппировал 1 строку неправильно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это у вас просто что-то с отображением на экране. Там вообще нет ни одной жирной линии.
    627a18bfc2c65066104115.png
    Ответ написан
    1 комментарий
  • Как правильно составить sql запрос?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT `p`.`id_user`, `u`.`name`, `u`.`surname`, `u`.`avatar`, `p`.`chat_id`
      FROM `party` AS `o`
      JOIN `party` AS `p`
        ON `o`.`id_user` = :user
          AND `p`.`chat_id` = `o`.`chat_id`
          AND `p`.`id_user` != :user
      JOIN `users` AS `u` ON `users`.`id_user` = `p`.`id_user`
    Ответ написан
    Комментировать
  • Как организовать режим работы заведения в базе данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Например, так:
    `organization_id` INT,
    `weekdays` SET(1,2,3,4,5,6,7),
    `date` DATE,
    `from` TIME,
    `to` TIME

    Поле date для организации исключений, например на праздниках.
    Ответ написан
    Комментировать
  • В чем смысл связи один к одному?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если нет отдельной сущности "телефон" со своими параметрами (есть только номер), то так делать бессмысленно.
    Если есть (например, IP-телефон со всеми настройками), то это просто закрепление факта, что за каждым телефоном закреплён один конкретный уникальный пользователь.
    Ответ написан
    1 комментарий
  • Какую БД выбрать для маленького файлового сервиса?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Любую, какую лучше знаете. На таких количествах любая БД будет работать без проблем.
    Ответ написан
    1 комментарий
  • Как из *.dat файла -> в *.sql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Первым идёт дескриптор PDA2, потом какие-то бинарные данные.
    По смещению 0x20 начинается заголовок. Все поля текстовые, разделяются концом строки (0xD 0xA). В начале каждого поля идёт название, затем двоеточие и значение поля.
    В начале заголовка идёт общее описание данных
    spoiler
    beginheader:                            // признак начала заголовка
    clk:0.01                                // скорее всего, частота дискретизации данных
    typ:real                                // тип данных
    starttime:20.02.2017 09:24:07.100000    // время начала 
    frames:0003600000                       // количество кадров данных
    starttrigger:0000000000
    stoptrigger:0000000000
    $PDA_RefTimestamp:00063623161262590000  // таймстамп с устройства ??
    Module_name_0:Generic unicast UDP       // названия модулей
    Module_name_1:Generic unicast UDP
    Module_name_2:Generic unicast UDP
    Module_name_3:Generic unicast UDP
    Module_name_4:Bits01
    Module_name_5:Bits02
    Module_name_6:Bits03
    Module_name_7:Bits04
    version:ibaPDA 6.24.6                    // версия прошивки ??
    PDAKeyInfo:0168b02050020302060068a4280021018b0c246a842850a2008114154880800023040918106880804080040d101068a08040800205001028008040800201081028200040800207
    PDAKeyInfo2:0140008114520001040000040904700081141002040914700081040140000004700001040040000104700001041040000104300041041041008104600001040041200104600001114000011450000104104004090470008104104204091470008104114000010470000104104000010470000104104102050c70204184104100010c602001041040000104702041
    PDADongleId:0100000010400000000000040800600080000002040810600080000100000000600000000000000000200000000000000000200000000000000000200000000000000000200000
    endheader:                               // признак конца заголовка

    Затем идут описатели каналов
    spoiler
    beginchannel:0                     // начало канала и его номер
    unit:                              // единица измерения
    $PDA_comment1:IBA[1]               // комментарий с устройства
    $PDA_Tbase:0.01                    // ??
    $PDA_Typ:int16                     // тип данных
    minscale:-32768                    // минимальное значение
    maxscale:32767                     // максимальное значение
    xoffset:000000000000               // ??
    channel_offset:O6E6B36E540406460   // смещение данных
    endchannel:                        // признак конца описателя

    В конце идёт endASCII, после которого начинаются бинарные данные каналов, полученные с устройства. Тут уже надо разбираться серьёзно, особенно учитывая, что записано порядка 500 каналов и не имея представления о том, что должно быть в результате.
    Ответ написан
  • Какие есть языки разметки без строгой вложенности?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что значит "без строгой вложенности"? Вложенность либо есть, либо её нет.
    Вашу структуру легко сделать на XML, отдельно описав года, месяцы и недели, указав, сколько дней занимает тот или другой элемент:
    <calendar>
      <years>
        <year days="4">
        <year days="6">
        <year days="1">
      </years>
      <months>
        <month days="2">
        <month days="4">
        <month days="5">
      </months>
      <weeks>
        <week days="1">
        <week days="2">
        <week days="2">
        <week days="2">
        <week days="2">
        <week days="2">
      </weeks>
    </calendar>
    Ответ написан
  • Зачем данные в всех БД хранятся в HEX?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не можете понять то, что сами придумали?
    Базы хранят бинарное представление данных, зависящее от их типа. Никто не будет перекодировать, например, числа в HEX-строку, это никакого смысла не имеет.
    Ответ написан
  • Many-to-many как избежать Race conditions?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Блокировка таблицы или SQL-запрос, составленный так, чтобы возникала ошибка при попытке добавлении лишней записи.
    Например, для MySQL
    INSERT 
      INTO `users_subscriptions` (`user_id`, `subscription_id`)
      SELECT IF(`count` < 5, :userId, NULL), :subscriptionId
        FROM (
          SELECT COUNT(*) AS `count`
            FROM `users_subscriptions`
            WHERE `user_id` = :userId
        ) AS `t`
    Ответ написан
    Комментировать
  • Как уменьшить нагрузку при использовании foreach для считывания БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё зависит от решаемой кодом задачи. Если это вывод всех пользователей, например в админке, то нормально. А если вы таким образом проверяете наличие пользователя при аутентификации, то очень плохо.
    Ответ написан
  • Роль интерфейса пользователя в программировании СУБД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Трудно найти чёрную кошку в тёмной комнате. Особенно, если её там нет.
    Большинство СУБД предоставляют один и тот же интерфейс для всех пользователей. Скажем, в SQLite, MySQL и PostgreSQL это консоль с командной строкой. Разница только в правах на доступ к базам/таблицам и на конкретные операции с ними.
    Ответ написан