簡體   English   中英

構建一個不需要用戶知道SQL的自定義SQL查詢工具(ASP.NET)

[英]Building a custom SQL querying tool that doesn't require the user to know SQL (ASP.NET)

希望我能得到一些建築建議。 我已經被要求開發一個“自定義報告”模塊,它基本上可以讓用戶在不知道SQL的情況下查詢數據庫中的任何表。 向我表達的想法是,用戶應該能夠使用類似英語的方式來說出他們想要的表,他們需要顯示哪些字段,他們想要的任何過濾,現在他們可能需要創建具有的查詢DB中的外鍵關系。

我最初的想法是提供一種“向導”,讓用戶1)從下拉列表中選擇一個表,2)通過應用於特殊的自定義屬性獲取可用列的列表,而不是所有列都是允許的查詢“類和3”從下拉列表中使用類似英語的命名法添加各種過濾器查詢(例如“IS EQUAL TO”而不是“=”,“IS IN”而不是“IN()”)。

然而,因為我需要能夠知道,如果用戶要求x數據,我必須將表連接在一起,我不知道如何正確地構建這個或者即使它是可行的(管理層似乎認為它是...)。

有關解決此類問題的任何建議或建議嗎? 用戶是訪問網站的外部客戶,而不是內部客戶,所以我不能只說“讓他們使用MS Access”或類似的,但我不能只是做一個列名轉儲或為他們提供一個大文本框輸入SQL查詢。 我能想到這樣做的唯一方法是為數據提供特定的視圖,但這會破壞模塊的願景(不必為客戶想要的每個報告創建視圖/過程)。

編輯注意我們沒有使用Reporting Services; “報告”實際上只是一個表格GridView,而不是SSRS報告。

無論你做什么,都不要讓他們查詢生產數據庫。 他們必然會運行一些可怕的表掃描,這會破壞應用程序的性能。

告訴管理層,即使是數據庫OEM也沒有想出讓最終用戶輕松從數據庫獲取數據的方法。 最好的辦法是使用SQL Server Analysis Services 這是最終用戶找到自己的數據的最佳方式(迄今為止)。

我們的許多產品都存在類似的問題:客戶端需要數據,但他們不希望涉及SQL。

我們便宜而簡單的解決方案是在應用程序中創建一個按鈕,返回實時數據庫的巨大CSV。 然后他們可以將它帶到他們喜歡的程序(Excel,SASS,......)並利用這些數據。

這根本不是你要求的,但它對於客戶和程序員來說都是一種舒適而舒適的選擇。

我之前沒有使用它,但它是我為未來檢查書簽的一個..

EasyQuery.NET WebForms

如果你想用wizzard這樣做 - 用戶將選擇他需要的表,因為表格保持列。 因此,您知道需要加入哪些表。 您需要跟蹤的是n:m-relations - 您可以構建類似於ms訪問接口的東西。 選擇表格時 - 將它們顯示在一個圖表中並將表格鏈接在一起 - 這樣客戶就可以看到表格是否已連接。

我將構建一個QueryInterpreter來獲取信息(表,列,鏈接,過濾器)並從中構建SQL查詢。 記錄查詢,因此如果您的客戶抱怨他沒有收到預期的數據 - 您可以對其查詢進行逆向工程並告訴他如何正確使用該工具。 也許為最常見的錯誤建立問答網站。

您是否考慮過WCF數據服務

這將創建一個OData模型,包含您在網上提供的所有數據,我認為這將消除構建大量查詢的主要麻煩。 然后,您可以擔心構建一個前端,該前端會調用相應的服務來獲取數據,您可以通過這種方式呈現它。

ASP.Net網站上有一個關於如何使用AJAX和WCF數據服務構建網站的視頻 WCF數據服務站點上也有很多鏈接。

我認為必須在數據庫中創建一個視圖層,供用戶查詢。 構造良好的視圖將阻止用戶進行大量無關聯接,並為他們提供更容易理解的數據結構。 我會使用視圖執行以下操作:

  1. 將任何連接掩碼到查找或其他域表,而不是為域數據顯示用戶友好的代碼。
  2. 執行數據的選擇性非規范化,以便用戶在可能的情況下不需要考慮連接。
  3. 提供一致且用戶友好的列名稱。 隨着時間的推移,我們的數據結構可能會被破壞並最終出現不明顯的列名,因此請確保用戶能夠理解您所呈現的每一列。
  4. 隱藏特定於系統的列,例如AddDate,Timestamp等。

在沒有創建詳盡示例的情況下,假設您有一個包含以下表的數據庫:

  • 客戶 (身份證,姓名,地址)
  • 產品 (ID,名稱,描述,UnitPrice)
  • ShippingMethod (ID,Name)
  • 訂單 (ID,CustomerID,OrderDate,ShippingMethodID,ShippingCost)
  • OrderDetail (ID,OrderID,ProductID,Quantity,UnitPrice)

我會為用戶查詢創建以下視圖:

  • 訂單 (ID,CustomerID,CustomerName,CustomerAddress,OrderDate,ShippingMethodName,ShippingCost)
  • OrderDetail (ID,OrderID,ProductID,ProductName,ProductDescription,Quantity,UnitPrice)

對我來說,用戶理解和查詢大平面視圖要比完全規范化的表容易得多。

您是否在報告服務中查看了報告構建器模塊? 我自己沒有使用它,但從其他閱讀中我認為它旨在支持這種類型的場景。

最具成本效益的解決方案是啟用Reporting Server,它隨SQL Server 2005和2008一起提供。您自己開發這樣一個強大的產品的成本不能超過配置您已擁有許可證的產品的成本。 用戶只需使用SSRS附帶的Report Builder應用程序即可。 與管理層討論費用,他們會傾聽。

您是否嘗試將其公開為WCF數據服務,然后使用Excel Power Pivot來使用它。 這樣就可以輕松實現業務用戶喜歡的數據透視表和圖表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM