पदार्थों की सूची के लिए माप की सबसे उपयुक्त इकाई की गणना करने की तलाश में जहां पदार्थ अलग-अलग (लेकिन संगत) इकाई संस्करणों में दिए गए हैं।
इकाई रूपांतरण तालिका
इकाई रूपांतरण तालिका विभिन्न इकाइयों और उन इकाइयों से कैसे संबंधित है:
id unit coefficient parent_id
36 "microlitre" 0.0000000010000000000000000 37
37 "millilitre" 0.0000010000000000000000000 5
5 "centilitre" 0.0000100000000000000000000 18
18 "decilitre" 0.0001000000000000000000000 34
34 "litre" 0.0010000000000000000000000 19
19 "dekalitre" 0.0100000000000000000000000 29
29 "hectolitre" 0.1000000000000000000000000 33
33 "kilolitre" 1.0000000000000000000000000 35
35 "megalitre" 1000.0000000000000000000000 0
गुणांक द्वारा छंटनी से पता चलता है कि parent_id
एक बाल इकाई अपने संख्यात्मक श्रेष्ठ से लिंक करती है।
इस तालिका का उपयोग कर PostgreSQL में बनाया जा सकता है:
CREATE TABLE unit_conversion (
id serial NOT NULL, -- Primary key.
unit text NOT NULL, -- Unit of measurement name.
coefficient numeric(30,25) NOT NULL DEFAULT 0, -- Conversion value.
parent_id integer NOT NULL DEFAULT 0, -- Relates units in order of increasing measurement volume.
CONSTRAINT pk_unit_conversion PRIMARY KEY (id)
)
वहाँ से एक विदेशी कुंजी होना चाहिए parent_id
करने के लिए id
।
पदार्थ तालिका
पदार्थ तालिका पदार्थों की विशिष्ट मात्रा को सूचीबद्ध करती है। उदाहरण के लिए:
id unit label quantity
1 "microlitre" mercury 5
2 "millilitre" water 500
3 "centilitre" water 2
4 "microlitre" mercury 10
5 "millilitre" water 600
तालिका सदृश हो सकती है:
CREATE TABLE substance (
id bigserial NOT NULL, -- Uniquely identifies this row.
unit text NOT NULL, -- Foreign key to unit conversion.
label text NOT NULL, -- Name of the substance.
quantity numeric( 10, 4 ) NOT NULL, -- Amount of the substance.
CONSTRAINT pk_substance PRIMARY KEY (id)
)
मुसीबत
आप एक ऐसी क्वेरी कैसे बनाएंगे जो उन मापों का प्रतिनिधित्व करने के लिए माप लेती है जो उन पदार्थों के योग का प्रतिनिधित्व करते हैं जिनमें पूरी संख्या होती है (और वैकल्पिक रूप से वास्तविक घटक)?
उदाहरण के लिए, आप कैसे लौटेंगे:
quantity unit label
15 microlitre mercury
112 centilitre water
लेकिन नहीं:
quantity unit label
15 microlitre mercury
1.12 litre water
क्योंकि 112 के वास्तविक अंक 1.12 से कम हैं और 112 1120 से छोटे हैं। फिर भी कुछ स्थितियों में वास्तविक अंकों का उपयोग कम है - जैसे कि 1.1 लीटर बनाम 110 सेंटीमीटर।
अधिकतर, मुझे पुनरावर्ती संबंध के आधार पर सही इकाई चुनने में परेशानी हो रही है।
सोर्स कोड
अब तक मेरे पास (स्पष्ट रूप से गैर-काम करने वाला):
-- Normalize the quantities
select
sum( coefficient * quantity ) AS kilolitres
from
unit_conversion uc,
substance s
where
uc.unit = s.unit
group by
s.label
विचार
इस लॉग का उपयोग कर की आवश्यकता होती है 10 अंकों की संख्या निर्धारित करने के लिए?
प्रतिबन्ध
इकाइयाँ दस की शक्तियों में नहीं हैं। उदाहरण के लिए: http://unitsofmeasure.org/ucum-essence.xml