Ответы пользователя по тегу Базы данных
  • Как правильно связать таблицы 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 это консоль с командной строкой. Разница только в правах на доступ к базам/таблицам и на конкретные операции с ними.
    Ответ написан
  • Как получить файл из вложения в виде 0х504B...?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    0x50 - P
    0x4B - K
    Похоже на стандартный заголовок запакованного файла. Значит просто запишите данные в файл в бинарном режиме.
    Ответ написан
    3 комментария