Так как я использую C#, я не могу PInvoke SetTcpEntry, как раз когда администратор с app.manifest файлом, он всегда отправляет 317 ошибок. Таким образом, я создал C++ .exe для закрытия списка разделенных запятой значений адресов ipv4 на использовании командной строки SetTcpEntry, хорошо работает даже без app.manifest файла. Это решает удар ipv4 соединения.
я пытался использовать получить подход дескрипторов с NtQuerySystemInformation, но никогда не мог получать его работающий совершенно верно, и это - частный главным образом недокументированный API и кажется небезопасным использовать.
Так, для ipv6, я использую windivert и ввожу флаг RST к ipv6 пакетам с определенными IP-адресами. Это столь же просто как установка флага RST входящего пакета перед пересылкой его через с windivert.
, Возможно, когда-нибудь Microsoft добавит функцию SetTcpEntry6, но до тех пор это, кажется, единственный реалистический путь.
Я не знаю этот конкретный механизм базы данных, но ищу способ временно приостановить проверки согласованности данных или ссылочной целостности во время операций атомарной вставки и обновления.
Вам придется либо разрешить NULL в flagship_product, либо пересмотреть то, как вы моделируете эту ситуацию. Вместо этого рассмотрите возможность размещения flaghip_product в качестве логического поля для продукта. Тогда у вас нет круговой зависимости. Или укажите для продукта поле product_type, которое может иметь такие значения, как FLAGSHIP, NORMAL или OBSOLETE или что-то еще. Конечно, вы должны добиться этого, но в прошлом я нашел более чистое решение для такого рода проблем.
Я рекомендую использовать следующую модель данных:
КОМПАНИИ
ПРОДУКТЫ
FLAGSHIP_PRODUCTS
Создание столбца FLAGSHIP в таблице PRODUCTS
не гарантирует, что только один продукт является флагманским продуктом для данной компании, потому что:
почему бы не поместить флагманское поле продукта в таблицу продуктов как логическое ... вы можете проиндексировать его и идентификатор компании и получить довольно быстрый поиск
Единственные продукты, которые достаточно умны и мощны, чтобы правильно справляться с такими ситуациями, - это системы, которые полностью охватывают / реализуют концепцию множественного назначения.
Нет ни одной системы SQL, в которой можно играть.
РЕДАКТИРОВАТЬ
В системах SQL есть отложенная проверка ограничений, но ее использование может вызвать затруднения.
Вот схема возможного обхода. Я не уверен, насколько высоко в шкале Kludge это подходит, но он там.
После этого при создании клиента или продукта, ЕСЛИ соответствующий продукт / компания, на которые имеется ссылка, еще не созданы, вы инициализируете новый элемент, чтобы он указывал на фиктивный плахолдер. Затем вы вводите этот элемент и завершаете его обновлением первой записи.
Положительным моментом является то, что у вас есть абсолютная ссылочная целостность после завершения процедуры инициализации вашей базы данных - и вы запускаете ее только один раз, предположительно под очень ] контролируемые обстоятельства, поэтому внимательно следите за ним и убедитесь, что он не подведет! Не минусом является то, что теперь у вас есть «лишний» элемент в каждой таблице, загромождающий вашу систему.