我已经长时间使用面向行的数据库设计,除了数据仓库项目和大数据样本,我还没有使用面向列的数据库设计用于OLTP应用程序.
我的面向行的表看起来像
ID, Make, Model, Month, Miles, Cost
1 BMW Z3 12 12000 100
Run Code Online (Sandbox Code Playgroud)
我们团队中的一些人主张面向列的数据库设计.他们建议所有列名都应该是Property表中的属性名.然后另一个表Quote将有两列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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个面向列的设计的争论是我们不必更改表模式和存储过程(我们仍然使用存储过程而不是实体框架).
好像我们正在进入真正的问题.以列为导向的设计在业界得到广泛认可.