Добавление списка тегов (из пользовательского интерфейса) в базу данных? - PullRequest
0 голосов
/ 10 марта 2011

У меня есть приложение asp.net c # с рецептом еды, над которым я работаю, и я хотел бы иметь возможность вставлять список тегов в базу данных для каждого рецепта.Допустим, у меня есть три тега (южный, cajun, gumbo), которые соответствуют рецептуру gumbo.Как бы я вставил эти три тега в базу данных из пользовательского интерфейса?Буду ли я хранить их в списке, запускать foreach и вставлять каждый тег отдельно?Я действительно хотел бы иметь возможность каким-то образом использовать хранимую процедуру для этого.Я надеюсь, что этой информации было достаточно, чтобы помочь.Спасибо.

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Вы говорите, что база данных уже спроектирована, но ответы на этот вопрос могут все еще повлиять на дизайн.Я имею в виду, как вы сохраняете теги, у вас есть таблица с одним столбцом для имени рецепта, а другая с типом данных varchar(500), например, где вы храните теги.В этом случае вы можете написать хранимую процедуру, которая принимает рецепт и теги в качестве аргумента, и сохранить ее в нужной таблице.Другой дизайн может включать в себя вторую таблицу с полями recipe_name и tag, в которой для каждого рецепта есть несколько тегов.В этом дизайне вы также можете использовать вышеописанную хранимую процедуру.Вы можете отправить теги в виде строки, разделенной запятыми, в процедуру, а внутри процедуры разделить строку на теги и сохранить их в таблице.Каждое дизайнерское решение имеет свои преимущества и недостатки, а также различные уровни технических аспектов при решении таких задач, как поиск тегов и т. Д. Лично я предпочел бы второй метод для более крупных приложений, поскольку он предоставляет больше средств для создания отчетов.

0 голосов
/ 10 марта 2011

Это дизайнерское решение, поэтому разные люди будут иметь разные идеи, но это мое:

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

Итак, в слое, который выполняет вызов базы данных (это может быть ваше приложение, или промежуточный уровень, такой как веб-сервис), есть метод, который принимает List(Of RecipeTag), создает соединение и затем циклически перебирает каждый RecipeTag вызов хранимой процедуры. (вы можете использовать for-each с Lists, так как они перечислимы). Если вы сделаете это, то не будете открывать и закрывать соединение с базой данных каждый раз, просто в начале и в конце, так что это будет быстро.

RecipeTag (в моем примере) - это какой-то объект, который вы создали, который ваш интерфейс может использовать для отслеживания любой другой информации (например, кто ее добавил, для чего она предназначена и т. Д.) В хорошем дискретном виде контейнер, не беспокоясь о том, как это будет происходить. Вы можете добавить дополнительные методы в этот объект для проверки и т. Д., Если хотите.

С вышеупомянутым дизайном у вас есть: уровень базы данных, который не знает или не заботится о нескольких объектах, он просто имеет хранимую процедуру для вставки набора значений и интерфейс, который может иметь дело с коллекцией сильно объекты и промежуточный слой (или, возможно, класс в вашем внешнем приложении), который выполняет этот перевод между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...