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