Nano Hash - криптовалюты, майнинг, программирование

Как сослаться на внешний ключ на другой внешний ключ при продолжении?

У меня есть таблица 3 таблицы. Таблица версий имеет ссылку на таблицу Project через ProjectID. Затем таблица List ссылается на ProjectID (который является внешним ключом) в таблице версий.

Таблица списка имеет «косвенную» ссылку на таблицу Project.

Project Table 
---------------
ProjectID      


Versions Table 
---------------
VersionID
ProjectID (fk to project table) (UNIQUE constraint added)


List Table 
--------------
ListID
VersionID (fk to version table)
ProjectID (fk to fk in version table)

В sequilize у меня определены 3 модели. А в модели List вот как я создаю ассоциацию через:

// Create foreign keys
List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "VersionID"
});

// Create foreign keys
ConsolidatedList.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "ProjectID"
});

*

*ПРОБЛЕМА: для модели списка при последовательном включении в поле ProjectID создается ссылка на VersionID (pk) вместо поля ProjectID (fk) в таблице версий!**

Точный запрос, который запускается секвенированием (выделено жирным шрифтом):

Выполнение (по умолчанию): CREATE TABLE IF NOT EXISTS List (ID INTEGER auto_increment , ProjectID INTEGER, VersionID INTEGER, PRIMARY KEY (ID), ВНЕШНИЙ КЛЮЧ (ProjectID) ССЫЛКИ Versions (VersionID) ON DELETE CASCADE ON UPDATE CASCADE, ВНЕШНИЙ КЛЮЧ (VersionID) ССЫЛКИ Versions (VersionID) НА КАСКАД УДАЛЕНИЯ НА КАСКАД ОБНОВЛЕНИЯ) ENGINE=InnoDB;


  • Каков ваш 1 четкий конкретный исследовательский вопрос, не повторяющийся? В чем проблема? Где ты застрял? Где ваш код продолжения? Пожалуйста, в вопросах кода дайте минимальный воспроизводимый пример. Пожалуйста, не задавайте повторяющихся вопросов. Прежде чем рассматривать публикацию, пожалуйста, всегда гуглите любое сообщение об ошибке или множество четких, кратких и точных формулировок вашего вопроса/проблемы/цели, с вашими конкретными строками/именами и тегами site:stackoverflow.com и без них; прочитал много ответов. См. раздел Как задать вопрос и тексты при наведении указателя мыши на стрелку голосования. PS FK ссылается на PK или UNIQUE. Неважно, является ли список столбцов, на которые ссылаются, FK. 07.03.2020
  • Ваш FK кажется составным FK (VersionID, ProjectID). FK должен ссылаться на список столбцов, который явно объявлен PK/UNIQUE. У вас есть это? Это есть в любом интро FK и в вашем руководстве. Это ТАК часто задаваемые вопросы. В вашем посте не совсем ясно, что такое каждый из ваших FK, PK и UNIQUE. 07.03.2020
  • Пожалуйста, уточните через правки, а не комментарии. PS Пожалуйста, опиши, что именно ты думаешь, что хочешь сказать своими заявлениями. Затем точно укажите, какие декларации PK, UNIQUE и FK вы хотите сделать, и какие, по вашему мнению, вы объявляете. Потому что до сих пор не ясно. В частности, неясно, хотите ли вы 2 FK в списке или один составной FK. Дайте полный вырезанный, вставленный и работающий минимальный воспроизводимый пример для воспроизведения. Вы исследовали составные/композитные FK? Вы понимаете мои предыдущие комментарии? Составные/составные FK. PS Создание таблицы не является запросом. 07.03.2020
  • Принадлежность FK ссылается на целевую таблицу PK. По умолчанию внешний ключ для отношения containsTo будет сгенерирован из имени целевой модели и имя целевого первичного ключа. Во всех случаях внешний ключ по умолчанию может быть перезаписан параметром foreignKey. И это то, что вы получаете. Как вы думаете, почему он создаст FK для поля с таким же именем? См. документацию. В случаях, когда as было определено, оно будет использоваться вместо имени целевой модели. PS Это не считая ваших сложных/композитных вопросов FK. 07.03.2020
  • Какие отношения представляют эти внешние ключи? 08.03.2020
  • @WalterMitty У каждого проекта есть версия, и у каждой версии проекта есть список (данных) 08.03.2020
  • Что такое список? 08.03.2020

Ответы:


1

Вам необходимо определить ассоциации Sequelize, как указано ниже:

List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "VersionID",
  targetKey: "VersionID"
});

List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "ProjectID",
  targetKey: "ProjectID"
});

Я надеюсь, что это помогает!

09.03.2020
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..