2016-06-03 2 views
1

У меня здесь два стола. Один из них - Items, а другой - Parts.Как упростить мои SQL-запросы?

Items имеют part_id и Parts имеют item_id.

Когда пользователь нажимает кнопку отправки из окна ItemDetail, данные отправляются на сервер и вставляются в эти две таблицы.

Вот как мой код работает:

  1. Вставить в Items таблицу первой и получить таблицу в id новых данных Item
  2. Вставить в Parts с этим item_id и других Part данных
  3. Обновление до Items стол с использованием новых part_id

Но могу ли я написать эти три запроса SQL только одним запросом?

Вот структура моих таблиц:

Предметы

Field | Type | Null | Key | Default | Extra | 
| id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(255) | YES | | NULL | | 
| price | int(11) | YES | | NULL | | 
| part_id | int(10) unsigned | YES | | NULL | | 
| type | varchar(255) | YES | | NULL | | 

Части

Field | Type | Null | Key | Default | Extra | 
| id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| item_id | int(10) unsigned | NO | | NULL | | 
| name | varchar(255) | NO | | NULL | | 
| number | varchar(255) | YES | | NULL | | 
+0

Я полагаю, что 1 элемент может иметь несколько частей? В этом случае избавьтесь от 'part_id' из таблицы' Items'. Вы можете получить несколько 'part_id', поэтому нет возможности сохранить его таким образом. Поскольку у вас уже есть почтение из таблицы детали, вы можете сделать ссылку таким образом. Таким образом, вы можете избавиться от шага 3. – Ivar

+0

благодарим за комментарии. Отношение предметов и частей составляет 1: 1. Части должны иметь item_id, но у элементов не должно быть part_id. –

+0

Что говорит @ Ивар все еще стоит даже для ситуации, которую вы описываете. Вы уверены, что они имеют отношение 1: 1? не может ли одна часть использоваться в нескольких элементах? о каких частях/предметах вы говорите? – Jester

ответ

0

Глядя на логику, которую вы используете , вы делаете это правильно.

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

Вопрос: какой код вы используете? Если вы используете что-то вроде рамки сущности и ваши отношения определяются между вашими элементами, такими, как

товары

-field 1

-части (ФК)List<Parts>

Это будет работать, но, глядя на то, что вы отметили, я угадываю, что вы не используете язык ASP? Если вы дадите мне знать, и у меня может быть лучшее решение для вас.

+0

Благодарим вас за комментарий. Я использую javascript. nodejs и sailjs. структура сущности - ватерлиния и комод. –

+0

Не зная этого фреймворка, я быстро просмотрел и увидел, что он очень похож на то, как работает EntityFramework. http://sailsjs.org/documentation/concepts/models-and-orm/associations/one-to-many показывает некоторые примеры наличия в вашей структуре таблиц таких объектов. – Caz1224

1

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

Тогда то, что вы ищете это: http://dev.mysql.com/doc/refman/5.7/en/commit.html

Сделки убедитесь, что либо все запросы выполняются, или если есть ошибка где-то все изменения будут отменены.