Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 88
Доброго вечера гуру FB.
Хочу рефакторить свою новую "разработку" и раз есть такая возможность - оптимизирую метаданные.
вопрос нумбер 1.
надо хранить деньги и количество товара - какое поле будет более быстрое? float, double или decimal/numeric? первые два как я понимаю - нативные типы данных мат.копроцессора. дадут ли они фору стандартным decimal?
посему вопрос конкретно в вин.реализации ФБ - для математики - какой тип лучше использовать? точности хватит 4 знака после запятой, суммы вполне земные (не космодром строим).

и вопрос нумбер 2 - computed by поля. Хочется добавить их в структуру таблиц, чтоб лишний раз не дергать справочники. если я их не буду в селекте использовать (например, не нужны они конкретно тут, но на будущее можно их использовать) будут они вносить тормоза? как ФБ их обрабатывает, если они в селекте не перечичслены?
30 июн 20, 01:26    [22159343]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28886
GrigoriyFomin,

для начала
http://www.ibase.ru/files/firebird/Firebird_3_0_Language_Reference_RUS.pdf
со страницы 28 (типы данных).

float можно вообще не использовать, слишком низкая точность. double для денег или количества товара - это ... гм, оригинально.
Тут впору посоветовать почитать
Неочевидные особенности вещественных чисел
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374

Про computed by ответ простой. select туда можно вставлять, но крайне не рекомендуется. Потому что вместо этого надо писать нормальные запросы (джойны и т.п.). Вложенный запрос на каждое значение computed by будет скорее всего вызываться каждый раз. 1000 записей - тысяча запросов.
На микроскопической БД вы замедления может и не заметите, но как только наполните БД нормальными данными - всё начнет жутко тормозить.
Если в селекте вычисляемый столбец не указан, то он вычисляться не будет.
Но - я видел разные системы, и самая аховая в этом плане была с вызовами в computed by селективных хранимых процедур.
Как только в запросе указывалось такое вычисляемое поле, скорость падала в 3-10 раз и план запроса становился ужасного размера.
Понятно, что разработчики наворотили, и сами виноваты, но в этом плане лучше думать ДО, а не ПОТОМ.
"полная автоматизация метаданных" - это прикольно только для начинающих.
30 июн 20, 02:01    [22159350]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28886
GrigoriyFomin,

да, в статье "Неочевидные особенности..." как бы про Дельфи, а не про ФБ, но всё изложенное на 100% в отношении типов single = float, double = double precision.
И, в комплект к той статье обычно идет
Загадки округления
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217
30 июн 20, 02:06    [22159353]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
AltHasp
Member

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

Почему не хотите хранить агрегаты, можно их организовать например с помощью тригеров таблиц? Ну или в крайнем случае создать view и по ней select-ить ваши данные.

Удачи !
30 июн 20, 08:54    [22159431]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 88
насчет вычисляемых полей - убедили, буду в запросе их просчитывать где надо. А насчет вещественных полей - удивился, что ФБ хранит их в целочисленном формате. Думал, математику на сопроцессор скидывают.
30 июн 20, 18:59    [22159924]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28886
GrigoriyFomin
Думал, математику на сопроцессор скидывают.

еще раз перечитайте документацию. dobuble precision это вещественное. a numeric(15,2) - уже целое.
естественно, что вещественные числа считаются через сопроцессор. Но дело-то не в этом. А в точности, округлении и прочем.
30 июн 20, 19:06    [22159926]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
GrigoriyFomin
Member

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

прочитал еще раз. Действительно. но для будущего, как я понимаю, перспективнее использовать decimal? стандартнее, что ли?
30 июн 20, 19:14    [22159930]     Ответить | Цитировать Сообщить модератору
 Re: подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28886
GrigoriyFomin,

decima типа устаревшее. Более часто использование numeric(x,y). В определенных диапазонах они не отличаются, но лучше всё-таки numeric.
30 июн 20, 19:17    [22159932]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить