程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 一個自己總結的數據庫設計好思想(原創),數據庫原創

一個自己總結的數據庫設計好思想(原創),數據庫原創

編輯:MySQL綜合教程

一個自己總結的數據庫設計好思想(原創),數據庫原創


    一個自己總結的數據庫設計好思想,這個思想在以前做.net開發,創建數據庫時,自己就常用了,所以我做的項目,你是不會看到茫茫多的表存在數據庫中的,不管你是什麼項目,我這設計思想至少可以用到你一半左右的數據庫表中,下面就來仔細介紹下我這思想,還有這裡你要想明白我這思想,請你暫時拋棄傳統的創建數據庫的思路。

   1.適用表類型:

          每個用戶都有的數據,數據不是很大,或則一個類型只有一條數據,操作只是用戶對字段值的改動,比如---->地址表-->積分表--->或則我當前做這個app的 游戲積分記錄表。

 2.優點:

          大程度減少對應表給服務器帶去的壓力,並且減少訪問接口的方法,你只需要寫一個方法接口,就能實現對一個對應表的增刪改操作。

 3.缺點:

        稍微增大了客戶端對數據處理的復雜度

 4.實例講解: 

      我下面會以,客戶端(IOS)+服務端(Servlet+mysql)來講我這思路。   

       1.IOS客戶端:

    

 

  首先看上面做個app地址截圖:  從截圖上來看這個界面對應的數據庫表需要操作的方法有:加載,設置默認,修改.刪除,增加地址 一共5個方法,但是這裡我要告訴你用我這個設計思路創建的數據庫表,只需要兩個接口方法就能實現這5個方法功能,第一個->加載 第二個->修改(update),其中設置默認 修改 刪除 增加 在我這個思路設計的表中都可以通用一個方法。(update).

   2.表設計思路:

      我這裡先用文字描述下,等會截表圖出來,就如上app截圖,這裡按照常規思想來,在創建的地址表中至少要出現5個字斷,1=id 2=對應的用戶id,3=名稱,4=手機號 5=詳細地址,如果以這種傳統的方式創建的表,只要用戶增加一個地址,那麼對應的表中就會多出一條數據,一個簡單的道理,數據庫中表的數據條數多少是影響用戶查詢效率的一個重要因素。所以這裡我就是當時就是以這點出發,想到了我這個對表的設計思路。   

      下面說思路了, 呵呵我這個設計思路出來的表,就針對以上這個地址表來說,用戶不管如何新增地址(當然之前我也說了,這個思路不太適宜數據超龐大的表),在地址表中他的數據只會保存一條,不過這裡即使他刪除了所有地址,也會給他保留一條數據。只是地址組合字斷的值為空

    我創建這個表的思路就是,將表中的  用戶名稱-->手機號-->詳細地址,組合成一個有規律的字符串,保存到一個字斷,這裡簡單點說就是將,3個字斷組合成了一個字斷,那麼現在起時就只有三個字斷了, id   用戶id  (用戶名稱,手機號,詳細地址)

     下面我會來一個表的截圖奉上

    

   看上面的圖,這樣我在表中對 地址的 修改,增加,刪除,設置默認,就指需要 替換  address這個值就行了,

  update addressSheet set address="新組合" where account="account";  (其實我當前項目中這個address是創建在user表中的,這樣就會少創建一張表,而且之後對這地址的加載都是在客戶端緩存中了,我這裡弄出來是為了好講解這思路)

當前這裡涉及到了ios端比較復雜的字符串處理,不過只要你把方法封裝好,處理也是如此的簡單。在這裡奉勸別去創建對象這些,你如果創建對象來處理這個會增加負擔,直接用NASrray 和 NSObject來處理數據,包括servlet端我當前也很少創建類這玩意,我覺得這玩意遇到超大的團隊合作項目用用還好,好的地方都是好管理,並不是提高項目的性能。性能用它只會降低,這個是我的經驗。

 

 沒啥東西我還貼下我servlet的代碼,ios的代碼在家電腦上,固無法貼出來。

1 response.setContentType( "text/html"); 2 response.setCharacterEncoding("utf-8"); 3 request.setCharacterEncoding("utf-8"); 4 String AddressType; 5 String ReplaceAllStr; //設置默認也是將所有字符串替換掉,刪除也是,修改也是 6 String Account; 7 8 String[] mysqlParameter; 9 JSONArray returnJsonArray; 10 JSONObject returnJsonObject = null; //LoadType 11 ResultSet returnData; 12 13 14 15 Account=request.getParameter("account"); 16 AddressType=request.getParameter("LoadType"); 17 18 19 //加載 20 if(AddressType=="0") 21 { 22 mysqlParameter=new String[]{Account}; 23 24 returnData=MySqlHepler.executeQueryT("select address from userSheet where account=?",mysqlParameter); 25 26 try { 27 returnJsonObject =new JSONObject(); 28 returnJsonArray=ResultToJsonTool.resultSetToJsonArry(returnData); 29 returnJsonObject.put("Rows", returnJsonArray); 30 returnJsonObject.put("GetType", "0"); 31 returnJsonObject.put("Success", "1"); 32 response.getWriter().println(returnJsonObject.toString()); 33 34 } catch (SQLException | JSONException e1) { 35 36 37 e1.printStackTrace(); 38 } 39 }//刪除=替換 修改=替換 默認設置=替換 ==1 40 else 41 { 42 ReplaceAllStr=request.getParameter("ReplaceAllStr"); 43 //ReplaceAllStr="liaohang,13983918073,重慶江北區石馬河金色年華|liaohang,13983918072,重慶江北區石馬河街道金色年華,default|liaohang,13983918073,重慶江北區石馬河街道金色年華"; 44 returnJsonObject =new JSONObject(); 45 mysqlParameter=new String[]{ReplaceAllStr,Account}; 46 int Result=MySqlHepler.executeUpdate("update userSheet set address=? where account=?",mysqlParameter); 47 48 if(Result==1) 49 { 50 51 try { 52 53 54 returnJsonObject.put("GetType", "3"); 55 returnJsonObject.put("Success", "1"); 56 57 response.getWriter().println(returnJsonObject.toString()); 58 } catch (JSONException e) { 59 // TODO Auto-generated catch block 60 e.printStackTrace(); 61 } 62 63 64 } 65 else 66 { 67 68 try { 69 returnJsonObject.put("Success", "0"); 70 returnJsonObject.put("Msg", "操作失敗,請稍後再試!"); 71 72 response.getWriter().println(returnJsonObject.toString()); 73 74 } catch (JSONException e) { 75 // TODO Auto-generated catch block 76 e.printStackTrace(); 77 } 78 79 } 80 81 82 } View Code

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved