2017-04-24 48 views
0

我正在嘗試確定如何在數據庫中存儲一些數據。 (SQLite的) 比方說,我們有2個表:屬性和類型數據庫:可以是數字或字母數字的存儲值

表格類型被或多或少像一個枚舉,它存儲了現有的在我的模型(整型,實,字母數字爲例)

表所有類型屬性包含屬性,記錄如下所示:

Attribute : 
id : its id 
name : name of the attribute 
value : ??? (the main question here) 
type : foreign key to table type 

因此屬性的類型可以是Integer,Real或者字母數字。我不知道如何繼續根據類型存儲屬性的值。

我認爲到目前爲止,3個解決方案:

解決方案1:屬性的「值」字段是String類型的,我在有關類型轉換programmaticaly

解決方案2:我創造更多的「值「字段,如:intValue,realValue和alphanValue,並根據類型將NULL置於不相關的字段中

解決方案3:我創建了3個表,IntValue,RealValue和AlphaNValue,其中包含相關Attribute的外鍵。

我想知道哪種解決方案在性能和一致性方面更好,或者如果還有其他相關解決方案我沒有考慮過。

非常感謝

回答

0

你的問題被標記爲MySQL,但你說它是關於SQLLite--請標籤正確,它可以幫助其他人!

這聽起來像你正在實施類似解決方案Entity-Attribute-Value。關於這個概念有很多討論 - this是最有用的。

在EAV上提出的一個常見批評就是您提出的問題 - 將數據存儲在適當的數據類型中很難。因此,如果這就是你所做的,請看看EAV的替代品 - 通常,「靈活性」帶來了如此多的缺點,這是不值得的。尤其是在像SQLLite這樣的受限環境中。

如果這樣做不現實,我會選擇選項1.在繪製的所有選項中,應用程序必須在數據庫之外做一些工作,選項1是最簡單的。簡單幾乎總是更好!

+0

嗨內維爾。是的,考慮到你的答案和w01f,似乎解決方案1是我的選擇。我現在要看看你的鏈接,非常感謝你的時間 – SivaDashq

0

我會說:保持簡單。 SQLite加入表的速度並不快,也不是完整的DBMS。所以最好用更少的表格來進行。

如果有理由讓它更簡單,我缺乏看到原因。也許可以解釋爲什麼你會在你的情況下采取更復雜的方式。

+0

我想知道在這種情況下通常採用什麼方式。您指出SQlite並不是加入表格的最佳選擇。考慮到這一點,我可能會去解決方案1或2. – SivaDashq

相關問題