bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

mysql怎么存放一對多 mysql多對一查詢

聊聊mysql的單列多值存儲

本文主要研究一下mysql如何用一個列來存儲多個值

創新互聯建站長期為成百上千客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為黔西南州企業提供專業的成都網站建設、成都做網站,黔西南州網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發。

mysql用單列存儲多值通常用于一對多的反范式處理,具體可以用bit、int/bigint、varchar、set類型來實現,缺點是不支持索引。

數據庫如何建立表間一對多關系

MySQL里面有如下的表

user:id username

photo:id name

photo_favour(圖片收藏關系表):photo_id user_id

假設這幾個表都相當大,需要進行分表。我的分表規則是:

user表按照id取模,這樣user相關的表都可以按照這個取模后的結果來分表;

photo表按照id取模,同樣與photo相關的表都可以按該規則分表;

至于photo_favour是一個多對多的關系表,我現在的想法是該表復制多一份,一份以photo_id來分表,一份以user_id分表,分別建立不同的索引,這樣就變為兩個一對多的關系。

我有兩個問題:

1、這樣的分表可行嗎,有更好的分表方法嗎?

2、一對多的關系在進行分表時候,例如user表和user_favour表都按照user_id來取模得到序號x來確定分表。如果1個用戶會有100條收藏記錄,那么user_x有100W條記錄時候user_favour_x分表就有1000W記錄,這時候user_favour_x又需要分表了,怎么解決這種情況?

這種情況我會放棄多對多的形式,弄兩個表

user_to_photos: user_id, photo_id_list

photo_to_users: photo_id, user_id_list

1個user喜歡的photo id全塞到photo_id_list

1個photo被哪些用戶喜歡了,也全塞到user_id_list

這樣的讀取就高效了很多,,寫的時候注意并發臟寫。。。同樣你根據user_id愛怎么分表就怎么分。

===

如果收藏量太大,還是不能滿足,就要考慮切分記錄,1個user可以擁有多條記錄,每條記錄都可記錄多個photo id

user_to_photos: user_id, num, photo_id_list

num字段可有可無,如果你需要精確定位user 222 收藏的 photo 333在哪條記錄,就需要安排好算法,找到對應的num

大概是這樣,重點是算法邏輯

數據庫中建表時經常所說一對一、一對多、多對多等等關系究竟是什么意思?分別在什么情況下要用到一對一或一對式,而又在什么情況下又要用到多對多?在這里我們詳細分析,并且用實例來講解各種關系的實際運用!

關聯映射:一對多/多對一存在最普遍的映射關系,簡單來講就如球員與球隊的關系;一對多:從球隊角度來說一個球隊擁有多個球員 即為一對多多對一:從球員角度來說多個球員屬于一個球隊 即為多對一數據表間一對多關系如下圖:

關聯映射:一對一關系就如球隊與球隊所在地址之間的關系,一支球隊僅有一個地址,而一個地址區也僅有一支球隊。數據表間一對一關系的表現有兩種,一種是外鍵關聯,一種是主鍵關聯。圖示如下:

一對一外鍵關聯:

----------------------------------------------------------------------------------------------------------

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

按照數據庫的增刪查改操作,多對多關系的查找都可以用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來存儲,因為這類型的值一般不會用來計算)。

比如:

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

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

這樣東西就可以

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

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

這樣存儲。

再比如:

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

對于這樣的“多態”,我們就采用上面的設計結構。

其效果相當于:

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

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

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

mysql數據庫中如何用一對多表示多對多

拿用戶角色來說

用戶? ←多對多→ 角色

概念模型如下:

生成物理模型就成了2個1對多:

箭頭指向多的一方

mysql怎么設計一對多的好友關系

在多的一方增加 一 的一方的id,例如 A 有 n 個好友,則在好友表(friends)中,增加一個字段用于存放A的id,則可以通過下列語句查詢到A的所有好友:

select * from friends where Aid = ?

分享標題:mysql怎么存放一對多 mysql多對一查詢
網頁URL:http://vcdvsql.cn/article44/doodihe.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣、搜索引擎優化、ChatGPT品牌網站設計外貿網站建設、網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

小程序開發