powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / float для идентификаторов
24 сообщений из 24, страница 1 из 1
float для идентификаторов
    #39734529
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираюсь с поставляемой нам сторонней БД, откуда потом придется данные качать в наши системы
БД, судя по всему, что-то типа code first -- ни одного ни ключа, ни триггера, ни ХП - все делается через ПО; на БД ничего кроме таблиц

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT SchemaName = c.table_schema,
       TableName = c.table_name,
       ColumnName = c.column_name,
       DataType = data_type
  FROM information_schema.columns c
  JOIN information_schema.tables t
    ON c.table_name = t.table_name
   AND c.table_schema = t.table_schema
   AND t.table_type = 'BASE TABLE'
where data_type = 'float'
   and c.column_name like '%id'
 ORDER BY
       SchemaName,
       TableName,
       ordinal_position


запрос из all_columns выдает полторы сотни полей, у которых тип float и названия типа CATALOG_ID, CONTRACT_ID, ITEM_ID и т.д.

Меня это смущает
но т.к. в MSSQL у меня опыт небольшой, спрошу - насколько это допустимо? Стоит ли лезть в бутылку и требовать bigint, или это некритично?
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734531
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

сравнивать два числа float оператором = некорректно, а именно это и предполагают понятия PRIMARY KEY и FOREIGN KEY.
Я думаю, что от float в ключах надо уходить. Говнокод-с!
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734532
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

очевидно же, что один и тот же запрос на абсолютно тех же данных может вернуть разный результат,
я бы порекомендовал разорвать всякие отношения с поставщиком такого г
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734533
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задам вопрос поставщику
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734534
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

float - приближённый формат хранения числа.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734535
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с предыдущими ораторами, если поставщик столь небрежно относится к решениям, то лучше разорвать с ним всякие отношения.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734537
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовandreymx,

float - приближённый формат хранения числа.Смотря как понимать приближённость.
Хранит-то он абсолютно точно.
Просто не все числа изначально могут храниться в этом формате.
Компьютер переданное значение вынужден слегка подправлять при сохранении в регистре процессора.
Поэтому он сохраняет не то, что ему передали, а мы пытаемся сравнивать именно с этим и - неудачно.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734544
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapandreymx,

сравнивать два числа float оператором = некорректно, а именно это и предполагают понятия PRIMARY KEY и FOREIGN KEY.
Я думаю, что от float в ключах надо уходить. Говнокод-с!
Да ладно те.
4*8 бит float ничем не хуже 64 бит bigint.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734547
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapВладислав Колосовandreymx,

float - приближённый формат хранения числа.Смотря как понимать приближённость.
Хранит-то он абсолютно точно.
Просто не все числа изначально могут храниться в этом формате.
Компьютер переданное значение вынужден слегка подправлять при сохранении в регистре процессора.
Поэтому он сохраняет не то, что ему передали, а мы пытаемся сравнивать именно с этим и - неудачно.

Когнитивный диссонанс.
Сравнивать надо уметь!

Код: sql
1.
[он сохранил] = cast( [переданное значение] as float )



и шоколад обеспечен.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734666
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё понимают, что это плохо, но "Баба Яга просто из принципа против" :D
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734795
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2224*8 бит float ничем не хуже 64 бит bigint.
aleks222Сравнивать надо уметь!
Код: sql
1.
[он сохранил] = cast( [переданное значение] as float )


и шоколад обеспечен.Конечно, float ничем не хуже 64 бит bigint, но тогда при сравнениях нужно гарантировать, что значения сравниваются бит-в-бит.
А при любом cast это не гарантируется, потому что cast может отличаться от того cast, который использовался при сохранении [он сохранил].

ИМХО такое - однозначный признак полной некомпетентности поставщика, это даже не "недостаток", а однозначная непригодность.
Потому что, даже если сложатся все звёзды, и сравнение будет корректным, возникает вопрос - зачем? зачем вместо bigint использовать float, и думать про все эти сравнения, какой профит такое решение принесёт клиенту?

Очевидно, уровень разработчиков поставщика, а так же их уровень постановки процессов, не предполагает углубление в такие дебри; очевидно, при рисовании базы мышкой в аксесе (или при экспорте из тексового файла тулзой и т.п.) прога предложила для ИД-полей тип "число", и этот тип из проги трансформировался во float, ну так сложилось, "а чо таково?"
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734830
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734933
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть переделают float на numeric и наслаждаются.
numeric - тип с фиксированной точностью (с фиксированной запятой), и фактически является целочисленным.

Видел проект, в котором все id были numeric(24,0)
Ничего, живут. И даже вполне себе развиваются.

На вопрос - к чему такой дебилизм, отвечаю:
Они формируют идешники на клиенте, по своей проприетарной формуле - регион + дата + тип операции + что-то там + номер по порядку из очереди.
Короче, 24 цифры и выходит. В другие типы - не влазит.

Они художники, они так видят...
...
Рейтинг: 0 / 0
float для идентификаторов
    #39734992
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пообщался
сижу в шоке

подробности письмом :)
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735008
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterПусть переделают float на numeric и наслаждаются.
numeric - тип с фиксированной точностью (с фиксированной запятой), и фактически является целочисленным.

Видел проект, в котором все id были numeric(24,0)
Ничего, живут. И даже вполне себе развиваются.Да, такое бывает, это в принципе наследие неких легаси, где целое стандартно определяли как NUMERIC(xx, 0)
uaggsterКороче, 24 цифры и выходит. В другие типы - не влазит.Да, 24 даже в bigint не влезет...

Но это тоже узнаваемо. Нередко идентификаторы вообще делали как строку, сформированную по определённым правилам, а тут число, уже легче для сервера.
andreymxпообщался
сижу в шоке

подробности письмом :)Намекните хоть, а то заинтриговали, и вот, на самом интересном месте... :-)
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735017
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxтип float и названия типа CATALOG_ID, CONTRACT_ID, ITEM_ID и т.д

И что, реально в данных дробная часть сидит?

Все-таки хочется верить в человечество, поэтому предполагаю, что в данных только целая часть, что тип изменен по ошибке, на каком-то этапе миграции(конвертации). Исправить обратно в int и забыть.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735021
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пошел учить термин "реконсиляция"
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735026
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxпошел учить термин "реконсиляция"
это они uniqueidentifier заменили каким-то синтетическим float?
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735042
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxпошел учить термин "реконсиляция"Непонятно, как связана "реконсиляция" и использование float для идентификаторов.
Не сомневайтесь в их некомпетентности, не дайте запудрить себе мозги :-)
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735049
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandreymxпошел учить термин "реконсиляция"
это они uniqueidentifier заменили каким-то синтетическим float?пока разбираемся


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
    t.name as TableWithForeignKey, 
    fk.constraint_column_id as FK_PartNo, c.
    name as ForeignKeyColumn 
from 
    sys.foreign_key_columns as fk
inner join 
    sys.tables as t on fk.parent_object_id = t.object_id
inner join 
    sys.columns as c on fk.parent_object_id = c.object_id and fk.parent_column_id = c.column_id
order by 
    TableWithForeignKey, FK_PartNo


select *
  from sys.foreign_key_columns as fk

эти запросы ничего не возвращают
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735075
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxэти запросы ничего не возвращаютНу, это они просто не делали FK, бывает.

Вообще, по всем признакам (реконсиляция, отсутствие ФК, float для идентификаторов), базу делали люди, которые, возможно, высококвалифицированные разработчики, но с нулевыми знаниями в СУБД.
Соответственно, даже если вы там совместно что то поковыраете, и оно заработает, к нормальной эксплуатации база будет непригодна, в связи с многочисленными заложенными бомбами кривизны.
Так что вам либо нужно изучать СУДБ, и брать всё это под свой жёсткий контроль, либо стараться держаться подальше от этой системы.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735090
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

не хочу никого критиковать, пока не разберусь сам
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735122
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

очевидно, что какую бы конструкцию велосипеда ни придумали, лучшая уже существует.
...
Рейтинг: 0 / 0
float для идентификаторов
    #39735237
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовandreymx,

очевидно, что какую бы конструкцию велосипеда ни придумали, лучшая уже существует.

Когнитивный диссонанс.

Сначала была конструкция лисапеда похуже.
Потом придумали современную конструкцию.
Нет никаких оснований считать, что невозможно придумать еще лучше.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / float для идентификаторов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]