|
|
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, своего опыта нет, поэтому прошу поделиться вашим. Как лучше организовать передачу значения внешнего ключа в порождаемую таблицу? Вот таблицы: users usr_id (key; AI) fisrt_name last_name15 petia petrov photoes photo_id( foreign key= usr_id; AI) photo? BLOB Ключевые поля автоинкрементальны. Клиентское приложение добавляет запись в таблицу users. СУБД назначает записи следующий по порядку номер usr_id ( автоинкремент). Теперь в порождаемую таблицу надо добавить фотку для этого юзера. Соответственно надо как-то передать в запросе номер пользователя usr_id, чтобы записать его в photo_id. Самое глупое, что пришло мне на ум - сделать селект по first_name+last_name и получив ключ, уже выполнить второй запрос с добавлением записи в таблицу photoes. Возможно, есть другие варианты как в моем случае (и как во взрослых приложениях) передают внешнии ключи и используют ли вообще в качестве внешнего ключа автоинкрементальные поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 02:35 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
TiFFolkСамое глупое, что пришло мне на ум - сделать селект по first_name+last_name и получив ключ, уже выполнить второй запрос с добавлением записи в таблицу photoes. Если на вашем клиенте известны first_name и last_name, то стало быть должен известен и id. Зачем делать лишний запрос для определения id? TiFFolk и используют ли вообще в качестве внешнего ключа автоинкрементальные поля. А если у одного и того же пользователя будет несколько фотографий? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 07:52 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
edges7Если на вашем клиенте известны first_name и last_name, то стало быть должен известен и id. Зачем делать лишний запрос для определения id? Вовсе не обязательно. Да, select может вернуть все поля из таблицы, но если запись только что вставлена, то ее идентификатор еще в общем случае неизвестен и должен быть получен именно прямым запросом типа select @@identity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:00 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
TiFFolkВозможно, есть другие варианты как в моем случае (и как во взрослых приложениях) передают внешнии ключи и используют ли вообще в качестве внешнего ключа автоинкрементальные поля. Подозреваю, Вы запутались с терминами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:01 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецовидентификатор еще в общем случае неизвестен и должен быть получен именно прямым запросом типа select @@identity. Немного погуглив, я нашел что в MySQL аналогичная функция имеет название LAST_INSERT_ID() . Вот только вопрос: Как поведет себя такая функция, если с БД будут работать несколько пользователей? Видимо надо объеденить эти запросу в одну транзакцию. Ведь другой пользователь может добавить запись перед тем как я запрошу @@identity, и в итоге я получу id его записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:35 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
TiFFolkКак поведет себя такая функция, если с БД будут работать несколько пользователей?Это от СУБД зависит, читайте документацию или спросите на соотв. форуме. В MSSQL нормально поведёт, например, а в вашей СУБД - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:40 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
edges7 Если на вашем клиенте известны first_name и last_name, то стало быть должен известен и id. Зачем делать лишний запрос для определения id? я вам отвечал отвечал,но почему-то на форум не отправилось. Поэтому теперь вкратце: поле usr_id автоинкрементально и я его не задаю, поэтому мне и надо узнать, какой номер присвоили. edges7А если у одного и того же пользователя будет несколько фотографий? :) А если считать что у польователя мб только 1 фотография, а пользователей без фотографий не бывает, тогда значения ключевых автоинкрементальных полей всегда будут одинаковы и все будет работать так как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:41 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовTiFFolkВозможно, есть другие варианты как в моем случае (и как во взрослых приложениях) передают внешнии ключи и используют ли вообще в качестве внешнего ключа автоинкрементальные поля. Подозреваю, Вы запутались с терминами. Не, просто плохо сформулировал вопрос, но сейчас я уже разобрался, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 14:44 |
|
||
|
Как лучше передать внешний ключ в порождаему таблицу?
|
|||
|---|---|---|---|
|
#18+
TiFFolkполе usr_id автоинкрементально и я его не задаю, поэтому мне и надо узнать, какой номер присвоили. ОК. Видимо не совсем внимательно прочитал ваш первый пост и не до конца уловил суть проблемы. TiFFolkА если считать что у польователя мб только 1 фотография, а пользователей без фотографий не бывает, тогда значения ключевых автоинкрементальных полей всегда будут одинаковы и все будет работать так как надо. Со временем требования и условия могут измениться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 17:43 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35833217&tid=1543416]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
202ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 578ms |

| 0 / 0 |
