Задать вопрос
  • Можно ли добавлять Null в INT поле?

    mayton2019
    @mayton2019
    Bigdata Engineer
    NULL и 0 будут давать разный результат при подчете агрегации. Sum, Avg и прочие стат- функкии будут учитывать 0 и игнорировать NULL.

    Вообще в реляционной алгебре правильно использовать NULL когда данных нету.

    Еще для некоторых dbms (Oracle) Null не индексируется. Это экономит место в сегменте индекса и делает поиск более быстрым дла nullable колонок.
    Ответ написан
    Комментировать
  • Можно ли добавлять Null в INT поле?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    NULL — это отсутствие значения. Если не "устанавливать" значение, то это и будет по-умолчанию. Если поле участвует в вычислениях, то лучше поставить 0. Если отсутствие значения используется в логике, то оставляйте NULL. Например количество товара: 0, код (если допускается неопределённость) —NULL.
    Ответ написан
    1 комментарий
  • Правильно ли составлена схема для магазина?

    @full_stack_newbie
    Если это не курсовая, то сыро.
    Цены - в отдельную таблицу, добавлять период действия. Если цена меняется с завтрашнего дня, вы когда их менять будете?
    Закупочные цены - тоже имеют свойство меняться. Партии товаров на складе могут иметь разную цену поступления. Не увидел, что будет двигать остатки товара на складе (на вход).
    Оплаты фиксировать в отдельной таблице, там будут конкретные транзакции, типы оплаты, не стоит это все пихать в заказ.
    Скидки - так же в отдельную таблицу, период действия, типы скидок, etc
    Это очень кратко.
    Ответ написан
    5 комментариев
  • Правильно ли составлена схема для магазина?

    1. Хранение адреса в виде записей в базе.
    Думаю, вполне можно было бы обойтись текстовым полем и id по кладр/фиас/гар (если россия).
    Всё равно все возможные форматы адресов ты нормально не покроешь (а если покроешь - это будет свой фиас)
    2. Использование float для хранение цены товара
    3. Скидка чисто в виде числа в заказе - вполне возможно, что ты захочешь ввести какую-нибудь более гибкую систему скидок.
    В текущей ситуации такое невозможно.
    Например скидку в виде абсолютного количества денег, полностью бесплатный/подарочный товар.
    Скидку только на отдельную категорию товара, или систему баллов.
    Так что я бы сделал бы отдельную таблицу со скидкой на заказ, которую бы мог потом расширять.
    (в принципе, можно оставить пока так, а потом миграцией всё исправить)
    4. (комментарий про хранение цены убран, тк я изначально не заметил поле store_price)
    5. Хотелось бы, чтобы была функция оформления заказа без регистрации.
    6. А, ну и да. В заказе должен быть указан адрес. У пользователя их может быть несколько, и должен быть способ определить, на какой именно доставлять. (а с учётом п5 - адрес должен быть самостоятельной вещью)
    + Должна быть система как и с ценой - адрес у уже завершённого заказа не должен меняться.
    7. А где статусы заказа? Типа новый/оплачен/доставка/доставлен/завершён?

    PS: всё это из расчёта, что это магазин в россии, который продаёт физические товары за рубли.
    Думаю, если закапываться, можно ещё много чего найти не только в реализации, но и в требованиях

    PPS: Применять такую схему я бы осмелился только в рамках курсовой работы в колледже. Даже на диплом это врядли тянет, не говоря о реальном мире.
    Ответ написан
  • Правильно ли составлена схема для магазина?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В целом правильно, но если уж затеваться с хранением адресов, то тогда в заказе должна быть ссылка на id адреса. иначе просто нет смысла. В целом для такой примитивной схемы отдельное хранение адресов выглядит неадекватным, я бы просто писал адрес в заказ.
    То же самое про телефоны. Просто писать в таблицу юзеров.
    Не хватает емейла. Смс на каждый чих рассылать дорого.

    В таблице заказов очень сильно не хватает поля status. Ну и связанной таблицы с историей статусов.
    Отдельно хранить дату и время - это глупость. Есть тип datetime
    discount - это ОЧЕНЬ отдельная тема. Но по крайней мере скидка должна размазываться по товарам. Если клиент при выкупе откажется от одного, то как пересчитывать цену?
    В целом стоит в заказе дублировать основную инфу по товарам. Потому что её надо показывать в истории заказов, а товара может уже не быть в базе. В том числе цену до скидки и со скидкой.

    Непонятно, что за таблица store.
    Ответ написан
  • Подойдет для простого букинга?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Для ООООЧЕНЬ простого букинга с большой натяжкой.

    Не вижу собсно отелей (или он будет один? Тогда это не букинг, а бронирование в отеле)

    Не вижу типов комнат (возможно это сайт бронирования конкретной квартиры покомнатно?)

    Эмоунт - это деньги? Тогда тип флоат не подходит.

    Что за фючеред_имэйдж? еще и интежер...

    Где опции в номере? Или в комнатах квартиры все удобства на улице и это где то отдельно текстом прописано?

    Короче пока на 2 с плюсом...
    Ответ написан
    6 комментариев
  • На чем лучше делать ML-движок/модель - на Python или C++? Где библиотек больше и т.п.?

    @dmshar
    Если вы не понимаете преимущества и недостатки этих языков именно в задачах ML, а кроме того, вы в одну кучу намешали "ML-движок" и "ML-модель" , то это просто означает что у вас (и вашей команды) знания в области ML реально нулевые. В таком случае писать самостоятельно "ML-движок" я бы вообще поостергся. Как вам уже посоветовали - нанимайте людей, которые имеют соответствующую экспертизу, они и на ваши вопросы вам ответят. Опыт в программировании и опыт в ML - это близкие, но совершенно различные скилзы.
    P.S. Про вопрос - а ЗАЧЕМ самостоятельно писать "ML-движок" - я вообще умолчу.
    Ответ написан
    1 комментарий
  • Не удается получить дочерний элемент родителя, в чем проблема?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    Свойство children хранит в себе псевдомассив дочерних элементов. Дочерними элементами считаются все теги, которые непосредственно расположены внутри блока. Подробнее можно прочитать в документации.

    Ну, а так... интересная конечно строка:

    var parent = this.closest('div').className;

    Как вы думаете что содержит в себе переменная parent? HTMLElement или строку содержащую селектор класса выбранного элемента?

    В общем правильнее сделать так:

    const parent = this.closest('.parent-selector');
    const child = parent.querySelector(".b24-form-control-label");


    И вообще, пора бы уже использовать const/let вместо устаревшего var.
    Ответ написан
    Комментировать
  • Выбор архитектуры: web или desktop?

    @rPman
    Web - на два порядка проще (читай дешевле) для разработки за счет повышенного требования ресурсов на клиентской стороне.

    Десктоп - возможно создание очень эффективных приложений но за счет очень дорогой поддержки всего разнообразия устройств и операционных систем (в веб этим занимается браузер и даже в этом случае приходится напрягаться)

    И главное, из веб приложения достаточно легко (например с помощью electron) можно сделать десктопное приложение.

    p.s. как бы я не нелюбил веб, который тянут даже туда где не надо, но его плюсы неоспоримы а страдающие клиенты от тормозов приложений, требующих топовое железо для простого чата... кто нас слушает?

    Кстати, один момент, тормозные веб приложения это не потому что веб такой плохой, это потому что разработчики ленятся делать все как следует. Рынок заполонили низкокачественные разработчики на основе веб. Помни об этом!
    Ответ написан
    Комментировать
  • Существует ли программа, отслеживающая изменения на заданных страницах сайтов?

    @As56
    Это самому написать легко
    Ответ написан
    Комментировать
  • Как можно с помощью js css, сделать линии на сайте, которые будут следовать за курсором?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    на указанном сайте в отдельном js файле подключается функция "initOciliator" она и создаёт анимацию
    https://codepen.io/jrkdv/full/qBYYPyw
    изменил оригинальную функцию на 200 строке, добавил смену цвета
    Ответ написан
    7 комментариев
  • Почему везде используют const вместо let в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Редактор кода домой не отпустит, пока переменную, которую нигде не изменяют,
    не объявить вместо let — const )

    Иммутабельность должна быть явной!

    При чтении кода гораздо удобнее для понимания изначально знать, что от константы сюрпризов не ждать.
    А переменную стоит посмотреть внимательнее: где, как, зачем и на что меняют.
    Ответ написан
    Комментировать
  • Как отфильтровать ненужные записи?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Object.values(data)
      .flatMap(({ person }) => Object.values(person))
      .filter(({ age }) => age === 18)
    
    // [ { name: "alex", age: 18 } ]
    Ответ написан
    2 комментария
  • Как подменить IP при раздаче с роутера?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    Поднимаешь в РФ VPN (или арендуешь VPS в РФ) и подключаешься к нему на роутере. Заворачиваешь только необходимый трафик на роутере/пк в этот VPN.

    Те, тебе в любом случае нужен мост к серверу в РФ, чтобы ходить через него на необходимые сервисы.
    Ответ написан
    1 комментарий
  • Как скопировать текст из iframe в переменную js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если в iframe загружена страница с того же origin (протокол + домен + порт) откуда загружена текущая - то Вы имеете полный доступ к его window через свойство contentWindow. Соответственно можете обращаться к его DOM, глобальным переменным, менять их и т.д.

    Если в iframe будет страница с другого origin, то ничего этого нет, с ней можно лишь общаться через postMessage api, но если страница не Ваша, то и скрипт для обработки postMessage + каких-либо еще действий Вы туда не вставите.

    Если сторонний сайт отдает нормальные CORS заголовки при запросе с Вашего сайта (что судя по вопросу не так, но все же), то можно скачать страницу как текст через fetch api и распарсить ее через DOMParser.

    В противном случае остается только делать прослойку у себя на сервере, тут простор фантазии может быть очень широким, от банального reverse proxy прямо в nginx до чего-то более умного на любом серверном ЯП.
    Ответ написан
    Комментировать
  • Как сочетать BEM и динамический контент?

    qfox
    @qfox
    Ответы есть у меня
    У вас здесь 2 проблемы:
    • нужны ли классы для динамического контента;
    • как, если нужно, модифицировать структуру динамического контента.

    Проблема структуры не относится к BEM, она относится к семантике и SEO.

    Если же не смотреть на структуру и тэги (использовать ли small внутри или span, заворчивать ли в article) — то вопрос в сущности нужны ли классы на динамическом контенте или нет. Учитывая, что контент динамический, и нет необходимости иметь классы на тэгах, то допустимо сделать каскад на тэги от некоторого блока: например, dynamic-content или content, text.

    Почему именно теги? Потому что WYSIWYG по умолчанию генерирует теги. Но вы можете использовать какие-то доп. инструменты, которые подправят итоговый html, расставят классы и т.д. (например, с помощью инструментов типа https://github.com/posthtml/posthtml ).

    При необходимости можно дополнительно пометить стили тегов классами.

    <div class="text">
      <h1>Caption <small>Some Foo Bar</small></h1>
      <article>
        <p>Lorem ipsum...</p>
        <div class="text__p">Dolor sit...</div>
      </article>
    </div>


    .text h1, .text__title { /* main title styles */ }
    .text h1>small, .text__sub-title { /* sub-title styles */ }
    .text p, .text__p { /* paragraph styles */ }


    Таким образом вы инкапсулируете все пользовательские стили в одном месте (одном блоке) и не имеете проблем с созданием контента.
    Ответ написан
    2 комментария
  • Как пользоваться BEM?

    Machinez
    @Machinez
    1) Всё верно.

    2) В стилях блока мы описываем только его внешний вид, внутренние отступы и т.д, блок не знает где он находится и какой его размер, позиционировать можно элементы.
    к примеру у нас есть блок авторизации в хедере
    <header class="header">
      <div class="header__auth">
        <div class="auth">
          <div class="auth__item"></div>
          <div class="auth__item"></div>
        </div>
      </div>
    </header>

    в .header__auth мы описываем положение и размер элемента, в .auth описываем внешний вид.

    3) Только класс элемента, но бывают исключения, например используя модификаторы иногда можно воспользоваться каскадом.

    4) Может, называете точно так-же как и другие элементы
    пример:
    <ul class="props__list">
        <li class="props__item">
            <span class="props__label">Weight:</span>
            <span class="props__value">128</span>
        </li>
    </ul>

    хорошие примеры можете посмотреть тут

    5) Не совсем понял вопроса.

    6) cf = clearfix, общепринятый класс, используется как исключение из правил БЭМа, хотя и не приветствуется. Для интерактивности и щелчков нужно использовать модификаторы.
    пример:
    <a class="button button--is-active">click me</a>
    Ответ написан
    2 комментария
  • Без bem поддержка проекта сложна?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Системный подход должен быть, неважно какой. Если есть прослеживаемая система - поддерживать можно.
    Лично мне БЭМ больше импонирует. Но это скорее потому, что я чаще всего с ним работаю.
    Ответ написан
    Комментировать
  • Как разослать всем уведомление, не циклом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Делаете составной уникальный ключ (`user`, `ho`) , после чего всё сводится к двум запросам
    INSERT INTO `mail` (`user`, `to`, `text`, `time`)
      SELECT 2, `id`, :text, :time
        FROM `users`
        WHERE `id`  != 2;
    
    INSERT INTO `contacts` (`user`, `ho`, `delete`, `time`)
      SELECT *
        FROM (
          SELECT `id`, 2, 0, :time
            FROM `users`
            WHERE `id` != 2
          UNION ALL SELECT 2, `id`, 0, :time
            FROM `users`
            WHERE `id` != 2
        ) AS `t`
      ON DUPLICATE KEY UPDATE `delete` = 0, `time` = VALUES(`time`);

    А вообще, какой-то жуткий легаси у вас. Библиотека mysql_ уже давно почила в бозе.
    Ответ написан
    31 комментарий
  • Как через os/exec запустить сторонний exe файл в GoLang?

    При использовании exec.Command, первым аргументом там всегда исполняемый файл, а дальше идет перечисление аргументов, которые этому исполняемому файлу будут передаваться. Причем, их не надо экранировать.

    Несколько примеров:
    path := `c:\Program files\some program\program.exe`
    // аналогично вызову в консоли start "c:\Program files\some data"
    cmd := exec.Command("start", path)
    ......
    
    // аналогично вызову в консоли "c:\Program files\some program\program.exe"
    cmd := exec.Command(path)
    ......
    
    // аналогично вызову в консоли some_prog.exe -flag1 value1 -flag2 value2
    cmd := exec.Command("some_prog.exe", "-flag1", "value1", "-flag2", "value2")
    ......


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

    Кстати, если вам просто нужен полный ответ команды stdout+stderr, можете использовать метод cmd.CombinedOutput(). Он выполнил программу, дождется ее завершения и вернет полностью то, что она писала в консоль.
    Ответ написан
    7 комментариев