一個自己總結的數據庫設計好思想(原創),數據庫原創
一個自己總結的數據庫設計好思想,這個思想在以前做.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