powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблицы едениц измерений баз данных
25 сообщений из 36, страница 1 из 2
Таблицы едениц измерений баз данных
    #33983646
schmidt_1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДОбрый день. ТАкой вопрос . Есть ли стандартные шаблоны для таблиц
едениц измерений. Дабы не изобретать велосипед.

Пример
есть несколько единиц измерений СИ

Ток - Амперы
Напряжение - Вольты
Активная Энергия - W*(60*60s) - ваттчасы

При этом нужны порожденные единицы тоже
допустим милли амперы , КилоВаттЧасы..и т д...

Так вот вопрос есть ли что-то стандартное по этому поводу.
????
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #33984139
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте справочник(можно древовидный) единиц измерения с указанием коеф. пересчёта. Упоминание АМПЕР имеет коэф=1 МиллиАмпер Коеф.=0,001

Также полезно указать деноминатор т.е. "допустимость деления"
Для ШТ деном.=1
Для КГ деном.=0,001
Для БуханкаХлеба деном.=0,25 или 0,5 если допустим отпуск половинок/четвертушек.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #33984537
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Группы единиц измерений (меры длины, веса итп). Справочник. Удобно выделить особую группу "контейнеры" - в ней будут "упаковка", "ящик" итп.

Единицы измерения. Относятся к группам, в каждой группе отмечена единственная базовая единица, для прочих вводятся коэффициенты пересчета в базовую.

Межгрупповые коэффициенты пересчета. Вводит коэффициент пересчета между двумя ЕИ, атрибуты задают дополнительные условия. Смысл: для товара "ПЕПСИ 2Л" "1 штука" = "2 л", а "1 упаковка" = "6 штук". Для товара "ПИВО 0.5Л" другие записи с другими коэффициентами.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #33985942
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКЕИ
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #33986201
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В пищевке, химии и др. пересчет единиц измерения для данного наименования материала к тому же параметризуется. 1 литр бензина при температуре ... = ... кг.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34511087
D-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D-S
Гость
Подскажите пожалуйста,
*км=*м=*дм=*см=*мм.
Зарание спасибо.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34511104
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо бы начать с изучения русского. Зарание ...
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34511126
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmНадо бы начать с изучения русского.
Согласен. Без этого вряд ли удастся понять и применить ответ: тугугл!
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34511169
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
LSVСоздайте справочник(можно древовидный)
Упаси Боже от деревьев в столь просто й задаче!
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34512403
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gybsonОКЕИ+1
Читайте Общероссийский классификатор единиц измерений (ОКЕИ)
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34513040
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2 LSVСоздайте справочник(можно древовидный) Упаси Боже от деревьев в столь простой задаче!А что Вас испугало ?
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34513052
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVА что Вас испугало ?
Не то чтобы испугало, просто... сомнительная мысль, назовем так. Сейчас прикинул, когда это может быть удобно, придумал единственный вариант - какой-нибудь онлайновый сервис вида "перевод из любых единиц в любые".
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34515475
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНе то чтобы испугало, просто... сомнительная мысль, назовем так. Сейчас прикинул, когда это может быть удобно, придумал единственный вариант - какой-нибудь онлайновый сервис вида "перевод из любых единиц в любые".С сомнительностью согласен. Потому и указал "возможно".
Кому как нравится.
Некоторые справочники со временем разрастаются и появляется необходимость упрощения поиска и классификации строк по типам. Древовидность тут может помочь.

ЗЫ: Не должно быть никакой проблемы превращения справочника из плоского в древовидный и наоборот.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34517898
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что ж, дерево здесь и правда не нужно.
А нужно сделать так:

Классы ЕИ <----- ЕИ
(вес/объем/время) (кг|г|т / м3|л|мл| / с|мин.|час.|сут.)

В каждом классе 1 ЕИ выбирается за основную, а внутриклассовые коэффициенты задаются для всех неосновных ЕИ к основной.
Переназначение основной ЕИ после первого назначения в своем классе не допускается. Коэффициенты допускается вводить только после выбора основной ЕИ класса. Можно реализовать логику и так, что первая введенная ЕИ в классе автоматически становится основной, а все прочие ЕИ - производными. Коэффициент пересчета для основной ЕИ, естественно, = 1.

Например, в классе "объем" основной ЕИ назначен м3, и для всех остальных ЕИ прописаны коэффициенты их пересчета в кубометры. Например, для литров 0.001, а для мл 0.000001

Пересчет в пределах класса будет равен отношению коэффициентов ЕИ, участвующих в пересчете.
Например, переводим в литры миллилитры.
1000 мл = 1000*0.000001/0.001 = 1л

А еще междуклассовые пересчеты могут быть. Например, 1 красный кирпич весит 3 кг. Так вот, конкретно для этого сорта кирпичей 1 шт = 3 кг. А для силикатных, например, 1 шт = 5 кг. Или 1 коробка с каким-то конкретным содержимым весит 15 кг и занимает объем 0.045 м3. Тогда для конкретно этого содержимого 1 кг = 0.045/15 = 0.003 м3. Это если базовой ЕИ выберем кг. А если за основу возьмем м3, то запишем 1 м3 = 333.33333 кг.
Для хранения таких пересчетов нужны будут дополнительные таблицы и связка с номенклатурным справочником.

А еще бывают производные ЕИ. Например, 1 лс = 1 кг * 1 м / 1 с. Но это уже физика, и я не думаю, что в учетной системе такие зависимости вообще потребуется реализовывать.
________
Не дадим распространиться заразе политкорректности!
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34517899
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про комментарий ModelR не стоит забывать - не все коэффициенты пересчета между классами можно задать константой. Его пример с увеличением объема бензина в зависимости от температуры - подобное для некоторых бизнесов оказывается очень важно.
Естественно, такие зависимости здорово усложняют структуру данных.
________
Не дадим распространиться заразе политкорректности!
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34519664
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urri1 лс = 1 кг * 1 м / 1 с
ЧЕГО-ЧЕГО? Вы с размерностями явно ошиблись.
Вт = Дж/с = кг * (м/с)^2 / с = кг * м^2 / с^3. (здесь ^ - степень).
А лс - вообще не метрическая ЕИ, но той же размерности, что и Вт (ЕИ измерения мощности).

Если по существу темы - метод предложили рабочий, только он будет давать погрешности при отношении неметрических ЕИ между собой через метрические. Да и не всегда удобно бывает выбрать одну основную ЕИ, например, что взять за основную ЕИ длины, пс, км, м или нм? По идее, зависит от задачи, но по Вашей схеме, в БД может быть только одна основная ЕИ длины.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34519697
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовДа и не всегда удобно бывает выбрать одну основную ЕИ, например, что взять за основную ЕИ длины, пс, км, м или нм? По идее, зависит от задачи, но по Вашей схеме, в БД может быть только одна основная ЕИ длины.
Не очень понял сути Вашей мысли. С моей точки зрения, практически все равно, что именно брать за основную единицу - поскольку это почти нигде не играет особой роли, есть только технические моменты - невыход за размерность, занимаемое место итп.

Подозреваю, причина в расхождении трактовки роли основной единицы. С моей точки зрения, у нее только одна роль - быть эталоном, тем, от чего считаются коэффициенты других единиц. С точки зрения учета можно сказать, что все учитываемые количества переводятся в основную единицу - а можно и не говорить, можно выбрать учетную единицу свою для каждого товара. И мне кажется, именно каким-то подобным "навешиванием дополнительного функционала" Ваша мысль и обусловлена.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34519710
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriПереназначение основной ЕИ после первого назначения в своем классе не допускается.
Можно и допустить. Принципиальных проблем нет.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34519765
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНе очень понял сути Вашей мысли
Urri предложил "В каждом классе 1 ЕИ выбирается за основную", поэтому, так как "длина" - класс ЕИ (в терминах Urri), то основная ЕИ длины у него может быть только одна. Предположим, это метр. Соответственно, если в одной БД есть данные по астрономии и атомной физике, то коэффициенты перевода различаются на 20-30 порядков. Именно поэтому проще не фиксировать одну основную ЕИ для класса ЕИ, а разрешить формирование "дополнительных" ЕИ для любой ЕИ (как у меня, собственно, и сделано). Таким образом, я не про то, что "как предлагает Urri, так в принципе нельзя", а про то, что "можно по-другому, чтобы было проще пользоваться". То что "можно выбрать учетную единицу свою для каждого товара" безусловно верно, но непосредственно к обсуждению построения справочника ЕИ не относится.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34519907
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов
Понял, и оказался прав :)

C моей точки зрения, то, о чем Вы говорите - вопрос интерфейса ввода, а не структуры данных. Когда я ввожу новую единицу, можно сделать интерфейс со вводом коэффициента к основной ЕИ, можно - со вводом коэффициента к выбираемой ЕИ и так далее, в данных это никак не отражается.

Роль основной ЕИ - в удобстве пересчета. Раз любая ЕИ имеет коэффициент к основной, а межклассовые коэффициенты также связывают основные ЕИ, значит задача "сложить два литра пива с шестью банками и выдать результат в пьяных сотрудниках" выполняется легко, просто, быстро, и что самое главное - надежно. И эта роль достаточно значима для того, чтобы "иметь ЕИ и только одну", имхо.

Конечно, можно усложнить эту структуру, и хранить как основные данные "коэффициенты пересчета в неосновные ЕИ". В результате по сути получится дерево, в котором ОЕИ - корень, но путь до корня может занять несколько шагов. Однако, при этом:

Сложнее делать пересчет. Потребуется делать денормализацию, держать предрассчитанную таблицу коэффициентов

Придется постоянно проверять "деревянность" данных - отсутствие циклов и связность графа

Придется постоянно проверять согласованность данных - скажем, для пива заданные и хранящиеся коэффициенты преобразования "из литров в килограммы" и "из кубометров в килограммы" должны соответствовать коэффициенту между литрами и кубометрами.

Итого - не вижу смысла так поступать. Лучше хранить с основной единицей, а интерфейс - как удобнее в конкретном случае.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34520090
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerв данных это никак не отражается
Не соглашусь. Безусловно, можно взять очень широкие флоатовые или нумериковые поля (чтобы не терять точность при больших по модулю порядках) или хранить коэффициенты в логарифмическом виде, но в любом случае это требует 1) больше места и 2) принятия решения о порядке вычисления операций. Например, если есть 2 ЕИ масштаба аттометра или фемтометра и между ними надо перевести значение, то придется сначала взаимно приводить их коэффициенты, а уж потом умножать или делить значение на полученный коэффициент. Так как у меня - я обхожусь сермяжным флоатовым полем и для коэффициентов перевода, и для самих значений количеств. При этом флоат делает именно то, что от него требуется - хранение с максимальной точностью в рамках ограничения по размеру поля, независимо от того, ввел я 10^-15 или 10^18. А моя схема позволяет все то, что схема Urri (то есть, любые две ЕИ одного класса можно связать через 2 коэффициента), но и даже больше, а именно, если очень потребуется, то между любыми двумя ЕИ одного класса можно установить один коэффициент пересчета, минуя основную ЕИ (фактически, любая ЕИ может играть роль основной). Кроме того, одна основная ЕИ дает погрешность при переводе между неметрическими ЕИ (переводе, замечу, изначально точном), ибо исходные коэффициенты пересчета от неметрических ЕИ к основной метрической ЕИ вводятся с погрешностью.

softwarer
Сложнее делать пересчет. Потребуется делать денормализацию, держать предрассчитанную таблицу коэффициентов

Я все же думаю, я не смог толком объяснить, как у меня сделано. Ну да и ладно. Разве что замечу, что никакой предрассчитанной таблицы коэффициентов нет.

softwarer
Придется постоянно проверять "деревянность" данных - отсутствие циклов и связность графа

Продуманный интерфейс решает эту задачу даже без дополнительной логики в триггерах.

softwarerПридется постоянно проверять согласованность данных - скажем, для пива заданные и хранящиеся коэффициенты преобразования "из литров в килограммы" и "из кубометров в килограммы" должны соответствовать коэффициенту между литрами и кубометрами.

Скажем так, принципиальную возможность их несоответствия я рассматриваю скорее как фичу, а не как багу. В любом случае, все, что Вы имеете в виду под "придется постоянно", реализуется ровно один раз в триггерах и потом работает как часы.

softwarerИтого - не вижу смысла так поступать. Лучше хранить с основной единицей, а интерфейс - как удобнее в конкретном случае.
1. Именно это и называется "зависит от задачи". 2. Про интерфейс я вообще не писал в своем исходном сообщении.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34520199
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов softwarerв данных это никак не отражается
Не соглашусь.
Согласен, стоило сказать "принципиально не отражается". Я сначала написал некий абзац, потом потер его, и потерял упоминание о технических аспектах.

Сергей Васкецовно в любом случае это требует 1) больше места
Да не сказал бы, различия малозначительны. Правда, это наверное зависит от формата хранения в конкретной СУБД. В моем случае -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SQL> select dump (  1  ) from dual ;

DUMP( 1 )
------------------
Typ= 2  Len= 2 :  193 , 2 

SQL> select dump (  1000  ) from dual ;

DUMP( 1000 )
-------------------
Typ= 2  Len= 2 :  194 , 11 

SQL> select dump (  0 . 001  ) from dual ;

DUMP( 0 . 001 )
-------------------
Typ= 2  Len= 2 :  191 , 11 

SQL> select dump (  1000000  ) from dual ;

DUMP( 1000000 )
------------------
Typ= 2  Len= 2 :  196 , 2 

SQL> select dump (  0 . 000001  ) from dual ;

DUMP( 0 . 000001 )
------------------
Typ= 2  Len= 2 :  190 , 2 

SQL> select dump (  0 . 123456  ) from dual ;

DUMP( 0 . 123456 )
-------------------------
Typ= 2  Len= 4 :  192 , 13 , 35 , 57 

SQL> select dump (  123456  ) from dual ;

DUMP( 123456 )
-------------------------
Typ= 2  Len= 4 :  195 , 13 , 35 , 57 

Сергей ВаскецовНапример, если есть 2 ЕИ масштаба аттометра или фемтометра и между ними надо перевести значение, то придется сначала взаимно приводить их коэффициенты, а уж потом умножать или делить значение на полученный коэффициент.
И в чем проблема в этом случае?

Сергей ВаскецовА моя схема позволяет все то, что схема Urri
Ваша схема - более общая, нежели "схема Urri". И поэтому операции в ней сложнее. Скажем, я могу пересчитать "из любой ЕИ в любую" одним запросом, Вам придется использовать как минимум функцию, потихоньку ползущую по связям. И хорошо если не потребуется писать алгоритм обхода графа конвертаций, да с возвратами.

Сергей Васкецова именно, если очень потребуется, то между любыми двумя ЕИ одного класса можно установить один коэффициент пересчета, минуя основную ЕИ
И тратить силы на проверку согласованности.

Сергей ВаскецовКроме того, одна основная ЕИ дает погрешность при переводе между неметрическими ЕИ
Cогласен, в этом есть определенная проблема. Появляется желание внедрить еще понятие "семейства", что ли, и иметь основную ЕИ для каждого семейства.

Сергей Васкецов softwarer
Сложнее делать пересчет. Потребуется делать денормализацию, держать предрассчитанную таблицу коэффициентов

Я все же думаю, я не смог толком объяснить, как у меня сделано. Ну да и ладно. Разве что замечу, что никакой предрассчитанной таблицы коэффициентов нет.
Хм. Имхо в Вашей схеме расчет коэффициента на лету окажется неприятной штукой.

Сергей Васкецов softwarer
Придется постоянно проверять "деревянность" данных - отсутствие циклов и связность графа

Продуманный интерфейс решает эту задачу даже без дополнительной логики в триггерах.
Данные вносятся не только через интерфейс. Нет такой БД, в которой время от времени не выполняли бы патчи и прочие sql-скрипты.

Сергей Васкецов softwarerПридется постоянно проверять согласованность данных - скажем, для пива заданные и хранящиеся коэффициенты преобразования "из литров в килограммы" и "из кубометров в килограммы" должны соответствовать коэффициенту между литрами и кубометрами.

Скажем так, принципиальную возможность их несоответствия я рассматриваю скорее как фичу, а не как багу. В любом случае, все, что Вы имеете в виду под "придется постоянно", реализуется ровно один раз в триггерах и потом работает как часы.
Ну, фича..... опасная, назовем так. Реализуется, конечно, один раз. Но тем не менее, это работа.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34520552
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов Urri1 лс = 1 кг * 1 м / 1 с
ЧЕГО-ЧЕГО? Вы с размерностями явно ошиблись.
Вт = Дж/с = кг * (м/с)^2 / с = кг * м^2 / с^3. (здесь ^ - степень).
А лс - вообще не метрическая ЕИ, но той же размерности, что и Вт (ЕИ измерения мощности).

Если по существу темы - метод предложили рабочий, только он будет давать погрешности при отношении неметрических ЕИ между собой через метрические. Да и не всегда удобно бывает выбрать одну основную ЕИ, например, что взять за основную ЕИ длины, пс, км, м или нм? По идее, зависит от задачи, но по Вашей схеме, в БД может быть только одна основная ЕИ длины.Дж, если я физику не окончательно забыл, строится от Н, а не от кг. А Н переводятся в кг как раз умножением на ускорение (м/с2).
И получается что Н * м2/с3 (Дж) [ = Н * м/с2 * м/с ] = С * кг * м/с (лс, здесь С - коэффициент).

А по существу основной критики могу сказать так, мы ж строим цифровые модели реального мира.
И пока что разрядность компьютерных чисел не позволяет покрыть все многообразие реального мира. Но ведь и модели наши, как правило, не призваны применяться одновременно и для учета объектов макро- и для объектов микромира. Чаще всего мы имеем дело с сугубо товарно-денежными отношениями и объемами одной компании (пусть даже это ТНК с бюджетом среднего государства).
И товар весит килограммы, граммы или тонны (ну, если это не редкоземельные металлы, конечно), а занимает объем кубические сантиметры, литры, кубометры или стандартные карго-контейнеры, и доставляется даже не на луну. С учетом этих допущений, моя схема работает.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34524008
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriДж, если я физику не окончательно забыл, строится от Н, а не от кг. А Н переводятся в кг как раз умножением на ускорение (м/с2).
И получается что Н * м2/с3 (Дж) [ = Н * м/с2 * м/с ] = С * кг * м/с (лс, здесь С - коэффициент)
Я ж написал цепочку.
Вт=Дж/с.
Дж=кг*(м/с)^2 (вспоминайте E=mv^2/2).
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34524099
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПоявляется желание внедрить еще понятие "семейства", что ли, и иметь основную ЕИ для каждого семейства.
Почти в точку. Это решает как раз проблему точного расчета коэффициента отношения, незавиcимо от природы возникновения погрешности. Только что я не называю это "семейством", ибо у меня нет "одной основной ЕИ для класса".

softwarerХм. Имхо в Вашей схеме расчет коэффициента на лету окажется неприятной штукой.
Ничего на лету не считается. Просто через coalesce кроме "стандартного" отношения коэффициентов пытается использоваться еще более приоритетный прямой коэффициент.

softwarerНет такой БД, в которой время от времени не выполняли бы патчи и прочие sql-скрипты.
У меня это решено просто. Справочник ЕИ поддерживается полностью силами клиентов. Патчей, обновляющих данные в справочнике ЕИ, не припомню.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблицы едениц измерений баз данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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