2012-12-20 46 views
0

首先,我在雲上使用MySQL(Amazon RDS)。我的數據庫定義腳本包含用於創建視圖,觸發器,存儲過程,用戶,授予用戶權限以及插入一些數據(例如查找表)等的語句。該腳本擁有2000行SQL代碼。我將這個腳本保存在一個文件中,然後使用它執行:mysql --user = myusername --password = mypassword < < my.script.sql。該文件受SVN保護。如何存儲/組織DDL腳本?

在一個文件中包含所有SQL代碼的問題是很難僅查看一個項目的SVN歷史記錄(比如我想查看錶Task和視圖TaskView的SVN歷史記錄)......所以我的問題是:人們如何存儲這樣的腳本?專業人員將每個項目(表格,視圖,存儲過程)存儲在其自己的文件中的目錄中嗎?如果是這樣,必須製作一個腳本來部署文件夾中的所有迷你SQL腳本?人們只是製作一個腳本來查找每個.SQL文件並將其轉儲到數據庫上?人們使用各種文件夾來組織這樣的腳本嗎?例如一個視圖文件夾,一個表格文件夾,一個存儲過程文件夾?

乾杯!

回答

1

我們有以下文件夾結構

+ddl 
....group1_ddl.sql 
....group2_ddl.sql 
+procedures 
---level1 
......single_sp.sql 
......another_sp.sql 
---level2 
......another_uses_level1_sp.sql 
---leveln 
......remaining_sp.sql 
+views 
--level1 
......group_of_views.sql 

正如你可以看到,我們有3個最高級別文件夾,分別用於DDL,SPS和意見

DDL

90%時間我們對於所有表有一個ddl腳本 有時我們主要分開ddl腳本,這些腳本可以邏輯分隔 例如:staging_ddl.sql,aggrigate_ddl.sql DDL腳本包括PK和FK制約性,並且還額外的indeces

存儲過程

  1. 注意多個文件夾(1級,級別2),因爲我們對我們的整個ETL &業務是在存儲過程執行所以我們有很多sps (幾十個)和數百行代碼。由於我們編寫了模塊化的 編碼,我們有一些sps取決於其他sps。所以 依賴於其他sps的sps會更高級

    ex:在我們的場景中,main_sp.sql是一個運行整個工作流的sp,這個sp intern以順序次序調用sps的其餘部分,並且他們的intern可能或可能不會調用其他SPS

  2. 所以main_sp.sql轉到級別3,child_sp.sql去level2的, grand_child_sp.sql變爲1級

  3. 文件名是一樣的SP名稱

瀏覽次數:

  1. 如果你的意見是那麼複雜,你認爲你可以很容易地保持你 可以在一個腳本管理。
  2. 但在我們的案例中,他們有一些意見,有近2000多行,所以我們在一個腳本中維護它們。
  3. 主要是我們儘量避免使用另一種觀點認爲一個觀點,如果我們做了 它,然後我們維持對多級層次結構上面 的解釋,否則我們維持按次單個腳本
  4. 文件名相同視圖名稱

這是我7年來成功管理腳本的方法。

希望這會有所幫助

+0

「Level 1」,「Level 2」等想法是如此絕妙的主意! ;-)好吧給你一個問題:你如何「執行」腳本?你有一個bash腳本,可以讀取所有子目錄中的所有腳本嗎?或者你使用其他工具?順便說一句 - 我真的很感激 - 乾杯! – MadSeb

+0

多數民衆贊成在另一個問題:)無論如何,我確實使用它們(購買額外的時間;))來構建整個腳本。我寫了批處理文件(鍵入命令),perl腳本(與我的版本控制軟件交互)來做到這一點。 –