PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

размерен и единицен анализ в SQL база данни

Създадох подсхема на база данни за обработка на единици преди един век (добре, леко преувеличавам; все пак беше преди около 20 години). За щастие трябваше да се справи само с обикновени размери на маса, дължина, време - не температура, или електрически ток, или светимост и т.н. Доста по-малко проста беше валутната страна на играта - имаше безброй различни начини за конвертиране между една валута и друг в зависимост от датата, валутата и периода, през който обменният курс е бил валиден. Това беше обработено отделно от физическите единици.

По същество създадох таблица „мерки“ с колона „идентификатор“, име за единицата, съкращение и набор от показатели на размери – по един за маса, дължина, време. Това се попълва с имена като „обем“ (дължина =3, маса =0, време =0), „плътност“ (дължина =3, маса =-1, време =0) – и други подобни.

Имаше втора таблица с единици, която идентифицираше мярка и след това действителните единици, използвани от определено измерване. Например, имаше варели, кубични метри и всякакви други уместни единици.

Имаше трета таблица, която определяше коефициентите на преобразуване между конкретни единици. Това се състоеше от две единици и мултипликативния коефициент на преобразуване, който преобразува единица 1 в единица 2. Най-големият проблем тук беше динамичният диапазон на коефициентите на преобразуване. Ако преобразуването от U1 в U2 е 1,234E+10, тогава обратното е доста малко число (8,103727714749e-11).

Коментарът на S.Lott за температурите е интересен - не трябваше да се занимаваме с тях. Съхранена процедура би се справила с това - въпреки че интегрирането на една запаметена процедура в системата може да е трудно.

Схемата, която описах, позволи повечето преобразувания да бъдат описани веднъж (включително хипотетични единици като стадии за две седмици или по-малко хипотетични, но също толкова неясни - извън САЩ - като акър футове) и преобразуванията можеха да бъдат валидирани (например и двете единиците в таблицата на коефициента на преобразуване трябваше да имат една и съща мярка). Може да се разшири, за да се справи с повечето други единици - въпреки че безразмерните единици като ъгли (или плътни ъгли) представляват някои интересни проблеми. Имаше поддържащ код, който обработваше произволни преобразувания - или генерираше грешка, когато преобразуването не можеше да се поддържа. Една от причините за тази система беше, че различните международни дъщерни компании ще докладват своите данни в техните локални удобни единици, но системата на HQ трябваше да приеме оригиналните данни и въпреки това да представи получените обобщени данни в единици, които отговарят на мениджърите - където различни мениджъри всеки имаха собствена идея (въз основа на техния национален произход и продължителност на службата в щаба) за най-добрите единици за техните доклади.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групова C# таблица с данни към таблица postgresql

  2. Какъв е максималният брой колони в заявка за избор на PostgreSQL

  3. Oracle към PostgreSQL:Причини за мигриране

  4. Индекс на клеймото за време:Функциите в индексния израз трябва да бъдат маркирани като НЕИЗМЕНЯЕМИ

  5. Присъединете се към един към много и извлечете един резултат