Должны ли вы сделать столбец таблицы со ссылками на себя внешним ключом?

Устройство Burn зарегистрирует пакет в «Установка и удаление программ», как только будет установлена ​​какая-либо часть пакета. Пакет необходимых компонентов .NET является частью пакета, поэтому, когда MBAPrereq BootstrapperApplication устанавливает .NET, пакет зарегистрирован в разделе «Установка и удаление программ». Невозможно изменить это поведение механизма записи в вашем Bundle или BA. Потенциальный запрос функции может состоять в том, чтобы Burn мог регистрировать пакет только после установки непостоянного пакета. Запросы функций должны быть поданы в http://wixtoolset.org/issues .

Сегодня вы можете попытаться решить эту проблему, поставив логику в свою BA, где она автоматически удаляет себя перед вызовом Engine :: Exit, если он обнаружит этот сценарий.

30
задан meleyal 29 October 2008 в 11:33
поделиться

4 ответа

Да. Гарантирует, чтобы у Вас не было висячей строки (запись без родителя), и в зависимости от использования при определении каскадного удаления когда родитель будет удален, все его дочерние элементы будут также удалены.

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

31
ответ дан Mikezx6r 29 October 2008 в 11:33
поделиться
  • 1
    Обратите внимание, что те значения по умолчанию только допустимы для экземпляра/статических переменных, не локальных переменных. – Jon Skeet 25 July 2009 в 08:24

Да, необходимо сделать его внешним ключом.

преимущества будут лучшей моделью данных с меньшим дублированием.

4
ответ дан Galwegian 29 October 2008 в 11:33
поделиться
  • 1
    Если я загружаю предварительно скомпилированные двоичные файлы для Windows, он только содержит sqlite3.exe, где я могу найти sqldiff.exe? – Freek8 26 May 2015 в 07:44

Да Вы должны.

Преимущества (что касается любого внешнего ключа):

  • Гарантирует, что parent_id ссылки, реальная строка в таблице
  • Предотвращает случайное удаление родителя, который имеет детей, или гарантирует, что удалить каскады для удаления дочерних элементов также
  • Предоставляют информацию, которую оптимизатор может использовать

, я не могу думать ни о каких реальных недостатках.

6
ответ дан Lucky 29 October 2008 в 11:33
поделиться
  • 1
    @NicolasRaoul: Я добавил еще некоторую информацию и результат моих тестов. – honk 10 May 2015 в 14:52

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

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

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

недостатки:

  • при определении Внешних ключей, иногда более трудно выполнить объемные операции.
  • , Возможно, это подразумевает больше использования диска и небольшой хит производительности.
13
ответ дан Guido 29 October 2008 в 11:33
поделиться
  • 1
    Здорово! Вы возражали бы добавлять демонстрационную команду и демонстрационный вывод? Спасибо! – Nicolas Raoul 10 May 2015 в 09:32
Другие вопросы по тегам:

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