|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
Доброго вечера гуру FB. Хочу рефакторить свою новую "разработку" и раз есть такая возможность - оптимизирую метаданные. вопрос нумбер 1. надо хранить деньги и количество товара - какое поле будет более быстрое? float, double или decimal/numeric? первые два как я понимаю - нативные типы данных мат.копроцессора. дадут ли они фору стандартным decimal? посему вопрос конкретно в вин.реализации ФБ - для математики - какой тип лучше использовать? точности хватит 4 знака после запятой, суммы вполне земные (не космодром строим). и вопрос нумбер 2 - computed by поля. Хочется добавить их в структуру таблиц, чтоб лишний раз не дергать справочники. если я их не буду в селекте использовать (например, не нужны они конкретно тут, но на будущее можно их использовать) будут они вносить тормоза? как ФБ их обрабатывает, если они в селекте не перечичслены? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 01:26 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
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.06.2020, 02:01 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
GrigoriyFomin, да, в статье "Неочевидные особенности..." как бы про Дельфи, а не про ФБ, но всё изложенное на 100% в отношении типов single = float, double = double precision. И, в комплект к той статье обычно идет Загадки округления http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 02:06 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
GrigoriyFomin, Почему не хотите хранить агрегаты, можно их организовать например с помощью тригеров таблиц? Ну или в крайнем случае создать view и по ней select-ить ваши данные. Удачи ! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 08:54 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
насчет вычисляемых полей - убедили, буду в запросе их просчитывать где надо. А насчет вещественных полей - удивился, что ФБ хранит их в целочисленном формате. Думал, математику на сопроцессор скидывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 18:59 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
GrigoriyFominДумал, математику на сопроцессор скидывают. еще раз перечитайте документацию. dobuble precision это вещественное. a numeric(15,2) - уже целое. естественно, что вещественные числа считаются через сопроцессор. Но дело-то не в этом. А в точности, округлении и прочем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 19:06 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
kdv, прочитал еще раз. Действительно. но для будущего, как я понимаю, перспективнее использовать decimal? стандартнее, что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 19:14 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
GrigoriyFomin, decima типа устаревшее. Более часто использование numeric(x,y). В определенных диапазонах они не отличаются, но лучше всё-таки numeric. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 19:17 |
|
подскажите с разработкой структуры БД - float vs DECIMAL и COMPUTED BY
|
|||
---|---|---|---|
#18+
kdv, авторdouble для денег или количества товара - это ... гм, оригинально. Тут впору посоветовать почитать Неочевидные особенности вещественных чисел Есть очевидные свойства и не очевидные, которые не описаны в руководстве, но всплывают в практике. Если в той же Delphi использовать столбец с плавающей точкой для подсчета каких либо данных определеного формата (для пример денег), то необходимость вводить форматирование такого столбца вещь обязательная. В том же Decimal(x,y) или Numeric(x,y) это делать уже не обязательно. Плюсом к этому является и округление значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:51 |
|
|
start [/forum/topic.php?fid=40&fpage=12&tid=1560274]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 229ms |
total: | 382ms |
0 / 0 |