2012-10-22 20 views
0

我正在嘗試確定存儲每位電話約43人的最佳方式。客戶希望能夠以幾種不同的方式查看數據 - 誰擁有最多/最少的電話YTD,前10名的圖表,前一年的變化等。跟蹤每個人的月度通話次數 - MySQL還是XML?

我認爲試圖不斷更新XML每個人每年的文件名稱和每月呼叫計數,但這會使得提取不同類型的數據比我使用MySQL更具挑戰性。

如果MySQL是最好的選擇,最好每年每人存儲一行數據,並且每年的每個月都有一列。或者,每個月都會在年份,月份和電話簿中添加一行?

建議將不勝感激。

這裏是一個包含數據的XML文件的樣本 -

<?xml version="1.0" encoding="UTF-8" ?> 
<report> 
    <ReportHeader> 
     <Section SectionNumber="0"> 
      <Picture Name="DeptPic1" GraphicType="BolbField"></Picture> 
     </Section> 
    </ReportHeader> 
    <Group Level="1"> 
     <GroupFooter> 
      <Section SectionNumber="1"> 
       <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}"> 
        <FormattedValue>Captain John Doe</FormattedValue> 
        <Value>Captain John Doe</Value> 
       </Field> 
       <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}"> 
        <FormattedValue>Doe, John</FormattedValue> 
        <Value>Doe, John</Value> 
       </Field> 
       <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})"> 
        <FormattedValue>6</FormattedValue> 
        <Value>6</Value> 
       </Field> 
       <Field Name="Field14" FieldName="{@PercentInc}"> 
        <FormattedValue>54.55</FormattedValue> 
        <Value>54.55</Value> 
       </Field> 
       <Text Name="Text14"> 
        <TextValue>%</TextValue> 
       </Text> 
      </Section> 
     </GroupFooter> 
    </Group> 
    <Group Level="1"> 
     <GroupFooter> 
      <Section SectionNumber="1"> 
       <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}"> 
        <FormattedValue>Firefighter Jane Smith</FormattedValue> 
        <Value>Firefighter Jane Smith</Value> 
       </Field> 
       <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}"> 
        <FormattedValue>Smith, Jane</FormattedValue> 
        <Value>Smith, Jane</Value> 
       </Field> 
       <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})"> 
        <FormattedValue>1</FormattedValue> 
        <Value>1</Value> 
       </Field> 
       <Field Name="Field14" FieldName="{@PercentInc}"> 
        <FormattedValue>9.09</FormattedValue> 
        <Value>9.09</Value> 
       </Field> 
       <Text Name="Text14"> 
        <TextValue>%</TextValue> 
       </Text> 
      </Section> 
     </GroupFooter> 
    </Group> 
</report> 
+0

XML在此處的用途是什麼?你是否與另一個系統連接? – RedFilter

+0

你的源數據在哪裏? – RedFilter

+0

源數據實際上是一個由客戶端每月提交的XML文件。我使用PHP遍歷數據並通過名稱和調用次數提取每條記錄。我需要將每個月的XML數據結合到每年的單個數據源中。 – NightMICU

回答

3

這正是那種東西關係數據庫所擅長的。我會將數據存儲在最細粒度的級別 - 如果您擁有個人通話記錄(如果不是那麼每個用戶/月),則記錄個人通話記錄。每個月都有一個列會使查詢變得困難。

如果您收到的數據不是原始調用數據,而是某種月度摘要,請將其存儲在數據庫中,以便在查詢時爲您提供最大的靈活性。

+0

數據來每月,總呼叫數每月的人數。源文件本身就是一個XML文件,我只想找到將所有數據保存在一箇中心位置(而不是一堆單獨的XML文件)的最佳方式,以便我可以使用它+1 – NightMICU

+0

+1。只需按原樣插入XML數據,然後就可以以任何您想要的方式進行轉換。您將擁有的數據量聽起來可以忽略不計。如果可以的話,每次打電話保存一行。 – RedFilter

+0

每次通話一行你的意思是那個月的通話總數?由於這些號碼不是實時輸入的,因此每月都會輸入該月份的電話總數。 – NightMICU

2

我有兩張桌子。第一個只是關於打電話的個人。第二個表格是關於這個人打的電話。像這樣:

Table 1 
------- 
+----------------+ 
| id  name | 
+----------------+ 
    0   bob 
    1   john 
    2   mary 



Table 2 
------- 
+----------------------------------------------+ 
| id  user_id  calls  date  | 
+----------------------------------------------+ 
    0   0   12   2012-10-21 
    1   1   15   2012-10-21 
    2   2   23   2012-10-21 
    3   0   16   2012-10-22 
    4   1   17   2012-10-22 
    5   2   28   2012-10-22 

正如你所看到的,你可以使用MySQL來存儲每日通話信息,或者任何你想要的時間間隔。您可以在任何給定時間段內跟蹤數字(上面的示例僅顯示2天),生成關於這些數字的報告,顯示隨時間推移的趨勢等。

+0

好的,有道理。數字將每月更新,而不是每天更新 - 仍然最好使用時間戳格式進行存儲?例如,只需使用'2012-10-01','2012-11-01'等? – NightMICU

+0

我不明白爲什麼不。 MySQL允許你做'SELECT * FROM Table_2 WHERE date> 2012-09-01'這樣的東西,它會告訴你9月之後所有的調用,假設你輸入了第一個的所有信息。如果您在9月2日輸入它,它會顯示。我認爲你明白了。 – jdstankosky

+0

對於日期範圍:'SELECT * FROM Table_2 WHERE date> = 2012-01-01 AND date <= 2102-03-01'例如,這將是2012年的第一季度。 – jdstankosky