當前位置:成語大全網 - 新華字典 - 數據庫設計多對多關系的幾種形態

數據庫設計多對多關系的幾種形態

數據庫設計多對多關系的幾種形態 前言:多對多關系至少需要3個表,我們把壹個表叫做主表,壹個叫做關系表,另外壹個叫做字典表或者副表(字典表是紀錄比較少,而且基本穩定的,例如:版塊名稱;副表是內容比較多,內容變化的,例如)。 www.2cto.com 按照數

數據庫設計多對多關系的幾種形態

前言:多對多關系至少需要3個表,我們把壹個表叫做主表,壹個叫做關系表,另外壹個叫做字典表或者副表(字典表是紀錄比較少,而且基本穩定的,例如:版塊名稱;副表是內容比較多,內容變化的,例如)。 www.2cto.com

按照數據庫的增刪查改操作,多對多關系的查找都可以用inner join或者select * from 主表 where id in (select 主表id from 關系表)

1,角色任命型

特點:關系表兩外鍵組合無重復紀錄,關系表壹般不需要時間字段和主鍵,有壹個表是字典類型的表。

界面特點:顯示主表,用checkbox或多選select設置多選關系。

例如:任命版主(用戶表-關系表-版塊名稱表),角色權限控制等,用戶是5個版塊版主,只要關系表5行紀錄就可以確立,關系表的兩個外鍵具有聯合主鍵性質。

增加關系:如果沒有組合紀錄,insert之。

刪除關系:如果有組合紀錄,刪除之。

2,集合分組型

特點:同角色任命型類似,關系表兩外鍵組合無重復紀錄,關系表壹般不需要時間字段和主鍵。區別是主副表都不是字典表,可能都很大不固定。

界面特點:顯示主表,用搜索代替簡單的checkbox或多選select,或者壹條壹條的添加。

例如:歌曲專集(專集表-關系表-歌曲表)。手機分組(分組表-關系表-手機表)。用戶圈子(圈子表-關系表-用戶表)。文章標簽(文章表-關系表-標簽表)

增加關系:同版主任命型。

刪除關系:同版主任命型。

3,明細帳型

特點:關系表可以有重復紀錄,關系表壹般有時間字段,有主鍵,可能還有文字型的字段用來說明每次發生關系的原因(消費)。

界面特點:顯示關系表,用radio或下拉設置單選關系。

例如:現金消費明細帳或訂單(用戶表-訂單表-消費原因表),用戶可能多次在同壹事情上重復消費。積分變化紀錄也屬於這類。

增加關系:不管有沒有組合紀錄,insert之,紀錄時間。

刪除關系:根據關系表PK刪除。

4,評論回復型

特點:同明細帳型關系表壹般有時間字段,有主鍵,區別是重點在文字型的字段用來說明每次發生關系的內容(評論回復)。

界面特點:回復文本框。

例如:論壇回復(用戶表-回復表-帖子表),用戶可能多次在不同帖子上評論回復費。

增加關系:不管有沒有組合紀錄,insert之,紀錄時間和文字。

刪除關系:根據關系表(回復表)PK刪除。

5,站內短信型

特點:主副表是同壹個,關系表壹般有時間字段,有主鍵,重點在關系表文字型的字段用來說明每次發生關系的內容(消息)或者其他標記位來表示文字已讀狀態時間等。

界面特點:回復文本框。

例如:站內短信(用戶表-短信表-用戶表),用戶可能給用戶群發或者單發,有標記位來表示文字已讀狀態時間等。

增加關系:不管有沒有組合紀錄,insert之,紀錄時間和文字。

刪除關系:根據關系表(回復表)PK刪除。

6,用戶好友型

特點:主副表是同壹個,同集合分組型,關系表兩外鍵組合無重復紀錄,關系表壹般不需要時間字段和主鍵。

界面特點:同集合分組型,顯示主表,用搜索代替簡單的checkbox或多選select,或者壹條壹條的添加。

例如:下載站點的文件,(文件表-關系表-文件表)可以被軟件工具打開,軟件工具本身也是壹種文件,可以被下載。用戶的好友,也是用戶(用戶表-好友關系表-用戶表)

增加關系:同版主任命型。

刪除關系:同版主任命型。

7,未知屬性型

特點:在設計初期,主表的某些字段類型和名稱是不確定的時候,關系表實際上是主表的可擴展字段,

壹個[主表](ID),

壹個[屬性名稱表](屬性ID.屬性名稱),

壹個[屬性值表],包括3個字段:

屬性值(屬性Value varchar(500))

主表ID

屬性ID

這樣可以作到最小冗余度。

(和常見的多對多關系不同的是:值統壹用varchar來存儲,因為這類型的值壹般不會用來計算)。

比如:

軍隊的數據庫設計中有種物資叫做?戰繳物資?,就是打仗的時候繳獲的,軍隊自己都不知道這些物資有什麽屬性。

比如繳獲的化學品有化學名,通用名,是否有輻射,計量單位,包裝規格,數量等等,或者不是化學品是其他任何未知的東西。

這樣東西就可以

某奇怪東西.屬性集合["某某奇怪屬性名"]="某某奇怪值";

某變態東西.屬性集合["某某變態屬性名"]="某某變態值";

這樣存儲。

再比如:

手機型號有幾千種,除了***同屬性外還有不同屬性有幾百個,屬性名和值類型都不壹樣,有的手機有這屬性,有的沒有。

對於這樣的?多態?,我們就采用上面的設計結構。

其效果相當於:

某奇怪手機.屬性集合["某某奇怪屬性名"]="某某奇怪值";

某變態手機.屬性集合["某某變態屬性名"]="某某變態值";

界面特點:設置主表壹行紀錄的屬性時候,要列出所有可能的屬性名稱,每個對應壹個文本框。

總結這個的目的是做通用的後臺。

只要有:

1,通用的單個表維護(1-2種)。

2,通用的壹對多關系維護(1-2種)。

3,通用的多對多關系維護(7-10種)。

4,通用的樹型關系維護(2-3種)。

就大體完成了後臺的80%工作。

而且,所有項目通用,如果壹個團隊同時有多個項目,可以節省大量勞動時間。