Foreign Key - проблема в реализации соответствия двух полей

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Foreign Key - проблема в реализации соответствия двух полей

Сообщение AnryGTR » 21 янв 2007, 14:47

Есть две таблицы: товары и цены на них. В "Товарах" есть поле-идентификатор указывающее
на ID цены из таблицы "Цены"(соответственно эти два поля связаны внешним ключом). Теперь
встала вот такая проблемка:
при вводе нового товара, соответственно вводится и цена на него , т.е. цена тоже новая.
Перед вводом товара сначала вводится его цена в таблицу "Цены",
у этой цены ID автоинкрементный, теперь как мне при вставке нового товара в таблицу "Товары"
наиболее рационально получать ID его цены?
Если просто тупо брать ID текущей(только что вставленной) записи из "Цен",
то на первый взгляд пойдёт, НО а если в это время другой пользователь вставляет/изменяет
какую-нить цену, то текущей станет "его" цена, и как следствие новый введённый мной товар
получит фактически совершенно другую цену...:-(
Или текущей в моём Датасете будет только, та запись которую вставил/изменил именно Я?
Не знаю как это реализовать, подскажите ,ПЛЗ, гуру и профи этого сайта - как это сделать?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 21 янв 2007, 21:39

если вопрос только про цену то тут смотри http://forum.ibase.ru/phpBB2/viewtopic.php?t=2775

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 22 янв 2007, 06:23

Эту тему я уже читал, НО там совсем про другое, а мне нужно узнать
как получить именно только что введённый мной ID, чтобы вставить
его в таблицу Товаров...
Кто-нить знает как реализовать?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 22 янв 2007, 07:29


Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Foreign Key - проблема в реализации соответствия двух по

Сообщение Dimitry Sibiryakov » 22 янв 2007, 07:56

AnryGTR писал(а):Перед вводом товара сначала вводится его цена в таблицу "Цены",
У тебя что, товары ссылаются на цены? :shock: Обычно бывает наоборот...

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Re: Foreign Key - проблема в реализации соответствия двух по

Сообщение CyberMax » 22 янв 2007, 08:01

Dimitry Sibiryakov писал(а):У тебя что, товары ссылаются на цены? :shock: Обычно бывает наоборот...
Это как? Цена - это атрибут товара, но никак не наоборот...

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Foreign Key - проблема в реализации соответствия двух по

Сообщение Dimitry Sibiryakov » 22 янв 2007, 10:26

CyberMax писал(а):Это как? Цена - это атрибут товара, но никак не наоборот...
Вот именно. Поэтому FK протягивают от цены к товару (ALTER TABLE цены REFERENCES товары).
У автора же сперва вставляется цена в таблицу цен, а потом товар для этой цены. Если это то, что я подозреваю, то руки ему надо отрывать в зародыше! :evil:

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 22 янв 2007, 13:30

Опа блин, точно - у меня внешний ключ не в ту сторону был направлен, ну... я новичок вот
теперь буду знать. Теперь значит:
у меня вставляется товар, при вставке генерируется ID товара, далее в таблицу "Цен"
вставляется цена и у неё должен быть в поле ID_TOVAR ID только что введённого товара.
Вот как мне получить этот ID(товара) наиболее правильно, чтобы не было повторов значений генератора на разных клиентах?
Правильно ли будет использовать в приложении функцию GEN_ID,
т.е. при вставке товара - с клиента генерировать новое значение ID товара, запоминать его в переменную, а потом в ID_TOVAR цены вставлять значение этой переменной?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 22 янв 2007, 13:35

Абсолютно правильно.

Перечитай http://www.ibase.ru/devinfo/generator.htm еще раз.

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 22 янв 2007, 15:54

Спасибо, значит мои мысли(мои скакуны :lol: ) теперь пошли в правильном направлении... :P

Ответить