powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблицы едениц измерений баз данных
36 сообщений из 36, показаны все 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
Таблицы едениц измерений баз данных
    #34524140
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> у меня нет "одной основной ЕИ для класса"

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

Ничего на лету не считается. Просто через coalesce кроме "стандартного" отношения коэффициентов пытается использоваться еще более приоритетный прямой коэффициент.
Хм. Фразы "на лету не считается" и "нет предрассчитанных коэффициентов" в моем представлении почти взаимоисключающие Кроме них, я вижу только два экстремальных варианта - данные "предвведены" вместо "предрасчитаны" (то есть вводятся коэффициенты всего ко всему) и "пересчет между ЕИ вообще нигде не ведется".

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

Сергей ВаскецовУ меня это решено просто. Справочник ЕИ поддерживается полностью силами клиентов. Патчей, обновляющих данные в справочнике ЕИ, не припомню.
Ну.... не стоит, наверное, закапываться. В любом случае вопрос сохранения согласованности данных потребует усилий, не в БД так в интерфейсе.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34524541
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕИ к-рая измеряется ЕИ в к-рой измеряется коэфф-ткг г 1000г мг 1000Кб б 1024КВт лс 1.36 ?
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34524626
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTheRaven
Мало. Хотелось бы увидеть таблицу для, например, грамма-килограмма-тонны-золотника-фунта-пуда-унции-фунта-стоуна. Ну и авторства Сергея, чтобы в дальнейшем обсуждении не гадать, правильно ли мы поняли.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34528809
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerМало. Хотелось бы увидеть таблицу
Давайте без подробных таблиц и примеров. Я просто попытаюсь написать, как это устроено, без уточнения по номенклатуре и прочих побочных фенечек. Есть 2 рабочих варианта, один более "нормализованный", другой менее. Буду описывать менее "нормализованный", он проще в реализации.

Итак, есть основная таблица справочника ЕИ. Зовется ed. В ней есть поля id_ed (PK), ed_code (varchar, not null), ed_koeff и id_ed_main (необязательная ссылка на основную ЕИ для дополнительных ЕИ). Уникальность по паре полей (ed_code,id_ed_main) . Соответственно,если в ed у записи id_ed_main is null - она основная ЕИ, у нее всегда ed_koeff=1. Все записи, кто на нее ссылается по id_ed_main - это дополнительные ЕИ для нее. Все сущности в системе, имеющие связь со справочником ЕИ, имеют обязательно связь с основной ЕИ и опциональную связь с одной из ее дополнительных ЕИ, если это надо (например, справочник номенклатуры, составы документов, рецепты). Соответственно, никто не мешает завести в качестве основных ЕИ и метр, и км, и пк, и нм. К ним можно наделать дополнительных ЕИ. Соответственно, записей с ed_code='мкм' может быть в таблице ed много, но у них обязательно разные id_ed_main (одно может быть NULL-ом; на самом деле в таблице ed реализован более строгий контроль признака основной ЕИ, так что обсуждать различия реализации уникальности индексов по необязательным полям в разных СУБД я здесь не намерен). По идее, если захочется изменить, например, микрон на мкм, то придется править кучу строк, что, строго говоря, не приветствуется (абстрагируясь от того, насколько часто это потребуется делать в интерфейсе конечному пользователю). Поэтому-то и имеется 2 основных варианта, в обоих уникальность по паре полей для дочерних ЕИ оставлена, но во втором варианте код заменен на еще одну ссылку. В первом все оставлено как есть, ибо еще вопрос, является ли метр одной и той же сущностью, если он является дочерней ЕИ для километра и для микрометра. Это не настолько очевидно, как кажется, достаточно вспомнить, что определения ЕИ в системе СИ (а есть и другие системы) менялись несколько раз, и в последней редакции скорость света в вакууме известна точно, потому что метр определяется по ней, а не наоборот. В любом случае, требуется дополнительный серверный код и определенный гуй, чтобы, грубо говоря, совсем уж откровенно "не налажаться" при заполнении справочника и чтобы была возможность подставить правильный коэффициент из связки мкм->см в связку см->мкм. Неметрические ЕИ реализуются очень просто. Заводится новая ЕИ, например, 'пуд'. К ней дополнительная 'золотник'. Для 'кг' заводится в качестве дополнительной 'пуд'. А для 'пуд' заводится дополнительная ЕИ 'кг' (замечу, что из-за округления произведение коэффициентов может не дать точно 1, но это-то и правильно, потому что преобразования из пуда в килограммы и наоборот, вообще говоря, при наличии округления не взаимно обратны). Конвертация из одной ЕИ в другую запрещено, если они не связаны прямым отношением (то есть, одна должна быть основной, вторая - дополнительной для нее). Конвертация между двумя дополнительными ЕИ (одной основной ЕИ) есть просто умножение на отношение коэффициентов (есть еще модификация схемы с дополнительной прямой связкой двух дополнительных ЕИ, но принципиально она ничего не меняет). Замечу, что, например, кубометр может быть легко дополнительной ЕИ для тонны с уточнением по номенклатуре. Итого, имеем отказ от классов ЕИ (роль класса ЕИ играет сама основная ЕИ), возможность произвольной конвертации с максимальной точностью, но есть и недостатки (я их все и так знаю, так как схема работает много лет, они все "на поверхности", некоторые я привел, еще, например, такая практическая "беда", что напрямую ОКЕИ к такой "денормализованной" схеме "в лоб" не прикрутить, придется, правда несильно, поизвращаться с кодом ЕИ, потому что в такой схеме неясно, чьим атрибутом является номер ЕИ по ОКЕИ). Предложенная схема не ставит задачу запретить указание более одной кратной или дольной приставки, поэтому если юзер захочет ввести кибикилограмм - он это сделает.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34529259
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовДавайте без подробных таблиц и примеров.
Как хотите. Я полагал, пример в данном случае будет короче и яснее, нежели описание.

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

Не думаю, что имеет смысл подробно обсуждать эту схему. Основной вопрос, из которого собственно возникло это обсуждение, как мне кажется, исчерпан. Лично мне кажется, что стремление уложить все в одну таблицу в данном случае вредно, но это вопрос технический - мощность решения та же самая, вопрос только в количестве кода, требующегося для операций и проверок целостности.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34530129
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> если юзер захочет ввести кибикилограмм - он это сделает

Последний вопрос: почему Вы назвали это справочником?

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

guest_20040621Вы сами описали Ваши ошибки, так что подробно на них останавливаться, видимо, не нужно. Замечу только, что попытки увязать ЕИ с ОКЕИ бессмысленны.
Скорее, это не ошибки, это намеренные упущения для достижения других, более важных в моем случае, целей. А то, что попытки увязать ЕИ с ОКЕИ бессмысленны - соглашусь, благо, пока мне удается отбиться от этого желания многих юзеров.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34530677
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Есть какой-то критерий, что является справочником

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

> это не ошибки

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

Всего хуже то, что ничего более стандартизованного и документированного, чем единицы измерений, и придумать невозможно. Нечего здесь изобретать.
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34530725
оксюморон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> Есть какой-то критерий, что является справочником
Общепринятых нет. Приведенный Вами пример не только справочником не является
Интересно, это шутка юмора такая?
...
Рейтинг: 0 / 0
Таблицы едениц измерений баз данных
    #34530731
тот же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot guest_20040621Решения обсуждать есть смысл. А костыли и подпорки - нет.
Всего хуже то, что ничего более стандартизованного и документированного, чем единицы измерений, и придумать невозможно. Нечего здесь изобретать.[/quot]
Приведите свое стандартизованное решение, обсудим.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблицы едениц измерений баз данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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