سؤال

المشكلة:

قاعدة بيانات علائقية (بوستجرس) تخزين timeseries البيانات من مختلف قيم القياس.كل قياس القيمة يمكن أن يكون محدد "قياس نوع" (مثلا ، درجة الحرارة الأكسجين المذاب ، الخ) و يمكن أن يكون محدد "وحدات القياس" (مثلا ، فهرنهايت/مئوية/كلفن, في المئة/مليجرام لكل لتر ، إلخ).

السؤال:

وقد أي شخص من أي بناء قاعدة بيانات مماثلة مثل أن الأبعاد سلامة محفوظ?لديك أي اقتراحات ؟

أنا النظر في بناء measurement_type و measurement_unit الجدول, كل هذه قد نص عمودين هوية النص.ثم أود أن إنشاء المفاتيح الخارجية أن هذه الجداول في measured_value الجدول.النص يقلقني نوعا ما لأن هناك إمكانية غير فريدة من نوعها مكررة (على سبيل المثال'ug/l' مقابل 'ميكروغرام/لتر' على ميكروجرام لكل لتر).

والغرض من هذا أن يكون حتى أستطيع أن كل تحويل والتحقق من وحدات الاستعلامات أو عن طريق البرمجة خارجيا.ومن الناحية المثالية سيكون لدي القدرة في وقت لاحق لتشمل صارمة تحليل الأبعاد (على سبيل المثالربط ميكروغرام/لتر قيمة 'M/V (الكتلة مقسومة على الحجم)).

هل هناك طريقة أكثر أناقة لتحقيق هذا الهدف ؟

هل كانت مفيدة؟

المحلول

أنا أنتجت قاعدة البيانات الفرعية مخطط للتعامل مع وحدات من الدهر قبل (حسنا, أنا أبالغ قليلا ؛ كان منذ حوالي 20 عاما ، على الرغم من).لحسن الحظ, كان فقط للتعامل مع بسيطة الشامل ، طول الوقت الأبعاد - لم تكن درجة الحرارة أو التيار الكهربائي ، أو معان ، إلخ.بل أقل من بسيطة كانت العملة الجانب من اللعبة - هناك عدد لا يحصى من طرق مختلفة لتحويل بين العملات آخر اعتمادا على تاريخ العملة على معدل التحويل صحيح.التي تم التعامل معها بشكل منفصل من الوحدات الفيزيائية.

في الأساس, أنا خلقت الجدول 'تدابير' مع 'id' عمود اسم الوحدة, اختصار, و مجموعة من البعد الدعاة - واحدة لكل كتلة طول الوقت.هذا يحصل بالسكان مع أسماء مثل 'حجم' (الطول = 3 الجماعي = 0, الوقت = 0), 'الكثافة' (الطول = 3 الجماعي = -1, الوقت = 0) - وما شابه ذلك.

كان هناك جدول ثاني من الوحدات التي حددت مقياس ثم الفعلية الوحدات المستخدمة معين القياس.على سبيل المثال ، كان هناك برميل ، متر مكعب ، وجميع أنواع وحدات أخرى ذات صلة.

الثالث كان هناك جدول محدد عوامل التحويل بين وحدات محددة.هذا يتألف من اثنين من وحدات المضاعف معامل التحويل التي تحول الوحدة 1 إلى 2 وحدة.المشكلة الأكبر هنا هو مجموعة ديناميكية من عوامل التحويل.إذا كان التحويل من أن U2 U1 هو 1.234 E+10 ، ثم معكوس صغيرة إلى حد ما ، عدد (8.103727714749 هـ-11).

تعليق من S. لوت عن درجات الحرارة هي مثيرة للاهتمام -- لم يكن لديك للتعامل مع هؤلاء.إجراء مخزن قد تناولت هذا - على الرغم من دمج واحد الإجراء المخزن في النظام قد تكون صعبة.

مخطط وصفت يسمح معظم التحويلات أن يكون وصفها مرة واحدة (بما في ذلك وحدات افتراضية مثل غلوة كل أسبوعين أو أقل افتراضية ولكن بنفس القدر من تلك الغامضة - خارج الولايات المتحدة الأمريكية - مثل فدان) و التحويلات يمكن التحقق من صحتها (على سبيل المثال ، كل الوحدات في معامل التحويل الجدول قد يكون لها نفس قياس).يمكن تمديدها إلى التعامل مع معظم وحدات أخرى - على الرغم من أن أبعاد وحدات مثل الزوايا (أو الصلبة زوايا) تقديم بعض المشاكل المثيرة للاهتمام.كان هناك دعم البرمجية التي من شأنها أن التعامل مع التحويلات التعسفية أو إنشاء خطأ عند التحويل لا يمكن أن تكون معتمدة.سبب واحد لهذا النظام أن مختلف الدولية التابعة الشركات عن البيانات محليا وحدات مريحة ، ولكن HQ النظام لقبول البيانات الأصلية و حتى الآن مما أدى البيانات المجمعة في الوحدات التي تناسب مديري أين مختلفة مديري كل فكرة خاصة بهم (على أساس الوطنية الخلفية و طول واجب في HQ) عن أفضل الوحدات على تقاريرهم.

نصائح أخرى

"النص يقلقني نوعا ما لأن هناك إمكانية غير فريدة من نوعها مكررة"

صحيح.حتى لا تستخدم النص الرئيسي.استخدام ID كمفتاح.

"هل هناك طريقة أكثر أناقة لتحقيق هذا الهدف؟"

لا حقا.فإنه من الصعب.درجة الحرارة هو المشكلة لأن الحرارة هي نفسها في المتوسط و لا مبلغ مثل المسافة لا ؛ بالإضافة إلى F C التحويل ليس ضرب (كما هو الحال مع كل وحدة التحويل.)

ملاحظة حول التحويلات:الكثير من الوحدات خطيا ذات الصلة ، يمكن تحويلها باستخدام صيغة مثل "y = A + Bx" ، حيث A و B هي الثوابت التي يمكن تخزينها في قاعدة البيانات لكل زوج من الوحدات التي تحتاج إلى تحويل بين.على سبيل المثال مئوية إلى فهرنهايت الثوابت هي A=32, B=1.8.

ومع ذلك ، هناك أيضا استثناءات نادرة.تحويل بين لوغاريتمي غير لوغاريتمي الوحدات ، على سبيل المثال.أو تحويل بين الكتلة-في-الحجم المولي-الكتلة-في-الحجم (في هذه الحالة سوف تحتاج إلى معرفة الكتلة المولية للمركب يتم قياسه).

بالطبع, إذا كنت على يقين من أن جميع التحويلات المطلوب من قبل النظام الخطي, ثم ليس هناك حاجة لأكثر من الهندسة فقط تخزين اثنين من الثوابت.ثم يمكنك استخراج موحدة النتائج من قاعدة البيانات باستخدام SQL مباشرة ينضم مع الحقول المحسوبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top