0

在我的表中,我需要存儲一個物理量,可以將其作爲數值或數值區間給出。下表說明的想法:如何存儲可以是數字範圍或數字值的數據?

------------------------------ 
Isotope_ID | Atomic_Weight 
------------------------------ 
    1  | 1.00784 
    2  | [6.938, 6.997] 
    ...  |  ... 

此表是不可接受的,因爲該領域Atomic_Weight包含不同類型的值。這種情況下的最佳做法是什麼?

EDIT1:有三種可能的方式來表示關於原子量信息:

  1. 值+(不確定度),例如1.00784(9)
  2. 區間,例如, [6.938,6.997]
  3. 最穩定的同位素的質量數e.g 38

這三個亞型不能被存儲在一個字段,因爲這樣會違背1規範化表。這就是示例表不可接受的原因。 我會嘗試更清楚地重申我的問題:在我的數據庫中存儲有關原子量的信息(可以用三種不同的子類型之一給出)的可能方法是什麼?

+0

1.請詳細說明「這些案件」的含義。例如什麼?點vs間隔?多個非原始的「類型」編碼爲字符串? 2.「不可接受」由誰/什麼? DBMS?關係模型?您的編程標準? PS你不使用[1.00874,1.00874]的理由是什麼? – philipxy

+0

你確定要「範圍」嗎?在給定的情況下,你會不會有一組未知數的離散值? – Magoo

+0

@philipxy謝謝你的問題。我試圖在Edit1 –

回答

0

無論是作爲一個數值或作爲數字間隔

在間隔的情況下,可以存儲單個值x作爲[x,x]

在這個應用程序中,它不像單個值是確切值。它們僅代表一定的準確度。即使是間隔端點也只能代表測量達到一定的準確度。

該表是不可接受的,因爲Atomic_Weight字段包含不同類型的值。

關係模型並不關心「類型」中的值是什麼。如果沒有DBMS「類型」符合您的要求,那麼您必須將理想表&列編碼到一個或多個表格和/或列中。

您可以將它們編碼爲字符串。但是,DBMS不知道如何優化涉及其組成值的查詢以及多列編碼。而且你必須不斷地對它們進行解碼和編碼以便操控每個部分。

Weight_string (isotope, weight) 
    // VALUES (1, '1.00874'), (2, '[6.938, 6.997]') 

什麼是在這種情況下,最好的做法是什麼?

主要模式是爲每個非原始子類型設置一個表,並將子類型的值編碼爲一個或多個列。 (如果亞型反過來又一個亞型,重複。)

Weight_single (isotope, weight_single) 
    // VALUES (1, 1.00874) 
Weight_interval(isotope, weight_min, weight_max) 
    // VALUES (2, 6.938, 6.997) 

另一種模式是在儘可能多的列的每個值編碼爲必要,它們是否被使用或不使用。

Weight_1_row_NULL_unused(isotope, single, interval_min, interval_max, 
    // VALUES (1, 1.00874, NULL, NULL), (2, NULL, 6.938, 6.997) 

Weight_1_row_type_tag(isotope, type_tag, if_single, if_finite_min, if_finite_max) 
    // VALUES (1, 'single', 1.00874, 0, 0),(2, 'interval', 0, 6.938, 6.997) 

搜索SQL子類型/子類型表。

+0

我認爲每個子類型的表格都可以解決我的問題。但是,如何查詢給定同位素的原子量?通過搜索weight_single然後weight_interval? –

+0

你期望的結果是什麼格式? 「一個」原子量有時是一個單一的值,有時是一個時間間隔。同位素數字本質上是體重的替代物。只是攜帶同位素數字,直到你真的需要*做*他們的重量;對於那些匹配Weight_single的人來說,這將是一個單一重量的東西,對於那些匹配Weight_interval的人來說,這將是一個間隔重量的東西。我建議你嘗試一個例子。 – philipxy

0

我會去與一個表有三列:

Isotope_ID, 
Atomic_Weight_From, 
Atomic_Weight_To. 

在這種情況下,只有一個值,該Atomic_Weight_FromAtomic_Weight_To將包含相同的值。
通過這種方式,您可以儘可能保持表格清潔,以及需要處理的代碼。

+0

謝謝你的回答,但這不適合我的情況。對不起,我不太清楚說明我的問題。請看編輯1 –

相關問題