Проектирование баз данных: Круговая зависимость

Так как я использую C#, я не могу PInvoke SetTcpEntry, как раз когда администратор с app.manifest файлом, он всегда отправляет 317 ошибок. Таким образом, я создал C++ .exe для закрытия списка разделенных запятой значений адресов ipv4 на использовании командной строки SetTcpEntry, хорошо работает даже без app.manifest файла. Это решает удар ipv4 соединения.

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

Так, для ipv6, я использую windivert и ввожу флаг RST к ipv6 пакетам с определенными IP-адресами. Это столь же просто как установка флага RST входящего пакета перед пересылкой его через с windivert.

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

9
задан LiraNuna 7 September 2009 в 02:54
поделиться

6 ответов

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

2
ответ дан 4 December 2019 в 15:22
поделиться

Вам придется либо разрешить NULL в flagship_product, либо пересмотреть то, как вы моделируете эту ситуацию. Вместо этого рассмотрите возможность размещения flaghip_product в качестве логического поля для продукта. Тогда у вас нет круговой зависимости. Или укажите для продукта поле product_type, которое может иметь такие значения, как FLAGSHIP, NORMAL или OBSOLETE или что-то еще. Конечно, вы должны добиться этого, но в прошлом я нашел более чистое решение для такого рода проблем.

5
ответ дан 4 December 2019 в 15:22
поделиться

Я рекомендую использовать следующую модель данных:

КОМПАНИИ

  • КОМПАНИИ_ID pk

ПРОДУКТЫ

  • PRODUCT_ID (pk)
  • COMPANY_ID (fk)

FLAGSHIP_PRODUCTS

  • COMPANY_ID (pk, fk)
  • PRODUCT_ID (fk)

Создание столбца FLAGSHIP в таблице PRODUCTS не гарантирует, что только один продукт является флагманским продуктом для данной компании, потому что:

  • Уникальный ключ в столбце FLAGSHIP требует, чтобы значения отличались друг от друга
  • Проверочное ограничение - это только список допустимых значений
3
ответ дан 4 December 2019 в 15:22
поделиться

почему бы не поместить флагманское поле продукта в таблицу продуктов как логическое ... вы можете проиндексировать его и идентификатор компании и получить довольно быстрый поиск

2
ответ дан 4 December 2019 в 15:22
поделиться

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

Нет ни одной системы SQL, в которой можно играть.

РЕДАКТИРОВАТЬ

В системах SQL есть отложенная проверка ограничений, но ее использование может вызвать затруднения.

1
ответ дан 4 December 2019 в 15:22
поделиться

Вот схема возможного обхода. Я не уверен, насколько высоко в шкале Kludge это подходит, но он там.

  • Создать базу данных
  • Создать таблицы клиентов и продуктов
  • Вставить заполнитель или «фиктивную» строку в каждую, настроенную для ссылки на каждую другое
  • Установите ограничения FK между таблицы

После этого при создании клиента или продукта, ЕСЛИ соответствующий продукт / компания, на которые имеется ссылка, еще не созданы, вы инициализируете новый элемент, чтобы он указывал на фиктивный плахолдер. Затем вы вводите этот элемент и завершаете его обновлением первой записи.

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

0
ответ дан 4 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: