处理SQL数据问题的最佳方法

时间:2010-06-24 00:06:58

标签: sql sql-server database database-design stored-procedures

我有一个数据密集型问题,需要大量的按摩和数据操作,我将它放在那里,看看是否有人知道如何处理它。

最简单的形式。我有很多桌子可以连在一起给我一份牙医的价格清单,以及每个手术收费多少。

所以我们有多个看起来像这样的表。

Dentist | Procedure1 | Procedure2 | Procedure3 | .........| Procedure?
John    | 500        | 342        | 434        | .........| 843
Dave    | 343        | 434        | 322        | NULLs....|
Mary    | 500        | 342        | 434        | .........| 843
Linda   | 500        | 342        | Null       | .........| 843

牙医可以为每个程序提供不同数量的程序和不同的定价。但是,有很多牙医拥有相同数量的手术和相同的费率。在内部,我们为每个所谓的费用列表创建一个唯一的ID。

像John一样是001,Dave会是002,但是Mary将是001,Linda将是003 如果我必须处理这些数据一次并没有那么糟糕,但这些费用列表是平面文件(csvs),我基本上必须DTS到SQL服务器才能使用。他们每月来一次。每个牙医的定价可能会逐月变化,然后在内部将它们放入不同的唯一ID中。

有人能否详细说明如何最好地解决这个问题,以便每月处理最有效率,而无需进行大量数据操作?

  1. 找出费用清单重复的最佳方法是什么?
  2. 如果他们在下个月更改费率,我如何跟踪更新牙医的费用清单?如果Mary决定对procedure2收取不同的费用,那么她将在内部拥有不同的唯一ID。如何在每月的基础上跟踪,而不必删除所有内容并重新插入?
  3. 我正在使用几百万个费用列表,有些已经有基于zipcodes的标准规则,有些只是独特的费用列表,这里的方法是什么?
  4. 我可以编写某种特殊的.net程序来处理它但是它有很多数据并且在SQL服务器中直接工作对我来说会更容易。
  5. 任何帮助都会很棒,谢谢你们。

1 个答案:

答案 0 :(得分:1)

您可能需要对数据进行取消操作以对其进行标准化 - 以便最终得到:

Doctor: DoctorID, DoctorDetails...
FeeSchedule: DoctorID, ScheduleID, EffectiveDate, OtherDetailAtThisLevel...
FeeScheduleDetail: ScheduleID, ProcedureCode, Fee, OtherDetailAtThisLevel...

当数据进入医生时,它会被旋转,创建一个新的计划,并根据不透露的数据创建详细信息行。

SSIS有一个univot组件,没问题 - 您先加载计划,然后再加载详细信息。如果格式差异很大,您可能需要自定义数据源或只是避免使用SSIS。

该系统将跟踪医生的新时间表。如果医生的时间表相同,则您根本不能插入它。

如果这个逻辑很广泛,你可以将数据加载到登台表(SSIS或其他),并在SQL中完成所有这些(T-SQL也有一个UNPIVOT运算符)。这可能具有以下优点:代码全部在一个地方,并且可以在集合中完成所有操作。

关于邮政编码,如果医生没有收费,这些是常规和惯常费用吗?这可以简单地从医生行的邮政编码确定。在这种情况下,您有几个选择。您可以通过邮政编码费用表覆盖医生费用表:

ZipCodeSchedule: ZipScheduleID, ZipCode, EffectiveDate
ZipCodeScheduleDetail: ZipScheduleID, ProcedureCode, Fee

或者您可以将其保存在常规费用计划中(可能带有某种标志,默认为UCR)。