我已經使用了面向行的數據庫設計很長一段時間,除了datawarehouse項目和大數據示例,我還沒有使用OLTP應用程序的面向列的數據庫設計。面向列的數據庫vs面向行的數據庫
我行面向表看起來像
ID, Make, Model, Month, Miles, Cost
1 BMW Z3 12 12000 100
有些人在我們的團隊崇尚面向列的數據庫設計。 他們建議所有的列名稱應該是屬性表中的屬性名稱。 然後另一個表格引用將有兩列PropertyName和PropertyValue。
在.net代碼中,我們讀取每個鍵並比較並轉換爲強類型對象。代碼真的很亂。
if (qwi.DomainCode == typeof(CoreBO.Base.iQQConstants.MBPCollateralInfo).Name)
{
if (qwi.RefCode == iQQConstants.MBPCollateralInfo.ENGINETYPE)
{
Aspiration = qwi.Value;
}
else if (qwi.RefCode == iQQConstants.MBPCollateralInfo.FUELTYPE)
{
FuelType = qwi.Value;
}
else if (qwi.RefCode == iQQConstants.MBPCollateralInfo.MAKE)
{
Make = qwi.Value;
}
else if (qwi.RefCode == iQQConstants.MBPCollateralInfo.MILEAGE)
{
int reading = 0;
bool success = int.TryParse(qwi.Value, out reading);
if (success)
{
OdometerReading = reading;
}
}
}
此面向柱設計arguement是,我們不會有改變表模式和存儲過程(我們仍然使用存儲過程,而不是實體框架)。
好像我們正在進入真正的問題。行業導向設計是否被業界所接受。
這個問題似乎與「面向列」(列存儲)的DBMS無關。問題實際上是關於EAV設計模式。 – sqlvogel
「我們仍然使用存儲過程而不是實體框架」 我在許多較小和中等規模的項目中使用EF,並且不再認爲EF是一種可行的方式。 從我測試和理解的情況來看,EF需要讓內存中的數據能夠操縱它(即更新),這是一個考慮到嚴肅工作時常常是門擋的情況。 – Mariusz
「我們仍然使用存儲的proc而不是實體框架」 EF似乎需要內存中的數據才能修改它,所以這樣簡單: UPDATE dbo.MyTable SET Active = 1 WHERE Active = 0 對於大量的數據可能不是微不足道的使用EF(但我也喜歡它,因爲它踢了屁股大的時間) – Mariusz