首先我們先討論實體之間的聯繫怎麼表示
1.數據庫中一對一的實現方式:
(如一個學生對應一個檔案,一個檔案對應一個學生。學生表爲A表,檔案表爲B表)
- 唯一外鍵方式:在A和B任意一表中添加唯一外鍵(注意是添加完外鍵後,再點唯一鍵,進行設置)具體方式點此。
- 主鍵關聯方式:當A和B的主鍵相同時,我們就認爲是一組數據。(注意是“我們就認爲”,數據庫中並沒有提供主鍵關聯的約束方式。)
- 中間關係表:創建一張新表作爲中間關係表,兩個列分別記錄A和B,並且每一列的取值中,值均不能重複(即將這兩列均設置爲唯一外鍵,注意:將這兩列“既設置爲主鍵,又設置爲外鍵”的方式不能實現該功能,因爲可能會出現一列相等而另一列不相等的情況)。
2.數據庫中一對多的實現方式:
(如一個班級對應多個學生)
- 1 在多的一方添加外鍵:在學生表中添加一列,記錄該學生是哪一個班的,該列設置成外鍵,取值爲班級表的主鍵。
- 2 建立中間表:創建一個新表,該表至少有兩列,分別記錄學生和班級。學生列要設置成爲“外鍵+唯一鍵”,以防有兩行數據的學生列的值一樣(防止一個學生有兩個班級的情況出現)。班級列不必設置成唯一鍵,設置成爲外鍵即可,因爲不同學生可以有一樣的班級。
3.數據庫中多對多實現方式:
(學生和課程:一個學生可以選多門課,一門課可以由多個學生選)
- 1 建立中間關係表:新建一張表,一列記錄學生,一列記錄課程。兩列均爲外鍵,一列取值爲學生表中的唯一標識,一列取值爲課程中的唯一標識。兩列不用設置成爲唯一鍵,因爲每一列中均可有重複,但不能有兩行數據在兩列上完全重複。所以將兩列均設置成爲主鍵+外鍵(即聯合主鍵+外鍵)
然後我們給出案例
案例情景:
- 1)針對某個高校,開發一個學生成績管理系統,要求設計出ER圖。
- 2)針對目前疫情的情況,爲某個小區設計一個人員管理的系統。
- 3)爲教務處開發一個教室管理的系統。
數據庫ER圖:
- 學生成績管理系統:
- 小區人員管理系統:
- 教室管理系統:
實現原理:
- 學生成績管理系統:
- 關係模式:
Student(Sid,Sname,Sgrade,Sclass,Smajor,Ssex):學生信息表 Teacher(Tid,Tname,Tdep):教師信息表 Course(Cid,Cno,Cname,Cscore):課程信息表 TC(Tid,Cid,Cno):教師課程關係表 (均爲外碼) SC(Sid,Cid,Cno,Scj):學生課程成績關係表(均爲外碼)
- 關係模式:
- MySQL數據庫實現:
Creat
database StuGrade;
use StuGrade
--建立一個學生信息表
CREATE TABLE Student
(
Sid CHAR(10) PRIMARY KEY,--主碼
Sname CHAR(10),
Sgrade INT,
Sclass SMALLINT,
Smajor CHAR(10),
Ssex BOOLEAN
);
--建立一個教師信息表
CREATE TABLE Teacher
(
Tid CHAR(10) PRIMARY KEY,
--主碼
Tname CHAR(10),
Tdep CHAR(10)
);
--建立一個課程信息表
CREATE TABLE Course
(
Cid CHAR(10),
Cno CHAR(10),
Cname CHAR(10),
Cscore SMALLINT ,
PRIMARY KEY (Cid,Cno)
--主碼
);
--建立一個師課程關係表
CREATE TABLE TC
(
Tid CHAR(10) ,
--主碼
Cid CHAR(10),
Cno CHAR(10),
PRIMARY KEY (Tid,Cid,Cno),
FOREIGN KEY (Tid) REFERENCES Teacher(Tid),
FOREIGN KEY (Cid) REFERENCES Course(Cid),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
--建立一個學生課程成績關係表
CREATE TABLE SC
(
Sid CHAR(10),
Cid CHAR(10),
Cno CHAR(10),
Scj SMALLINT,
PRIMARY KEY (Sid,Cid,Cno),
FOREIGN KEY (Sid) REFERENCES Student(Sid),
FOREIGN KEY (Cid) REFERENCES Course(Cid),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
2. 小區人員管理系統:
-
關係模式:
Investigator(Iid,Iname,Ipho):物業人員信息表 LocalPeople(LPid,LPname,LPpho,LPentertmp,LPwh):小區常住人員 信息表 ForeignPeoPle(FPid,FPname,FPpho,FPtmp,FPperp):外來人員信息表 Estate(Ecode,Eno,Eentra,Eloc):住房信息 FtoL(FPid,LPid):訪問關係信息表,均爲外碼 ImE(Iid,Eno):管理關係,間接管理住戶 LlE(Lid,Ecode):居住關係
-
MySQL數據庫實現:
Creat
database EstManage;
use EstManage
--建立一個 物業人員信息表
CREATE TABLE Investigator
(
FPid CHAR(10) PRIMARY KEY ,
FPpho CHAR(10),
FPtmp CHAR(10),
FPperp CHAR(200),
);
--建立一個 小區常住人員信息表
CREATE TABLE LocalPeople
(
LPid CHAR(10) PRIMARY KEY ,
LPname CHAR(10),
LPpho CHAR(10),
LPentertmp SMALLINT,
LPwh boolean
);
--建立一個外來人員信息表
CREATE TABLE ForeignPeoPle
(
FPid CHAR(10) PRIMARY KEY ,
FPname CHAR(10),
FPpho CHAR(10),
FPtmp CHAR(10),
FPperp CHAR(10)
);
--建立一個 住房信息表
CREATE TABLE Estate
(
Ecode CHAR(10) PRIMARY KEY ,
Eno CHAR(10) ,
Eentra CHAR(10) ,
Eloc CHAR(10)
);
--建立一個訪問關係信息表 關係表
CREATE TABLE FtoL
(
FPid CHAR(10),
LPid CHAR(10),
PRIMARY KEY (FPid,LPid),
FOREIGN KEY (FPid) REFERENCES ForeignPeoPle(FPid),
FOREIGN KEY (LPid) REFERENCES LocalPeople(LPid)
);
--建立一個管理關係表
CREATE TABLE ImE
(
Iid CHAR(10),
Eno CHAR(10),
PRIMARY KEY (Iid,Eno),
FOREIGN KEY (Iid) REFERENCES Investigator(Iid),
FOREIGN KEY (Eno) REFERENCES Estate(Eno),
);
--建立居住關係表
CREATE TABLE LlE
(
Lid CHAR(10),
Ecode CHAR(10),
PRIMARY KEY (Lid,Ecode),
FOREIGN KEY (Lid) REFERENCES Teacher(Lid),
FOREIGN KEY (Ecode) REFERENCES Course(Ecode),
);
3.教室管理系統:
- 關係模式:
Student(Sid,Sname,Sacademy):學生信息表
Course(Cno,Cname,Cscore,Cqual,Tname):課程信息表
Classroom(CRno,CRstatus,CRtype):教室信息表
Building(Bno,Bname,Bsum):教學樓信息表
Campus(CPno,CPname,CPlocation):校區信息表
STC(Cno,CRno,Bno,Udate,UTime):課程與教室使用關係表
SCR(Sid,CRno,Bno Udate,UTime):學生借用教室關係表
- MySQL數據庫實現:
Creat
database ClassManage;
use ClassManage
--建立一個學生信息表
CREATE TABLE Student
(
Sid CHAR(10) PRIMARY KEY,
Sname CHAR(10),
Sacademy CHAR(10)
);
--建立一個 課程信息表
CREATE TABLE Course
(
Cno CHAR(10) PRIMARY KEY,
Cname CHAR(10),
Cscore CHAR(10),
Cqual CHAR(10),
Tname CHAR(10)
);
--建立一個 教室信息表
CREATE TABLE Classroom
(
CRno CHAR(10) PRIMARY KEY,
CRstatus CHAR(10),
CRtype CHAR(10)
);
--建立一個 教學樓信息表
CREATE TABLE Building
(
Bno CHAR(10) PRIMARY KEY,
Bname CHAR(10),
Bsum CHAR(10)
);
--建立一個 校區信息表
CREATE TABLE Campus
(
CPno CHAR(10)PRIMARY KEY,
CPname CHAR(10),
CPlocation CHAR(10)
);
--建立一個 課程與教室使用關係表
CREATE TABLE STC
(
Cno CHAR(10),
CRno CHAR (10),
Bno CHAR (10),
Udate DATE,
UTime TIME,
PRIMARY KEY (Cno,CRno,Bno,Udate,UTime),
FOREIGN KEY (Cno) REFERENCES Course(Cno),
FOREIGN KEY (CRno) REFERENCES Classroom(CRno),
FOREIGN KEY (Bno) REFERENCES Building(Bno)
);
--建立一個 學生借用教室關係表
CREATE TABLE SCR
(
Sid CHAR(10),
CRno CHAR(10),
Bno CHAR(10),
Udate DATE,
UTime TIME,
PRIMARY KEY (Sid,CRno,Bno,Udate,UTime),
FOREIGN KEY (Sid) REFERENCES Student(Sid),
FOREIGN KEY (CRno) REFERENCES Classroom(CRno),
FOREIGN KEY (Bno) REFERENCES Building(Bno)
);
寫在最後:
我叫風骨散人,名字的意思是我多想可以不低頭的自由生活
,可現實卻不是這樣。家境貧寒,總得向這個世界低頭,所以我一直在奮鬥,想改變我的命運
給親人好的生活,希望同樣被生活綁架的你
可以通過自己的努力改變現狀,深知成年人的世界裏沒有容易二字。目前是一名在校大學生,預計考研,熱愛編程,熱愛技術,喜歡分享,知識無界,希望我的分享可以幫到你!
如果有什麼想看的,可以私信我,如果在能力範圍內,我會發布相應的博文!
感謝大家的閱讀!😘你的點贊、收藏、關注是對我最大的鼓勵!