Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Коллеги, подскажите пожалуйста, как красиво добавлять записи в зависимую таблицу, связанную с оновной через foreign key?
получается надо:
1. выбрать значение поля по которому связь из основной
2. если его нет, создать запись и считать значение поля для созданной записи
3. добавить таки запись в зависимую таблицу

получается 3 запроса как ни крути (((
как бы попроще?

с базой работаю из питона и перла..
9 апр 12, 16:43    [12388931]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Glory
Member

Откуда:
Сообщений: 104751
qwertun
2. если его нет, создать запись и считать значение поля для созданной записи

Считать откуда ? Типа вывести клиенту диалог "А не введете ли вы значение для дочерней таблицы" ?
9 апр 12, 16:49    [12388989]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
да не, просто добавляем. )
нету никаких клиентов
есть запись которую нужно добавить в зависимую таблицу. Чтобы ее проинзертить, нужно снала вытащить значение поля по которому идет связь из основной таблицу и если там ничего нету, добавить ((
мне это не очень нравится
наверняка можно сделать проще....
но как?
9 апр 12, 17:18    [12389232]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Glory
Member

Откуда:
Сообщений: 104751
qwertun
да не, просто добавляем. )
есть запись которую нужно добавить в зависимую таблицу. Чтобы ее проинзертить, нужно снала вытащить значение поля по которому идет связь из основной таблицу


Что значит "просто" ?
Вы что не знаете, в какие таблицы собираетесь добавлять данные ?
9 апр 12, 17:21    [12389254]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Glory,

Знаю )


давайте предметно:

таблица А (основная)
| id | name |


Таблица B (зависимая)
| name_id | rating |


в базу надо пихать записи вида:
name rating

чтобы добавить в таблицу B такие записи получается :
1. if not exitst (select * from A where name = 'name') insert ....;
2. insert into B (select * from A where name = 'name', 5);

получается некрасивые вложенные запросы ((( Хотелось бы сделать это более красиво? Возможно система умеет сама рюхать связность таблиц? и можно без этих сложностей добавить данные сразу в две таблицы?

Возможно я что-то делаю неправильно, просто есть система сбора данных. Датчики.. name - описатель датичка - 50 символов, rating просто int. Кол-во данных 10-20 миллионов записей.
9 апр 12, 17:31    [12389347]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Glory
Member

Откуда:
Сообщений: 104751
qwertun
Возможно система умеет сама рюхать связность таблиц? и можно без этих сложностей добавить данные сразу в две таблицы?

Одна команда INSERT добавляет данные строго в одну таблицу
9 апр 12, 17:39    [12389406]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Glory,
т.е. без монстрообразного составного запроса никак? печаль (
9 апр 12, 18:10    [12389613]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
qwertun
Glory,
т.е. без монстрообразного составного запроса никак? печаль (
Три стейтмента - это монстрообразо? Может ну его, программирование это?
9 апр 12, 18:11    [12389620]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
А в случае если основная таблица, это фактически словарь возможных значений, могу ли я тогда указать как-нибудь базе, чтобы она сама оптимизировала хранение таблицы в данном случае? фактически сформировав словарь возможных значений у себя внутри?
9 апр 12, 18:12    [12389628]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
qwertun
А в случае если основная таблица, это фактически словарь возможных значений, могу ли я тогда указать как-нибудь базе, чтобы она сама оптимизировала хранение таблицы в данном случае? фактически сформировав словарь возможных значений у себя внутри?
Запрограммировать можно все, что угодно. Но для этого нужен программист, как бы. Ему вот можно и сказать будет.
9 апр 12, 18:14    [12389635]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Гавриленко Сергей Алексеевич,

Спасибо, подкол засчитан.
А если по делу?
как оптимально организовать хранение результатов эксперимента (десятки миллионов записей), от произвольных датчиков?
9 апр 12, 18:50    [12389799]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Гавриленко Сергей Алексеевич
qwertun
Glory,
т.е. без монстрообразного составного запроса никак? печаль (
Три стейтмента - это монстрообразо? Может ну его, программирование это?


к счастью, SQL это не мой хлеб. С++ наше все. ) Поэтому да, для меня это выглядит как-то некрасиво и избыточно...
9 апр 12, 18:53    [12389813]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
qwertun
А если по делу?
как оптимально организовать хранение результатов эксперимента (десятки миллионов записей), от произвольных датчиков?
По делу? Хорошо.

Что есть критерий оптимальности у вас? Чтобы кода меньше было? Или чтобы данные меньше весили? Или чтобы их выбирать нормально можно было? Или что-то еще?
9 апр 12, 18:53    [12389818]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
qwertun
Member

Откуда:
Сообщений: 17
Гавриленко Сергей Алексеевич,

по убыванию приоритетов:
1. скорость добавления данных
2. скорость выборки данных по имени датчика и временному промежутку)
3. размер данных
9 апр 12, 19:08    [12389906]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
qwertun
1. скорость добавления данных
В текстовый файл быстрее всего писать. Далее по скорости балком вставлять as is, без нормализации.
qwertun
2. скорость выборки данных по имени датчика и временному промежутку)
Кластерный индекс по счетчику и дате. Правда, не очень правильный индекс будет замедлять вставку.
qwertun
3. размер данных
Нормализация всего, чего можно + сжатие. Естественно, что нормализация, что сжатие замедлят вставку.

Вот такие взаимоисключающие параграфы.
9 апр 12, 19:12    [12389922]     Ответить | Цитировать Сообщить модератору
 Re: добавление записи в случае связности таблицы через foreign key  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
Если вдруг 2008 то там есть Merge как вариант Insert/update в одном флаконе
но вот по скорости это вопрос
9 апр 12, 20:11    [12390163]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить