2015-05-12 29 views
0

這似乎是一個非常基本的概念,但我甚至不知道在這裏搜索什麼。我所做的幾次嘗試都失敗了。在Sql中的數據「派生」

基本上我有以下內容:

parameter(id PK, type_id, data...) 
parameter_string(id PK, string data...) 
parameter_float(id PK, float data...) 
// etc, lots of them 

parameter.id唯一地標識所述參數本身,和parameter.type_id唯一地識別包含特定於該類型的數據的各種表中的一個。所有「衍生」表id字段在所有字段中都是唯一的,因此只需簡單地選擇一個id即可立即識別該類型。

另一個要求是相同的參數子類可以是「不同參數的一部分」,這是因爲parameter.type_id字段可以指向相同的參數「子類」id

所以我想表示的方式是讓每個參數的id字段都作爲鏈接到parameter.type_id的外鍵,但是我收到一個錯誤,抱怨說「表中的列'參數'與現有的主鍵或獨特的約束「。是的,這顯然是真的。不過,我不明白爲什麼這是一個要求,我怎樣才能解決它,並仍然保持類似於我的結構。

回答

0

我需要想一下自己的問題是什麼,因爲你是不是很具體的究竟是什麼,你要問;-)

對我來說似乎是你可以建立你的數據模型像這個。要查詢所有數據的同時你必須參加所有的子類,如

select parameter.id, parameter.data, parameter_string.data, parameter_float.data, ... 
from parameter left outer join parameter_string on parameter.type_id = parameter_string.id 
    left outer join parameter_float on parameter.type_id = parameter_float.id 
-- ... 

或者,如果你只需要字符串參數值,只是做內部聯接來代替。

關於你的第二個問題/問題:這是相反的方法:parameter_string.idparameter_string表的主鍵。 parameter.type_id是外鍵,但因爲它引用幾個表一次,你不能將此作爲在這個意義上的外鍵約束...

要了解更多信息,你可以做一個搜索類似關係數據庫模型概括

+0

我知道如何查詢它,我只是不知道如何構建它,同時仍然保持外鍵。另一種方式顯然不起作用,因爲我只能將外鍵鏈接到一個表,它必須從「子類」向上,除了它仍然不讓我。 – Blindy

+0

但與第二段的說法衝突_「另一個要求是相同的參數子類可以是」不同參數的一部分「,並且這是因爲parameter.type_id字段可以指向相同的參數」subclass「id。 _ - 這是_n:1_的關係。甚至對於幾個子類來說甚至是n:1幾次。並且,對於您所擁有的表格,您只能在_n_一側提供參考。任何其他的意思是引入一個額外的參考表「之間」,以保持外鍵參數和parameter_xxx ... –