2015年6月2日星期二
2015年5月26日星期二
2015年4月14日星期二
OACC 開源會計軟件 - 一個階段的完結
終於, 畫了這麼多天的鬼腳圖後, 我的思緒已經有點呆呆滯滯, 我想這也是時候推進到另一個階段. 雖然心中隱若覺得還有些未盡完善的地方, 但實踐是最好的尋找缺憾的方法, 或許時間會多花一些, 可猶豫不決危害更大.
猶幸現在有了 MySQL Workbench 這方便好用的工具, 我可以不停的 Trial & Error, 不用像以往般一個個 Table 在 Command Line 中小心奕奕的逐字更改, 還同時要不停地被提醒按 ; 鍵...
好了, 現在開始匯入我的鬼腳圖到 MySQL 之中.
好了, 現在開始匯入我的鬼腳圖到 MySQL 之中.
首先你要安裝好 MySQL Community Server 及 MySQL Workbench, 並確定你 MySQL Community Server 是在運行之中
然後打開你的 EER (.mwb) 檔
選取 Database > Forward Engineer...
看到上圖的 Dialog Windows 後按 Next. 系統或許會要你輸入密碼, 你只需用回你的 Root 密碼就可以了. Root 密碼就是當你安裝 MySQL Community Server 時你一定要輸入的那個.
勾選 Skip creation of FOREIGN KEYS 及 Skip creation of FK Indexes as well 兩項, 然後按 Next.
用預設的選項就可以, 按 Next 跳下一頁
MySQL Workbench 會自動生產出一個 Script, 你可以按左下的 Save to File... 匯出成一個 MySQL Script 檔 或 Copy to Clipboard 將整在 Script 放在記憶體之中以備後用, 或直按 Next 跳下一頁


如果沒有出現什麼 Error Message, 即代表你已成功將鬼腳圖匯入 MySQL Community Server 成功. 如果有 Error Message 出現, 請細心閱讀內容, 並修改你的 EER 檔. 一切完成後, 按 Close 即可.
你現在可以 MySQL Workbench 的 Local instance 頁中的 Schemas 項目 (近左下角) 下看到剛匯入的 Database. 如果看不到, 請按一下 Schemas 旁的 Refresh 按鈕.
好了, 有關 MySQL Community Server 及 MySQL Workbench 暫時說到這裡. 以下是如何設定 MySQL ODBC Connector. 在開始前, 請確定你的電腦已經下載 mysql-connector-odbc-5.3.4-win32.msi 並安裝妥當.
去 Control Panel > System and Security > Administrative Tools, 打開 ODBC Data Sources (32-bit). 當 ODBC Data Source Administrator (32-bit) 視窗打開後按 Add...
在 Create New Data Source 視窗中選擇 MySQL ODBC 5.3 Unicode Driver 然後按 Finish.
為什麼不選擇 MySQL ODBC 5.3 ANSI Driver? 因為 ANSI Driver 不支援中文輸入.
在 Create New Data Source 視窗中選擇 MySQL ODBC 5.3 Unicode Driver 然後按 Finish.
為什麼不選擇 MySQL ODBC 5.3 ANSI Driver? 因為 ANSI Driver 不支援中文輸入.
在 MySQL Connector/ODBC Data Source Configuration 視窗中輸入你的 MySQL Community Server 登入資料:
- Data Source Name 可以填入你想要的名稱
- Description 可填可不填
- TCP/IP Server 輸入 MySQL Community Server 所在的 IP Address, "127.0.0.1" 是本機的預設 IP Address, 只適用於 MySQL Community Server 是安裝在本機之上.
- Port 就用預設的 3306 好了
- User 任何你已設定好的 MySQL Community Server User
- Password 就是上述 User 的密碼
- 如果你的 IP Address, User 及 Password 正確無誤, 那 Database 一欄中就會出現如圖中的選項, 否則只會空白一片.
當所有資料都填妥後, 按 OK 完成設定.
以下是如何設定 Microsoft Access 與 MySQL Community Server 的 Connection.
你必須擁有完整版的 Microsoft Access, 如果你沒有或你沒有興趣自行開發則可以跳過這一步.
打開 Microsoft Access, 選擇建立 Blank desktop database
輸入檔案名稱
在剛建立的 Microsoft Access 檔中, 先刪除預設的 Table 1, 然後在 External Data 下選 ODBC Database
在 Get External Data - ODBC Database 視窗中選 Link to the data source by creating a linked table 後按 OK
在 Machine Data Source 頁下選擇剛才設定好的 ODBC Connector 後按 OK
在 Link Tables 視窗中選擇 Select All 後按 OK
當你在左手邊看見一個個地球時, 就代表在 MySQL Community Server 中你的 Database 中所有 Tables 已經連上你的 Microsoft Access 檔案. 然後就可以繼續開發 Queries, Forms, 及 Report 以增加可用性, 或你也可以直接開始輸入資料.
說到這裡, 我的開發工作也要展開了. 要是你有興趣知道我這個 <<OACC 開源會計軟件>> 的開發目標是什麼, 可以到 內容 看看.
如果你發現我遺留了什麼功能, 請發電郵到 oaccinfo@gmail.com 或在我的 Facebook Page 留言.
如果你發現我遺留了什麼功能, 請發電郵到 oaccinfo@gmail.com 或在我的 Facebook Page 留言.
謝謝.
2013年11月22日星期五
自製記帳軟件 - 使用 MySQL Workbench 6 製作 MySQL Model 初探
如果你只想知道如何設計製作 MySQL Model (Schema) , 不安裝 MySQL Server 是不會有什麼影響的. 但, 沒有 MySQL Server 你就不可能測試你自己所設計的 Schema 是否可行. 雖然我本身已有多年設計 Schema 的經驗, 可是在一些比較抽象複雜的設計中, 我還是會在設計好一部份就立即放上 Server 看看自己的設想是否可行, 檢視了才繼續設計其他部份. 有時候甚至會在 Microsoft Access 中先簡單地建立一些 User Input Dialog 看看在變動資料時是不是一如我所預料的.
按一下 "Models" 旁邊的加號, 就可以新增一個 Model 了
空白的 Model
Double Click 在黃色圓筒旁的 "mydb" 就會出現 model 的屬性
除了改改 model 的名字外, 你或許也應該留意一下 Collation.
在 MySQL Workbench 6 中, 當你新增一個 model 時, 這個新 model 的預設 Collation 是
"utf8-utf8_general_ci"
那這個 Collation 是什麼呢? 它就是你的 model 的編碼設定. 簡單地說, 這 Collation 就是控制由這個 model 所創建的 database 可以接受什麼文字的資料輸入. 由於我預期未來使用者會輸入CJK 文字, 而且效能對會計記帳而言並非重點, 所以我將 Collation 的值改成了
"utf8-utf8_unicode_ci"
先儲存一下吧!
開始建立 Table 囉. 如果你是新手, 我建議你這一階段先不要理會
什麼是 Datatype, PK, NN, UQ, BIN 及 UN 等東西. 你唯一要做好的事情, 就是根據 Database Normalization 來規劃好你的 Model. 什麼是 Database Normalization? 簡單一點的說法是:
"把所有會重複的資料都獨立成一個 Table"
2013年11月14日星期四
自製記帳軟件 - 簡易安裝 MySQL Workbench 6 (CentOS)
Linux 發展到今時今日已經變得十分之 User Friendly. 除了一些電腦遊戲外, 使用它來處理一般日常工作已很容易, 更不用提 OS X 及 Android 這兩個作業系統在 User Experience 上所取得的成就. 除了 Linux 日益易用, Oracle 在接收 MySQL 後也並未停下她的開發的步伐. 雖然開源社區對 MySQL 的未來抱持悲觀的態度, 但是我畢竟只是一名普通的用家, 誰家好用又免費就用誰家的吧.
對於所有被 Microsoft 寵壞了的使用者來說, 以指令界面來控制電腦已經不甚容易, 更何況設計複雜的邏輯結構? 所以 MySQL Workbench 對我們來說簡直就是恩物! Workbench 賦予了我們一條管理 MySQL 的捷徑, 甚至讓我們有機會一探 Data Architect 的世界.
就讓我們開始在 CentOS 6.4 上安裝 MySQL Workbench 6 吧. 第一步當然是要到 MySQL Workbench 的官網看看. 當然心急的也可以直接到下載那一頁的...
要在 CentOS 6.4 上安裝 MySQL Workbench 6 就要在 "Select Platform" 中選
"Red Hat Enterprise Linux 6 / Oracle Linux 6", 然後再點選 32bit / 64bit 版本來下載
如果你在下載時選擇 "執行" 系統會在完成後自動執行. (廢話!)
若你的選擇是 "儲存", 那你就要在完成後手動啟動那個安裝檔. (就是 Double Click 啦)
無論如何, 系統都會在執行前再問你一遍: Do you want to install this file?
由於 Linux 的元件庫十分龐大, 所以一般都不會在安裝系統時把所有東西都塞進來的, 因此當你在 Linux 中安裝任何新軟件/元件時, 系統都會檢查新軟件/元件 "依賴" 的軟件/元件是否齊備. 放心, 系統不會要求你自行下載的.
如果你依據上一篇 "簡易安裝 CentOS 6.4 及 MySQL" 來安裝 CentOS 的, 那此時系統應會要求你安裝 "C library for reading, creating, and modifying" 的, 按下 "Install" 繼續吧.
還記得 "root" 的密碼吧?
MySQL Workbench 6 的安裝過程現已完成, 接下來就啟動她來看看吧.
按圖索驥
安裝好的 MySQL Server 呢?! 甭怕! 甭怕! 點一下在 MySQL Connections 旁的加號吧
什麼也先不要碰...真乖
直接點一點 "Test Connection", 應該是沒問題的...
確認沒問題後就可以按下 "OK" 關閉了
現在出現了一個叫 "localhost" 的 Connection, Double Click 它吧.
按一下左邊的 "Server Status" 吧
這就是你親手安裝的 MySQL Server 的運行狀況了.
拍拍手給自己點鼓勵吧
點一下 "Server Status" 下方的 "Client Connection" 看看有誰連上了你的 MySQL Server
如果你看到如上圖般有數個 "root" 存在是很正常的, 可不要以為有壞人 hack 了你的系統
2013年9月9日星期一
自製記帳軟件 - Schema
在上一篇中已經指出了 Schema 在開發 Database 中有如建築藍圖, 在為 Database 加磚蓋瓦前必須再三思量, 也必須跟未來的使用者好好溝通. 那如何設計 Schema 呢? 以前設計 Schema 是一件很痛苦的事情, 設計者必須一字一字的在 MySQL Admin 的 Command Line Interface 下輸入整個 Schema... 正如劉德華所說: "今時今日這個態度是不夠的." 所以 MySQL AB 在2003年招攬了DBDesigner4 的開發者 Michael G. Zinner 加入之後, 開發出了MySQL GUI Tools Bundle. 在2007年, MySQL 推出了MySQL Workbench 5.0, 並逐漸成為 MySQL 的旗艦圖形介面產品. 從此以後, 設計 Schema 的權柄, 就由小眾神級高人手中飛到尋常百姓家了. 有關 MySQL Workbench 的故仔就說到這裡.
如果大家有留心看文頂那幅圖(我很懷疑有沒有人看), 有沒有發覺好像一張水管佈置圖呢? 再細心點看, 我相信聰明的各位一定會發現, 所有"水管"都直接間接的連到正中間那個方格. 其實這就是我自家製的記帳軟件背後關聯式資料庫的 Schema. 關聯式資料庫是在上世紀七十年代 Edgar Frank "Ted" Codd (1923-2003) 提出的關聯模型基礎上發展出來的資料庫. 關聯式資料庫就好像我們常見的族譜, 由一種類似父母與子女的關係所編織而成, 更進一步的相關定義與歷史, 請大家去問 Google 大神好了, 畢竟已經超出我能力.

中間這圖就更清楚的顯示了, 資料表 (Table, 即頂端是藍色那些方塊) 間的關係, 這種關係是建立在不同資料表中的資料欄 (Field) 的關聯. 在上圖中以橙色所標示的關係是一種"一對多(One to Many)" 的關係. 左手邊的資料表 <tbl_company> 是用來記錄主公司的資料, 而另一邊的資料表 <tbl_mvoucher> 則是用記錄所有傳票的主要資料. 其中關聯的資料欄分別是 <tbl_company> 的 <<id_company INT>> 及 <tbl_mvoucher> 的 <<co_mvoucher INT>>, 而該關聯的性質是一對多. 形象化一點說明: 在這個關係中, 主公司的編號 (ID) 在 <tbl_company> 只會出現一次, 但是在 <tbl_mvoucher> 則可以出現無數次. 情況就如同, 一間公司可以有無數多張傳票 (Voucher) .
何謂一對多, 就是指一筆特定資料在資料表甲只會出現一次, 而在資料表乙則可以出現無數次. 而關聯性質不是只有一對多, 它還可以設定為"一對一 (One to One)" , "多對多 (Many to Many)" 及"多對一 (Many to One)". 直覺上"多對多"這種關聯性最有彈性, 但是當你使用查詢 (Query) 去組合兩個有多對多關聯的資料表時, 它卻會引出一個資料性夢魘: 笛卡兒乘績 (Cartesian Product). 當然, 你有可能為的就是要得到這樣的結果, 但是在簿記或會計之中, 笛卡兒乘績的用處應該不大.
既然公司的編號只出現一次, 那為什麼不把公司資料直接放在 <tbl_mvoucher>? 這是因為遵從了資料庫正規化 (Database Normalization) , 亦節省了資料庫在硬盤(Hard Drive) 及記憶體 (RAM) 上所佔據的位元空間從而縮短系統反應時間(Response Time). 說了這麼多, 那<<id_company INT>> 及 <<co_mvoucher INT>> 中的 "INT" 是什麼呢? 這個 "INT" 指的是資料的形態. 這是未來會講及的.
訂閱:
文章 (Atom)








































