Какой подход я должен использовать, чтобы разделить строку и обновить несколько таблиц SQL?

2

У меня есть объект Article со следующими свойствами:

  • Название статьи (varchar)
  • Тело статьи (varchar)
  • Теги статьи (varchar)

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

Теперь я хочу сделать следующее:

1) Вставьте название статьи и орган статьи в таблицу dbo.Articles и верните идентификатор статьи

2) Вставьте каждое значение строки тегов статьи в таблицу dbo.Tags как отдельную строку, но сначала проверьте наличие дубликатов. Если дубликат, то верните теги существующей записи, если новая запись вернет новый тегиз

3) введите идентификатор статьи и каждый тегид как отдельную строку в таблице dbo.TagMap

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

Заранее благодарим за любую помощь, которую вы можете предоставить.

  • 0
    Какой язык и СУБД вы используете?
  • 0
    asp.net 3.5 / vb.net и sql server 2008
Показать ещё 2 комментария
Теги:

2 ответа

4
Лучший ответ

Я бы сделал большую часть работы в вашем приложении, а не в sql. Вы можете использовать одну из многочисленных подпрограмм sql split, найденных онлайн в сочетании с CROSS APPLY, чтобы добавить несколько строк в ваши таблицы, но я бы этого не сделал. Держите его простым, и ваше приложение управляет вставками тегов.

Скажем, у вас есть статья с 5 тегами. Этот один вызов базы данных для создания статьи и возврата идентификатора статьи обратно в ваше приложение (шаг №1 в вашем вопросе.) И затем для каждого тега вы указываете значение идентификатора статьи и тега в отдельном вызове базы данных, который обрабатывает шаг # 2 и шаг № 3. Вы смотрите на 6 очень быстрых, не все сложных операций для статьи, которая, скорее всего, имеет большее, чем среднее число тегов. Это действительно не так уж плохо.

Но это только мои два цента. Надеюсь, это поможет.

  • 0
    Я согласен, вы должны сделать тяжелую работу в самом приложении. Я думаю, что вы можете добавить все теги в один вызов базы данных, хотя.
2

Лично я передавал теги как XML вместо необработанной строки. Но я предпочитаю xquery-возможности SQL Server, чем синтаксический анализ строк TSQL. Тип подхода, о котором я говорю, кратко описан в Передача списков в SQL Server 2005 с параметрами XML. Остальное является стандартным "insert if not exists" logic. Это немного больше, чем в SQL Server: лучший способ обновить строку, если существует, вставить, если нет. Они имеют дело с обновлениями, но логика аналогична.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню