視圖是關系型數據庫提供的一個非常強大好用的功能,它提供了一種基于基本表(相對視圖的虛擬表而言)的數據提取重組和分隔技術。
視圖通過對一個或者多個基本表進行數據提取和重新組織,將數據以用戶希望的方式重新呈現。
需要注意的是,視圖的主要目的就是重新組織多個基礎表的數據以新的方式展現,重點是數據展示,并不涉及到增刪改的功能。(另一個主要功能是數據隔離)
對于現有市場上不同的數據庫來說,對于視圖的增刪改都不支持,或者說支持的很不好,有很多約束條件。
有人說過,產品功能是有限的,用戶需求是無限的,真理。我遇見了有無限需求的客戶。
先說一下用戶大體需求:
我們的產品是一個智能開發平臺,客戶使用可視化的方式可以定義表單和流程,使用零編碼的方式就可以快速開發出一套信息化管理系統。這種方式一直運行的很好,直到有一天。
客戶:我們有一個系統是c/s結構的,想改成b/s結構,用你們的平臺能做嗎?
我: 可以啊,非常快。
客戶:我看了你們的視頻介紹,基本都是一個表單一個數據表對應的,但是我們的系統有時候一個表單要對應好幾個數據表,這個怎么辦呀?
我:用視圖功能來定義表單就可以。
客戶:我試了,視圖功能只能查看,不能新增和修改啊
。。。。。(確實如此)
其實,在產品的研發和使用中,一直都不斷有客戶提出過這樣的需求,為此也丟失了不少客戶,痛定思痛,不能再痛。于是,一個新的視圖操作概念誕生了
本文中所有操作都采用圖形界面的方式完成,并不涉及到任何程序編寫。所以,即使您不懂程序,也沒有關系。
基于視圖的增刪改操作,他不是提供一個接口工具,讓您輸入sql語句來完成,而是提供一個圖形界面,通過 視圖定義來自定生成操作界面,在操作界面進行新增、修改、刪除和查詢功能。在用戶對視圖進行增刪改查操作時,后臺運行的是視圖分析引擎,所有的視圖操作都交給視圖引擎來完成。
原理并不復雜,一句話,所有對視圖的增刪改查操作,都通過視圖引擎和表單引擎轉化到視圖對應的基礎表的操作(如果基礎表本身也是視圖,那么就遞歸進行轉化,直到找到最后的物理表)。
所有真理都是簡單明了的,但要證明他,確實非常復雜的一件事情。視圖引擎和表單引擎就是如此。特別是當視圖對應的基礎表之間有外鍵關系時,要維護外鍵關系(同時添加,補充增加等)需要很多細心地判斷。
這里提供了一個向導式的視圖構建,如果您熟悉sql語句,直接寫視圖的sql也可以。
第一步:選擇基礎表
第二步:選擇需要的字段
第三步:設置表之間的關系:系統其實已經幫您做好了所選基礎表的表之間的關聯關系,您可以再次修改
視圖sql語句構建好后,就可以生成視圖了,系統會做兩部分工作。
一個是根據輸入的視圖sql語句,在數據庫中生成真實的視圖。
另一個是生成針對這個視圖進行的增刪改查的界面。
下面是自動生成的設計界面(編輯界面)
您可以在系統自動生成的設計界面上進行調整為更好看的界面,這里就不做調整了,直接使用系統生成的格式。
自動生成界面后,就可以在視圖的編輯頁面進行操作了
這是自動生成的視圖的列表界面,可以通過這個界面進行視圖數據的增刪改查、導出、統計等。
這里需要說明一點,我們創建的視圖是從兩個基礎表獲取數據的,一個是用戶表的登錄名和姓名,另一個部門表的部門名稱。所以新增數據的時候,要從當前界面取值,然后分別新增到對應的部門表和用戶表,同時還是設置這兩條數據之間的關聯關系(“用戶屬于哪個部門”這個關系)
修改界面和新增界面是相同的,修改的時候,也是要把用戶修改的數據更新到對應的物理表中
這里需要注意的是:刪除的時候,只刪除這個視圖的主表(在本文的演示案例中,用戶表就是這個視圖的主表)對應的數據,而不能刪除部門表的數據。在其他案例中,如果構成視圖的基礎表之間沒有關聯關系(主外鍵),那么就同時刪除所有的基礎物理表的數據。
新聞熱點
疑難解答