用戶表(UID,名稱,密碼,……)
成都創(chuàng)新互聯(lián)公司專注于惠城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。惠城網(wǎng)站建設(shè)公司,為惠城等地區(qū)提供建站服務(wù)。全流程定制制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
好友表(UID1,UID2,添加時間,最后通話時間,累計通話次數(shù),……)
1.數(shù)據(jù)庫中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為兩個一對多。
2.通過表的關(guān)系,來幫助我們怎樣建表,建幾張表。
一對一
一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對應(yīng),反之亦然。
學(xué)生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯(lián)系人
其中姓名、性別、年齡、身高,體重屬于常用數(shù)據(jù),但是籍貫、住址和聯(lián)系人為不常用數(shù)據(jù)
如果每次查詢都是查詢所有數(shù)據(jù),不常用的數(shù)據(jù)就會影響效率,實際又不用
常用信息表:ID(P),姓名,性別,年齡,身高,體重
不常用信息表:ID(P),籍貫,家庭住址,緊急聯(lián)系人
解決方案:將常用的和不常用的信息分享存儲,分成兩張表
不常用信息表和常用信息表,保證不常用信息表與常用信息表能夠?qū)?yīng)上:找一個具有唯一性的
字段來共同連接兩張表。
一個常用表中的一條記錄永遠(yuǎn)只能在一張不常用表中匹配一條記錄,反之亦然。
一對多
一張表中有一條記錄可以對應(yīng)另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對應(yīng)第一張表的一條記錄,這種關(guān)系就是一對多或多對一
母親與孩子的關(guān)系:母親,孩子兩個實體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關(guān)系:一個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個孩子只能找到一個媽媽
是一種典型的一對多的關(guān)系。
但是以上設(shè)計:解決了實體的設(shè)計表問題,但是沒有解決關(guān)系問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加一個字段,能夠找到另外一張表中的記錄:在孩子表中增加一個字段
指向母親表,因為孩子表的記錄只能匹配到一條母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對多
一對表中(A)的一條記錄能夠?qū)?yīng)另外一張表(B)中的多條記錄;同時B表中的一條記錄
也能對應(yīng)A表中的多條記錄
老師和學(xué)生
老師表 T_ID(P),姓名,性別
學(xué)生表 S_ID(P),姓名,性別
以上設(shè)計方案:實現(xiàn)了實體的設(shè)計,但是沒有維護(hù)實體的關(guān)系
一個老師教過多個學(xué)生,一個學(xué)生也被多個老師教過
解決方案:增加一張中間關(guān)系表
老師與學(xué)生的關(guān)系表:ID(P),T_ID,S_ID
老師表與中間表形成一對多的關(guān)系,而中間表是多表;維護(hù)了能夠唯一找到一表的關(guān)系;
同樣的學(xué)生表與中間表也是一個一對多的關(guān)系;
學(xué)生找老師:找出學(xué)生ID---中間表尋找匹配記錄(多條)---老師表匹配(一條)
老師找學(xué)生:找出老師ID---中間表尋找匹配記錄(多條)---學(xué)生表匹配(一條)
1、下載mysql,安裝,然后打開cmd,cd到mysql所在的目錄,然后輸入mysqld啟動mysql服務(wù)器
2、查看當(dāng)前所有的數(shù)據(jù)庫 : show databases;
3、創(chuàng)建數(shù)據(jù)庫 : create database 數(shù)據(jù)庫名稱; (這里創(chuàng)建了test_db數(shù)據(jù)庫,然后用1命令查看所有數(shù)據(jù)庫)
4、這里數(shù)據(jù)庫創(chuàng)建完畢了,接下來就是創(chuàng)建數(shù)據(jù)庫表,比如我們在test_db中創(chuàng)建一個為tb_user的表,該表包含字段email ,password
5、切換當(dāng)前數(shù)據(jù)庫到test_db
命令 use test_db;
6、
dc2ed6aa12228bee31bb96dc0507652.png
7、創(chuàng)建表TB_USER ,創(chuàng)建成功后用show tab
1.建立用戶信息表
create table userinfo(id int(4) not null primary key, name varchar(20) not null unique key)engine=innodb default charset=utf8;
2.建立好友關(guān)系表
create table friend(uid int(4) not null, foreign key(uid) references
userinfo(id),fid int(4) not null, foreign key(fid) references
userinfo(id),unique key(uid,fid))engine=innodb default charset=utf8;
3.追加測試數(shù)據(jù)(滿足uidfid條件)
insert userinfo values(1111---9999,'namea---namei’);
insert friend values(1111,4444---6666);
insert friend values(5555,6666---9999);
4.查詢好友(5555的好友)
select * from friend where uid=5555 or fid=5555;
+-------+------+
| uid | fid |
+-------+------+
| 1111 | 5555 |
| 5555 | 6666 |
| 5555 | 7777 |
| 5555 | 8888 |
| 5555 | 9999 |
+-------+--------+
5.問題:
5.1.userinfo中的id和name不為null,且不可重復(fù):table設(shè)計可以做到
5.2.friend中的uid和fid均不為null,且都來自于userinfo的id:table設(shè)計可以實現(xiàn)
5.3.(uid,fid)組合不可重復(fù):table設(shè)計可以完成
5.4.好友關(guān)系的表達(dá)時,(1111,5555)和(5555,1111)有冗余,也會出現(xiàn)(1111,1111)這樣的數(shù)據(jù):這個在table設(shè)計實現(xiàn)比較麻煩,需要在程序?qū)用鎸崿F(xiàn),也即增加限制條件uidfid即可
6.結(jié)果:
table設(shè)計達(dá)不到要求,或者較難達(dá)到要求時,可以在程序?qū)用嬗枰詮浹a。
文章名稱:mysql表怎么設(shè)計 mysql表的設(shè)計原則
文章來源:http://m.rwnh.cn/article38/doopipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、電子商務(wù)、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、網(wǎng)站改版、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)