A. 資料庫一對多怎麼建立,還有主外鍵的區別
一對多:一個表的唯一健對應另一個表的某個欄位 並且這個欄位不是唯一的 這就是一對多
主鍵:唯一健 沒的說 插入的值必須唯一
外鍵:簡單地說 你對有外鍵的表操作的時候要滿足外鍵的約束條件;不然不會讓你操作
外鍵是屬於約束的一種,所謂約束顧名思義,就是限制你在資料庫的操作。而你對資料庫有什麼操作,無非是增、刪、改、查,外鍵起的作用就是讓你在資料庫幫助的情況下更合理的增加數據的正確度。
外鍵的作用是能夠避免如下情況。
如
【班級信息表】存放的是班級信息表。
【學生表】存放的是學生信息,包含班級信息。
這個時候 在【學生表】中存放的班級信息應該在【班級信息表】存在才合法,自己人為控制的話難免有漏掉的情況,用外鍵則可以讓資料庫自動控制,當插入【學生表】中的數據在【班級信息表】不存在的時候,資料庫不允許插入。
B. 簡述VISUAL FOXPRO資料庫中創建表間一對多(1:N關聯步驟
1。
將兩個表加到同一個資料庫中。
2。
「一方」的表按關鍵字建立主索引或候選索引,「多方」的表按此欄位建立普通索引。
3。
打開資料庫設計器,按住滑鼠左鍵,從主表的此索引欄位拖動到被關聯表的此索引欄位,此時會出現一條黑線,至此,一對多關系創建完畢。
C. 急急急!資料庫查詢問題,同表中一對多情況
這樣的查詢結果一般不是通過sql語句弄出來的,是將結果讀到本地,然後再通過循環讀取的。
你想,你的一個縱列表示一個欄位,你現在只是舉例的5條記錄,如果記錄非常多,那麼縱列不就會非常多的啊。你還是考慮通過循環讀取吧,而且也只顯示部分信息,通過點擊詳情,然後再出來001對應的所有記錄。
希望對你有用。
D. 怎麼處理資料庫一對多問題
不用創表,你可以再書表中加兩個欄位(是否借出,借書人編號),再把借書人編號和書生學號關聯起來即可。觸發器在這里完全沒有必要,放在這里也不合適。希望回答對你有所幫助。
E. 一對一、一對多、多對多的數據表應該怎樣設計
一對一正確。
一對多和多對一是多個表 ,至少兩個表,一對多和多對一是相互的。
主鍵是自己定義的,一般外鍵表引用的對應的表的鍵是主鍵。
多對多三個表,有一個是關系表(中間表)。
中間表沒有普通欄位,一般只有有兩個外鍵,同時引用兩個表,多對多就出來了。
F. 資料庫問題求解:設計資料庫時出現一對多的情況該如何解決還有出現多對多呢
出現一對多的情況是資料庫表的基本關系,按一對多關系處理。如果出現多對多的情況,那需要再建一張聯接表,兩張表與聯連表形成一對多的關系,這才符合資料庫設計的要求。
G. 資料庫如何建立表間一對多關系
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來存儲,因為這類型的值一般不會用來計算)。
比如:
軍隊的資料庫設計中有種物資叫做「戰繳物資」,就是打仗的時候繳獲的,軍隊自己都不知道這些物資有什麼屬性。
比如繳獲的化學品有化學名,通用名,是否有輻射,計量單位,包裝規格,數量等等,或者不是化學品是其他任何未知的東西。
這樣東西就可以
某奇怪東西.屬性集合["某某奇怪屬性名"]="某某奇怪值";
某變態東西.屬性集合["某某變態屬性名"]="某某變態值";
這樣存儲。
再比如:
手機型號有幾千種,除了共同屬性外還有不同屬性有幾百個,屬性名和值類型都不一樣,有的手機有這屬性,有的沒有。
對於這樣的「多態」,我們就採用上面的設計結構。
其效果相當於:
某奇怪手機.屬性集合["某某奇怪屬性名"]="某某奇怪值";
某變態手機.屬性集合["某某變態屬性名"]="某某變態值";
界面特點:設置主表一行紀錄的屬性時候,要列出所有可能的屬性名稱,每個對應一個文本框。
H. 資料庫中怎麼設計一對多的問題
主外鍵關聯法
比如:
貨物類別表A和貨物類B的關系是:一個類別下有多個貨物
A表結構:
類別ID(A表主鍵)
類別名稱
B表結構:
貨物ID(B表主鍵)
貨物類別ID(外鍵,references
A(類別ID))
貨物名稱
I. 資料庫建立一對多關系
表1
可以有用戶ID,用戶名,用戶密碼
表2
用戶ID,本表ID,日期時間,日歷事件,事件類型,備注
某個用戶登陸你可以知道它的ID再用此用戶ID知道他的日歷事件
select * from 表2 where 用戶ID=??
J. 資料庫一對多、連接表問題
樓主這種,是多對多的關系,我一般是這么處理的。
學生表 (一個主鍵 學生ID)
課程表 (一個主鍵 課程ID)
學生選課表
主鍵為2個欄位 學生ID、課程ID
同時建立外鍵約束
學生選課表中的 學生ID,必須在學生表中存在。
學生選課表中的 課程ID、必須在課程表中存在。
因為 一個學生,選一門課程,是唯一的了。 可以作為主鍵了。
沒有必要再去折騰一個 「選課ID」 作為主鍵。 然後再給 學生ID 與 課程ID 創建個唯一性的索引。
--
除非是這種情況:
這個 中間的 選課表, 還包含 時間信息的欄位.
例如 學生 張三
2010年 選修 Oracle 資料庫課程
2011年,又選修 Oracle 資料庫課程
2012年,還選修 Oracle 資料庫課程
那麼,這種情況下, 可以設置 一個由資料庫管理的 自增的 "選課ID" 來確保唯一性。