我长期使用面向行的数据库设计,除了数据仓库项目和大数据样本外,我没有为 OLTP 应用程序使用面向列的数据库设计。
我的面向行的表看起来像
ID, Make, Model, Month, Miles, Cost
1 BMW Z3 12 12000 100
我们团队中有些人提倡面向列的数据库设计。他们建议所有列名都应该是属性表中的属性名。然后另一个表 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;
}
}
}
这种面向列的设计的论点是我们不必更改表模式和存储过程(我们仍然使用存储过程而不是实体框架)。
似乎我们正面临真正的问题。面向列的设计在行业中是否被广泛接受。