• Ошибка InvalidForeignKey, уникальность соблюдена, в чем ошибка?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ОШИБКА: в целевой внешней таблице "users" нет ограничения уникальности, соответствующего данным ключам

    Ошибка указывает на проблему, связанную со следующим внешним ключом:

    FOREIGN KEY(user_id) REFERENCES users (user_id)

    Таблица users должна существовать.
    В ней должно существовать поле user_id.
    Это поле должно быть определено как уникальное. Причём отдельно, а не в составе композитного уникального индекса.

    Так что смотрите, что именно нагенерила модель.

    PS. Если определено PRIMARY KEY (user_id), то дополнительное UNIQUE (user_id) абсолютно бессмысленно.
    Ответ написан
    Комментировать
  • Как реализовать VLAN в проектируемой сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Нормально спроектированная СКС предполагает как минимум наличие одного центра. Там собственно и размещается общее оборудование. Для настолько малой сети - стойка/шкаф, туда маршрутизатор доступа в Инет, коммутаторы, патч-панель и бесперебойник, и туда же заводится линк к провайдеру. От патч-панели - разводка медью до точек подключения стационарных компов (с пробивкой в розетки, предусмотреть лотки для раскладки кабельной сети), точек доступа и периферии.

    Коммутаторы - достаточно одного на 24 клиентских порта для разводки по меди (хотя раскладку всегда следует делать с запасом, народ то мебель переставит, то сетевую МФУ купит, то ноут подключит кабелем, так что я бы взял на 48 портов) и одного PoE на 8 портов для подключения точек доступа.

    Маршрутизатор - если нет необходимости разграничивать доступ, то формально и какого-нибудь SOHO роутера хватит. Скажем, Микротика из недорогих..

    Точки доступа лучше брать сразу комплект под бесшовку, чтобы с настройкой не трахаться. А если управляющий корпус сам обеспечивает PoE, то и второй будет коммутатор не нужен.
    Ответ написан
    1 комментарий
  • Как сделать VLAN в корпоративной сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вы неправильно понимаете, и от того неправильно мыслите.

    Представим, что у нас на коммутаторе сделаны, скажем, 3 VLAN. Ну и подключены какие-то узлы-клиенты. Так вот - чтобы построить то же самое, но без управляемого коммутатора, Вы должны взять три отдельных коммутатора, и в соответствии с VLAN переключить на них всех клиентов.

    Иными словами, сети различных VLAN изолированы друг от друга ПОЛНОСТЬЮ. И пусть Вас не обманывает, что все они сходятся в одном коммутаторе - внутри этого коммутатора никакого соединения между VLAN нет. Соответственно чтобы трафик ходил из одного VLAN в другой, нужен маршрутизатор, который одним интерфейсом смотрит в один VLAN, другим - в другой VLAN.

    Вы хотите сделать у себя 5 VLAN. Соответственно если они, скажем, должны обращаться к одному и тому же серверу-файлопомойке, или через этот один сервер ходить в Интернет, значит, в этот сервер придётся вставить 5 сетевых карт, и каждую из карт подключить к отдельному порту коммутатора, являющемуся членом одного из имеющихся VLAN. Вот Вы точно этого хотите? А представляете, какой получится монстр, если количество VLAN будет не 5, а 15?

    Да, в именно описанном случае можно спасти ситуацию, если использовать серверное оборудование и ПО, которые могут на одном внешнем интерфейсе создать несколько адресов из разных подсетей и статически зафиксировать для каждого из адресов определённый МАС-адрес, а на коммутаторе включить МАС-based VLAN. Но, поверьте, Ваша ситуация ну совершенно не располагает к созданию себе подобного геморроя...

    --------------------

    Как по мне, Вам вполне достаточно просто сделать несколько подсетей.
    Ответ написан
  • Как исправить долгое выполнение запросов на большой таблице?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Фактически выполняется сравнение двух длинных BINARY значений, причём при полнейшем отсутствии какого-никакого индекса. Чё б ему не тормозить?

    В качестве решения предлагаю изменить тип поля на TEXT и добавить CHECK, а также индекс по значению.

    CREATE TABLE test (
        id INT PRIMARY KEY,
        data TEXT CHECK (JSON_VALID(data)), 
        INDEX idx_data (data(100))   -- подогнать до разумного
    );

    DEMO (см. время выполнения запросов).
    Ответ написан
    Комментировать
  • Влияет ли различные кодировки таблиц на производительность MySQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    если в базе mysql (версия 5.7) часть таблиц в utf8mb4_general_ci, а другая в utf8_general_ci

    :facepalm: Это не кодировки! Это COLLATION - набор правил для сравнения строковых значений.

    Хотя справедливости ради следует сказать, что возможные COLLATION определяются использованным CHARACTER SET. А для показанных значений они различны - utf8mb4_general_ci указывает на UTF8MB4, а utf8_general_ci на UTF8, который для этой версии СУБД является алиасом UTF8MB3.

    Влияет ли это как-то на производительность mysql?

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

    Если нет - то на производительность именно СУБД это влияет слабо. Заметное влияние будет при прогреве кэшей, а также в случае ну очень объёмных таблиц.

    Плюс гарантированное преобразование финального набора записей при несовпадении CHARSET поля и клиентского соединения.
    Ответ написан
    2 комментария
  • Как найти к какому коммутатору подключена розетка?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Подключаем к розетке комп/ноут.
    2. Подключаемся к коммутаторам, смотрим FDB, ищем МАС компа/ноута на клиентском порте.

    Альтернативное решение.

    1. Подключаем к розетке комп/ноут.
    2. Запускаем от имени администратора следующий батник:
    :start 
    netsh interface set interface "Имя сетевого интерфейса" disable
    timeout /T 3
    netsh interface set interface "Имя сетевого интерфейса" enable
    timeout /T 3
    goto :start

    Идём по коммутаторам и ищем клиентский порт, мерцающий с частотой раз в 3 секунды.
    Ответ написан
    Комментировать
  • Как отсортировать записи по условиям?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *
    FROM tablename, 
    ORDER BY column3 = 'какое то условие' DESC,
             column2 = 'какое то условие' DESC,
             column1 = 'какое то условие' DESC

    Запрос предполагает, что columnX не содержит NULL.
    Ответ написан
    Комментировать
  • Как создать корректный SQL триггер?

    @Akina
    Сетевой и системный админ, SQL-программист.
    если в данной таблице уже существует поле с данным товаром, то прибавить единицу к его количеству
    а если его вообще нет, то создать новое поле

    ??? Какое ещё "поле"? может, запись? ну так для этого существует INSERT ... ON DUPLICATE KEY UPDATE Statement.
    А триггеры - они для дела, а не для баловства..
    Ответ написан
    Комментировать
  • SQL Можно ли получить результат одним запросом, без subselect?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Например, так:
    SELECT iw.id
    FROM anything iw
    LEFT JOIN status_anything si ON iw.id = si.anything_id
    LEFT JOIN status s ON s.id = si.status_id
    WHERE s.datum BETWEEN '2023-03-01' AND '2023-05-01'
    GROUP BY 1
    HAVING MIN(s.datum) > '2022-03-01'
    Ответ написан
    3 комментария
  • Как сравнить данные в нескольких excel файлах?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Скопируйте данные из 2-4 файлов на листы 2-4 книги 1 (или сразу листы целиком). Можно и не копировать, но так проще, не надо держать открытыми 4 книги, да и финальная конструкция получается переносимой.
    Используя ВПР(), в дополнительные колонки на листе 1 скопируйте данные с листов 2-4.
    Окончательно в дополнительных колонках на листе 1 с помощью ЕСЛИ + ЕПУСТО/ЕНД соберите из 4 значений одно финальное для каждого атрибута.
    Замените формулы на значения.
    Удалите промежуточные колонки.
    Всё.

    Пример для 4 книг, без копирования. Приоритет - 1,2,3,4.
    64421a32e9e09520530134.png
    Ответ написан
    Комментировать
  • Можно ли подключить виртуальные машины к разны wifi сетям?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Виртуальная сетевая карта виртуальной машины подключается не напрямую к внешнему сетевому устройству базовой ОС, а к виртуальному коммутатору менеджера виртуальных машин. К нему же подключается и одно из реальных сетевых устройств. И виртуальная машина через эти подключения имеет доступ ко всем узлам сети, подключенным к этому виртуальному коммутатору (если нет дополнительных ограничений).

    Соответственно формируйте два виртуальных коммутатора, и к каждому подключайте свой реальный WiFi-интерфейс. Виртуальная машина через виртуальный коммутатор будет подключаться именно к той WiFi-сети, к которой подключен реальный WiFi-интерфейс того же виртуального коммутатора.

    Вообще - изучите архитектуру построения сетевой подсистемы Вашего VMM в подробностях. И вопросы поставленного типа просто не будут возникать.
    Ответ написан
    Комментировать
  • Как соединить строки в одну?

    @Akina
    Сетевой и системный админ, SQL-программист.
    MS Access не имеет функции групповой конкатенации.

    Проблема решается путём создания пользовательской функции и использования её в запросе.

    Function group_concat(category As String) As String
    With CurrentDb.OpenRecordset("SELECT [Цех] FROM [Имя таблицы] WHERE [Продукция] = '" & category & "'")
        group_concat = ""
        .MoveFirst
        While Not .EOF
            group_concat = group_concat & "," & ![Цех]
            .MoveNext
        Wend
        .Close
    End With
    group_concat = Mid(group_concat, 2)
    End Function

    Поскольку пользовательская функция - скалярная, и не агрегатная, её нужно оборачивать какой-либо агрегатной функцией.
    SELECT [Продукция], MAX(group_concat([Цех])) AS [Цех]
    FROM [Имя таблицы]
    GROUP BY [Продукция];


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

    ---
    Ну или взять готовую DConcat() от Patrick G. Matthews: https://www.experts-exchange.com/articles/2380/Dom...
    Ответ написан
    Комментировать
  • Почему не работает маршрутизация между vlan'ми?

    @Akina
    Сетевой и системный админ, SQL-программист.
    L2:

    Switch1 должен пропускать VLANID 20 с порта Fa0/1 (untagged) на порт Fa0/2 (tagged).
    Switch2 должен пропускать VLANID 30 с порта Fa0/1 (untagged) на порт Fa0/2 (tagged).
    На Router1 на порте Gig0/0/0 должен быть VLANID 20 tagged.
    На Router2 на порте Gig0/0/0 должен быть VLANID 30 tagged.
    Порты Gig0/0/1 обоих роутеров должны быть в одном и том же VLANID, оба tagged либо оба untagged. Либо соединены напрямую без использования VLAN.

    L3:

    На PC1 должен присутствовать маршрут в 192,168,30,0/24 (либо дефолтный) через 192,168,20,1.
    На PC2 должен присутствовать маршрут в 192,168,20,0/24 (либо дефолтный) через 192,168,20,1.
    На Router1 должен присутствовать маршрут в 192,168,30,0/24 через 10,3,3,3.
    На Router2 должен присутствовать маршрут в 192,168,20,0/24 через 10,3,3,2.
    Ответ написан
    Комментировать
  • Как заполнить таблицу в MySQL через файл?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Изучите внимательно документацию по LOAD DATA.

    Во-первых, необходимо правильно указывать опции парсинга - разделитель, терминатор, квотирование и пр.

    Во-вторых, хорошим тоном считается указывать не только таблицу назначения, но и конкретные поля. А если импортируемый файл содержит данные не для всех полей, или порядок полей в файле и таблице не совпадает, то указание полей становится просто-таки обязательным и необходимым.

    В третьих, если данные не могут импортироваться напрямую, или если в процессе импорта необходима какая-то обработка импортируемых данных (например, корректировка формата даты), то следует использовать ещё Input Preprocessing - обработку данных между чтением из файла и записью в таблицу.

    id у меня auto-increment, пробовала и NULL, и 0, и просто цифрами заполнять - ни в какую.

    Пункт "во-вторых" в полный рост.

    Ну и любопытно, где именно Вы пробовали и NULL, и 0, и просто цифрами заполнять - в показанном Вами запросе под это просто нет места.
    Ответ написан
    Комментировать
  • Делит ли сабнеттинг бродкаст домейны?

    @Akina
    Сетевой и системный админ, SQL-программист.
    понял что у меня каша в голове

    Эт точно...

    Достаточно неплохое определение бродкастового домена Вы можете найти в Вики:

    Широковеща́тельный доме́н (сегме́нт) (англ. broadcast domain) — группа доменов коллизий, соединенных с помощью устройств второго уровня. Иными словами логический участок компьютерной сети, в котором все узлы могут передавать данные друг другу с помощью широковещания на канальном уровне сетевой модели OSI.

    Обратите внимание - достижимость широковещательной передачи не ограничивается адресом бродкаста подсети. Мультикастовые рассылки - это тоже широковещание.

    Но даже если ограничиваться только бродкастом подсети. Вот некий узел шлёт бродкаст. Он формирует пакет. Поскольку адрес назначения не является определённым узлом, то в пакете не указывается МАС-адрес. Пакет пошёл в сеть... И любой коммутатор, не имея этого неуказанного MAC в FDB-таблице, направит пакет на все интерфейсы, достижимые из порта источника в соответствии с его VLANID и иными настройками. Поскольку пакет идёт на L2, никаких подсетей тут нет, а потому никакое Ваше деление на подсети на распространение не влияет в принципе.

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

    Ну и касательно деления вообще. VLAN поделили сеть на 2 уровне. С этого момента рассматривайте ту часть сети, которая объединяется одним VLANID, как полностью отдельную и изолированную от всех остальных сеть. Просто представьте, что коммутатор разделился на несколько маленьких, и к этому каждому маленькому подключен только один VLANID. Вот теперь в этой виртуально отделённой сети уже вводите следующий уровень деления - на подсети.

    Да, смысл деления на подсети даже внутри одного VLANID - имеется. Но если Вы его не видите, значит. Вам в данный момент такое деление не нужно, и можете исповедовать принцип "в каждом вилане своя подсеть".
    Ответ написан
    3 комментария
  • Какую роль выполняет команда Call в языке VBA?

    @Akina
    Сетевой и системный админ, SQL-программист.
    При использовании оператора Call с процедурой параметры вызываемой процедуры оборачиваются скобками. Если оператор опускаем, то опускаем и скобки.

    Call mysub(param_1, param_2) ' правильно
    mysub param_1, param_2       ' правильно
    mysub(param_1, param_2)      ' ошибка синтаксиса


    Оператор Call позволяет вызвать на исполнение не только процедуру, но и функцию - для выполнения заложенной в неё логики,- и при этом проигнорировать её результат. В случае функции параметры в любом случае обрамляются скобками.

    output = myfunc(param_1, param_2) ' правильно
    Call myfunc(param_1, param_2)     ' правильно
    Call myfunc param_1, param_2      ' ошибка синтаксиса
    myfunc(param_1, param_2)          ' ошибка синтаксиса
    Ответ написан
    Комментировать
  • Как заменить none на пустые ячейки при выгрузке с БД в WEB?

    @Akina
    Сетевой и системный админ, SQL-программист.
    как обработать значения None и заменить их на пустые ячейки в представлении WEB интерфейса?


    Что такое "None"? текстовый литерал с этим значением? или NULL?

    Если второе - то соответствующее поле надо завернуть в COALESCE(), в запросе в списке вывода. Если первое - то предварительно ещё использовать NULLIF().
    Ответ написан
    Комментировать
  • Какое регулярное выражение использовать, что бы достать из текста все цифры?

    @Akina
    Сетевой и системный админ, SQL-программист.
    \S*\d\S*
    https://regex101.com/r/bzUbiN/1

    нужно из неё вытащить, то что выделено жирным

    Показанный результат не соответствует условию. С какого перепугу в последнем токене отрезан начальный символ "№"? а в третьем и четвёртом - финальное "г."?
    Ответ написан
    Комментировать
  • Есть ли смысл делить сеть на подсети, если она будет поделена на vlan-ы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть ли смысл делить небольшую сеть (около 30 компьютеров, 15 ip-камер, 15- ip-телефонов, пару серверов) на подсети, если она будет поделена на vlan-ы?

    Если отвечать на этот вопрос, игнорируя любые другие вещи, то - да, причём не просто имеет смысл, а необходимо.

    Формально, если компьютеры в одном вилане, камеры в другом, а телефоны в третьем, то они существуют так, словно подключены к разным коммутаторам. И вроде тогда пофиг, какие подсети. Но..

    Всем этим надо управлять, всё это надо мониторить, и некоторые узлы из одного вилана должны будут получать доступ к узлам другого. Например, компьютер охраны должен будет видеть изображения с камер, а админ - иметь возможность управления сервером IP-телефонии...

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

    Вопрос для курсовой работы.

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT good,                      -- выбрать идентификатор товара
           amount * unit_price AS `sum` -- и потраченную на него сумму
    FROM Payments 
    ORDER BY `sum` DESC;                -- отсортировать по убыванию суммы
    Ответ написан
    Комментировать