2015-09-14 2 views
1

У меня есть база данных SQL с основной таблицей под названием «Результаты». В этой таблице хранится запись результатов тестов, которые выполняются в ночное время.Как связать таблицу Junction с моей основной таблицей

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

  • ResultID (уникальный ключ поле, генерируемое при вставке)
  • Результат (nvchar10)

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

Я создал таблицу перехода, как показано ниже называемых Метки:

  • TagID (целое поле ключа уникальное сгенерированных во время выполнения)
  • ResultID (INT)
  • ScenarioTag (nvchar128)
  • FeatureTag (nvchar128)

Так что им нужно сделать, чтобы связать эти 2 вместе. Я не так хорош в базах данных, если честно.

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

Psuedocode:

//Returned from previous SQL statement that inserted results values into the DB 
int ResultID = SQLQueryReturnValue; 

Foreach TAG in TAGS 
{ 
    string SQLQuery = "INSERT INTO TAGS (ResultID, ScenarioTag, FeatureTag)(@ResultID, @ScenarioTag, @FeatureTag)"; 
    CmdSql.Parameters.AddWithValue("@ResultID", ResultID); 
    CmdSql.Parameters.AddWithValue("@ScenarioTag", TAG.Scenario); 
    CmdSql.Parameters.AddWithValue("@FeatureTag", TAG.Feature); 
    CmdSql.CommandText = SQLQuery; 
    CmdSql.Execute(); 
} 

Вот пример того, что каждая таблица может выглядеть на самом деле:

Results Table 
|ResultID | Result | 
| 10032 | Pass | 
| 10031 | Fail | 
| 10030 | Fail | 

Tags Table 
| TagID | ResultID | ScenarioTag | FeatureTag | 
| 6  | 10032 | Cheque  | Trading | 
| 5  | 10032 | GBP   | Sales  | 
| 4  | 10031 | Direct Credit | Trading | 
| 3  | 10031 | GBP   | Purchase | 
| 2  | 10030 | Wire   | Dividends | 
| 1  | 10030 | USD   | Payments | 

Итак, наконец, на мой вопрос ... Есть ли способ, что я физически могу связать это новую таблицу «Теги» в таблицу результатов. Он неформально связан с использованием ResultID, но нет физической ссылки.

ответ

1

Это вы ищете? (Предположение: Этот запрос выглядит из результатов они не обязательно должны иметь метки ....)

SELECT * 
FROM Results 
LEFT JOIN Tags ON Results.ResultID=Tags.ResultID 

EDIT: Может быть, я не понимаю, что вы имеете в виду под «физически». Вы можете добавить ограничение внешнего ключа:

ALTER TABLE Tags ADD CONSTRAINT FK_Tags_Results FOREIGN KEY (ResultID) REFERENCES Results(ResultID); 

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

Если вы сделаете это, вы могли бы изменить верхний запрос на:

SELECT * 
FROM Tags 
INNER JOIN Results ON Results.ResultID=Tags.ResultID 

Теперь вы ищете из тегов (ведущего стола), и вы знаете, что каждый тег должен иметь ResultID (INNER JOIN).

+0

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

Смежные вопросы