當前位置:首頁 » 操作系統 » 資料庫中學院

資料庫中學院

發布時間: 2022-05-03 13:53:55

1. 關於資料庫Access的一些問題

(1) 上述實驗中,插入「已結項項目」表的命令是否可以省略欄位列表?為什麼?

可以,因為select語句的輸出列與要賦值的表中對應欄位值的數據類型相同

(2)刪除「已結項項目」的命令的條件為什麼沒有比較對象?

項目表中的「是否結項」欄位,應該是個布爾值(邏輯值)欄位,也就是只有 true 和 false 兩種情況。 "AND 是否結項" 就等價於 "AND 是否結項 = 1" 或者 "AND 是否結項 = true" 這種情況。屬於省略的寫法

刪除查詢或更新查詢如果需要通過其他表的條件實現,如何在設計視圖中實現?

①將指定表添加到查詢設計視圖中,在「查詢類型」組中單擊「更新」或者「刪除」按鈕,在設計網格中增加到「更新」或「刪除」欄

②將需要更新或者刪除的欄位加入到設計網格中,並在對應的「更新到」欄或者「刪除」欄中輸入更新或刪除表達式

③單擊工具欄中的「保存」按鈕,然後單擊「運行」,在彈出的提示框中,選擇「是」按鈕

1)寫出將附錄中的「學院」表數據導入到「項目管理」資料庫中的步驟。(通過文本文件方式)

(1)選擇Word表復制,打開記事本,粘貼,然後命名為「學院」存儲

(2)進入Access,打開剛創建的Access文件,選擇「外部數據」選項卡「導入並鏈接」組下「文本文件」按鈕單擊,打開「獲取外部數據-文本文件」對話框。

(3)在該對話框中,單擊「指定數據源」後面的「瀏覽」命令按鈕,彈出「打開」對話框,找到要導入的文本文件「學院.txt」,單擊「打開」按鈕。

(4)回到「獲取外部數據-文本文件」對話框中,再選擇「指定數據在當前資料庫中的存儲方式和存儲位置」下面的「將源數據導入當前資料庫的新表中」單選項。

(5)單擊「確定」按鈕,打開「導入文本向導」對話框。在此對話框中,選擇單選按鈕中的「固定寬度-欄位之間使用空格使所有欄位在列內對齊」。

(6)單擊「下一步」按鈕,打開下一個「導入文本向導」對話框。在此對話框中設置分隔線,利用滑鼠調整、移動、刪除欄位之間的分隔線。

(7)單擊「下一步」按鈕,彈出第三個導入向導對話框。在此對話框中對每個欄位設計欄位名稱、數據類型、有無索引、以及哪些欄位不導入。

(8)單擊「下一步」按鈕,彈出第四個導入向導對話框,在此對話框中選擇「主鍵」。然後單擊「下一步」按鈕。彈出第五個導入向導對話框,在此對話框中設置導入後的表名。

(9)單擊「完成」命令按鈕。這時Access資料庫中就產生一個導入的表。

(2)寫出將附錄中「專業」表數據導入到「項目管理」資料庫中的步驟。(通過Excel文件)

(1)選擇Word表復制,啟動Excel,粘貼,然後命名為「專業」存儲。

(2)在Access中單擊「外部數據」選項卡下「導入並鏈接」組中的「Excel」按鈕,彈出「獲取外部數據-Excel電子表格」對話框,單擊「瀏覽」按鈕,指出文件「專業.xlsx」的完整存放路徑,然後選中「將源數據導入當前資料庫的新表中」。

(3)單擊「確定」按鈕,彈出「導入數據表向導」,選中「第一行包含列標題」。

(4)單擊「下一步」按鈕,可對每個欄位的數據類型以及索引進行需要的設置。

(5)單擊「下一步」按鈕,可對表的主鍵進行設置。這里選擇「我自己選擇主鍵」,並設置為「專業編號」。

(6)單擊「下一步」按鈕,在「導入到表」的文本框中輸入「專業,再單擊「完成」按鈕即可。

2.導出操作

將「學院」和「專業」聯接為一個表的查詢,然後導出到Excel中。

寫出操作的主要過程。

① 將Access切換到sql視圖,輸入命令Select * from 學院 inner join 專業 on 學院.學院編號=專業.學院編號,將「學院」與「專業」鏈接為一個表

② 點擊「保存」,命名為「查詢1」

③ 在「外部數據」選項卡下,點擊「導出」一欄的Excel文件,選擇文件保存路徑,點擊「確定」

2. SQL資料庫中用LEFT() 和right()函數完成將字元串「學院」反轉輸出的語句怎麼寫

1、語法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)
LEFT、RIGHT函數返回ARG最左邊、右邊的LENGTH個字元;

2、sql:

selectright('學院',1)+left('學院',1)

3、效果:

3. 如何區分和理解資料庫中的範式 比如1nf、2nf、3nf、bcnf、4nf、5nf

非三言二語說得清的.,第一範式(1NF)無重復的列
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。簡而言之,第一範式就是無重復的列。 說明:在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
第二範式(2NF)屬性
完全依賴於主鍵[消除非主屬性對主碼的部分函數依賴] 第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。例如員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個唯一屬性列被稱為主關鍵字或主鍵、主碼。 第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。簡而言之,第二範式就是屬性完全依賴於主鍵。
第三範式(3NF)屬性
不依賴於其它非主屬性[消除傳遞依賴] 滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。
編輯本段範式應用實例剖析
下面以一個學校的學生系統為例分析說明,這幾個範式的應用。首先第一範式(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字元型、邏輯型、日期型等。在當前的任何關系資料庫管理系統(DBMS)中,傻瓜也不可能做出不符合第一範式的資料庫,因為這些DBMS不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的DBMS中設計出不符合第一範式的資料庫都是不可能的。 首先我們確定一下要設計的內容包括那些。學號、學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話等信息。為了簡單我們暫時只考慮這些欄位信息。我們對於這些信息,說關心的問題有如下幾個方面。 學生有那些基本信息 學生選了那些課,成績是什麼 每個課的學分是多少 學生屬於那個系,系的基本信息是什麼。
第二範式(2NF)實例分析
首先我們考慮,把所有這些信息放到一個表中(學號,學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話)下面存在如下的依賴關系。 問題分析 因此不滿足第二範式的要求,會產生如下問題 數據冗餘: 同一門課程由n個學生選修,"學分"就重復n-1次;同一個學生選修了m門課程,姓名和年齡就重復了m-1次。 更新異常: 1)若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。 2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。 刪除異常 : 假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。 解決方案 把選課關系表SelectCourse改為如下三個表: 學生:Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話); 課程:Course(課程名稱, 學分); 選課關系:SelectCourse(學號, 課程名稱, 成績)。
第三範式(3NF)實例分析
接著看上面的學生表Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系: (學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話) 但是還存在下面的決定關系 (學號) → (所在學院)→(學院地點, 學院電話) 即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函數依賴。 它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況。 (數據的更新,刪除異常這里就不分析了,可以參照2.1.1進行分析) 根據第三範式把學生關系表分為如下兩個表就可以滿足第三範式了: 學生:(學號, 姓名, 年齡, 性別,系別); 系別:(系別, 系辦地址、系辦電話)。
總結
上面的資料庫表就是符合I,II,III範式的,消除了數據冗餘、更新異常、插入異常和刪除異常。

4. 資料庫中查詢學校里有那些系用什麼命令

這個資料庫類型緊密相關的

資料庫大多有自己的系統表來存放這些元數據
舉個sqlserver的例子

select object_name(c.id) as 表名
,c.name as 欄位名
,t.name 數據類型
,c.length 長度

,c.prec as 精度
,p.value as 欄位說明
,m.text as 默認值
,case when c.status=0x80 then 1 else 0 end 標識
,c.iscomputed 是否已計算該列的標志
,c.isnullable 是否允許空值
,c.isoutparam 是否輸出參數
from syscolumns c
inner join systypes t on c.xusertype=t.xusertype
left join sysproperties p on c.id=p.id and c.colid = p.smallid
left join syscomments m on c.cdefault=m.id
where objectproperty(c.id,'IsUserTable')=1 and object_name(c.id)='dat_deptinfo'

5. 資料庫查詢,通過學院查詢選課的課程

登陸學校教務處系統,輸入賬號密碼進入學生系統。打開選課頁面就能查詢是否選課成功。
大學選課制,也稱課程選修制,即允許學生對學校所開設的課程有一定的選擇自由,包括選擇課程、任課教師和上課時間,選擇適合自己的學習量和學習進程。
大學的課程按大類來說一般分為必修課和選修課。必修一般指學校或院系規定學生必須修習某課程,學校對必修課程一般有統一的要求和安排。選修是指根據學生個人興趣或專業需要自由選擇修習某課程。簡言之,必修就是必須修讀,選修就是選擇性修讀。一般來說,基礎性的知識都作為必修課程。有些知識不是基礎性的,與興趣和研究方向有關,這部分知識可以選擇。這是大學與中學最大的不同之處。

6. 資料庫SQL語句中如何運用語法表達問題

CREATETABLE學院表
(
movarchar(255)PRIMARYKEY,
namevarchar(255),
masterNamevarchar(255),
telvarchar(255),
addressvarchar(255)
)依次類推

7. 資料庫基礎知識

1)
select b.name from book as a ,student as b where a.title like '資料庫原

理';
2)
select a.sid form student as a, lend as b,return as c where (b.sid =

a.sid or c.sid = a.sid )and ldate = rdate;
3)
select distinct (t.title)書名,(select(max(a.price) from book as a)價格

from book as t

8. 資料庫主庫與從庫

這其實是根據資料庫的三大範式設計範式(範式,資料庫設計範式,資料庫的設計範式)是符合某一種級別的關系模式的集合。構造資料庫必須遵循一定的規則。在關系資料庫中,這種規則就是範式。關系資料庫中的關系必須滿足一定的要求,即滿足不同的範式。目前關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、第四範式(4NF)、第五範式(5NF)和第六範式(6NF)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)就行了。下面我們舉例介紹第一範式(1NF)、第二範式(2NF)和第三範式(3NF)。
在創建一個資料庫的過程中,范化是將其轉化為一些表的過程,這種方法可以使從資料庫得到的結果更加明確。這樣可能使資料庫產生重復數據,從而導致創建多餘的表。范化是在識別資料庫中的數據元素、關系,以及定義所需的表和各表中的項目這些初始工作之後的一個細化的過程。
下面是范化的一個例子 Customer Item purchased Purchase price Thomas Shirt $40 Maria Tennis shoes $35 Evelyn Shirt $40 Pajaro Trousers $25
如果上面這個表用於保存物品的價格,而你想要刪除其中的一個顧客,這時你就必須同時刪除一個價格。范化就是要解決這個問題,你可以將這個表化為兩個表,一個用於存儲每個顧客和他所買物品的信息,另一個用於存儲每件產品和其價格的信息,這樣對其中一個表做添加或刪除操作就不會影響另一個表。關系資料庫的幾種設計範式介紹1 第一範式(1NF)

在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。例如,對於圖3-2 中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一範式就是無重復的列。2 第二範式(2NF)

第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是非主屬性非部分依賴於主關鍵字。3 第三範式(3NF)

滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在圖3-2的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。

資料庫設計三大範式應用實例剖析

資料庫的設計範式是資料庫設計所需要滿足的規范,滿足這些規范的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的編程人員製造麻煩,而且面目可憎,可能存儲了大量不需要的冗餘信息。
設計範式是不是很難懂呢?非也,大學教材上給我們一堆數學公式我們當然看不懂,也記不住。所以我們很多人就根本不按照範式來設計資料庫。
實質上,設計範式用很形象、很簡潔的話語就能說清楚,道明白。本文將對範式進行通俗地說明,並以筆者曾經設計的一個簡單論壇的資料庫為例來講解怎樣將這些範式應用於實際工程。範式說明

第一範式(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字元型、邏輯型、日期型等。

例如,如下的資料庫表是符合第一範式的: 欄位1 欄位2 欄位3 欄位4 而這樣的資料庫表是不符合第一範式的: 欄位1 欄位2 欄位3 欄位4
欄位3.1 欄位3.2 很顯然,在當前的任何關系資料庫管理系統(DBMS)中,傻瓜也不可能做出不符合第一範式的資料庫,因為這些DBMS不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的DBMS中設計出不符合第一範式的資料庫都是不可能的。

第二範式(2NF):資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。 假定選課關系表為SelectCourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關系:
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)

這個資料庫表不滿足第二範式,因為存在如下決定關系:
(課程名稱) → (學分)
(學號) → (姓名, 年齡)
即存在組合關鍵字中的欄位決定非關鍵字的情況。

由於不符合2NF,這個選課關系表會存在如下問題:
(1) 數據冗餘:
同一門課程由n個學生選修,"學分"就重復n-1次;同一個學生選修了m門課程,姓名和年齡就重復了m-1次。
(2) 更新異常:
若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
(3) 插入異常:
假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。
(4) 刪除異常:
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。

把選課關系表SelectCourse改為如下三個表:
學生:Student(學號, 姓名, 年齡);
課程:Course(課程名稱, 學分);
選課關系:SelectCourse(學號, 課程名稱, 成績)。

這樣的資料庫表是符合第二範式的, 消除了數據冗餘、更新異常、插入異常和刪除異常。
另外,所有單關鍵字的資料庫表都符合第二範式,因為不可能存在組合關鍵字。 第三範式(3NF):在第二範式的基礎上,數據表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系,則C傳遞函數依賴於A。因此,滿足第三範式的資料庫表應該不存在如下依賴關系:
關鍵欄位 → 非關鍵欄位x → 非關鍵欄位y

假定學生關系表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系:
(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話)

這個資料庫是符合2NF的,但是不符合3NF,因為存在如下決定關系:
(學號) → (所在學院) → (學院地點, 學院電話)
即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函數依賴。

它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。
把學生關系表分為如下兩個表:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 地點, 電話)。 這樣的資料庫表是符合第三範式的,消除了數據冗餘、更新異常、插入異常和刪除異常。
鮑依斯-科得範式(BCNF):在第三範式的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。

假設倉庫管理關系表為StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個資料庫表中存在如下決定關系:
(倉庫ID, 存儲物品ID) →(管理員ID, 數量)
(管理員ID, 存儲物品ID) → (倉庫ID, 數量)
所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵欄位為數量,它是符合第三範式的。但是,由於存在如下決定關系:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即存在關鍵欄位決定關鍵欄位的情況,所以其不符合BCNF範式。它會出現如下異常情況:
(1) 刪除異常:
當倉庫被清空後,所有"存儲物品ID"和"數量"信息被刪除的同時,"倉庫ID"和"管理員ID"信息也被刪除了。
(2) 插入異常:
當倉庫沒有存儲任何物品時,無法給倉庫分配管理員。
(3) 更新異常:
如果倉庫換了管理員,則表中所有行的管理員ID都要修改。

把倉庫管理關系表分解為二個關系表:
倉庫管理:StorehouseManage(倉庫ID, 管理員ID);
倉庫:Storehouse(倉庫ID, 存儲物品ID, 數量)。
這樣的資料庫表是符合BCNF範式的,消除了刪除異常、插入異常和更新異常。

範式應用

我們來逐步搞定一個論壇的資料庫,有如下信息:
(1)用戶:用戶名,email,主頁,電話,聯系地址
(2)帖子:發帖標題,發帖內容,回復標題,回復內容

第一次我們將資料庫設計為僅僅存在表:
用戶名 email 主頁電話 聯系地址 發帖標題 發帖內容 回復標題 回復內容
這個資料庫表符合第一範式,但是沒有任何一組候選關鍵字能決定資料庫表的整行,唯一的關鍵欄位用戶名也不能完全決定整個元組。我們需要增加"發帖ID"、"回復ID"欄位,即將表修改為:
用戶名 email 主頁電話 聯系地址 發帖ID 發帖標題 發帖內容 回復ID 回復標題 回復內容
這樣數據表中的關鍵字(用戶名,發帖ID,回復ID)能決定整行:
(用戶名,發帖ID,回復ID) → (email,主頁,電話,聯系地址,發帖標題,發帖內容,回復標題,回復內容)
但是,這樣的設計不符合第二範式,因為存在如下決定關系:
(用戶名) → (email,主頁,電話,聯系地址)
(發帖ID) → (發帖標題,發帖內容)
(回復ID) → (回復標題,回復內容)
即非關鍵欄位部分函數依賴於候選關鍵欄位,很明顯,這個設計會導致大量的數據冗餘和操作異常。

我們將資料庫表分解為(帶下劃線的為關鍵字):
(1) 用戶信息:用戶名,email,主頁,電話,聯系地址
(2) 帖子信息:發帖ID,標題,內容
(3) 回復信息:回復ID,標題,內容
(4) 發貼:用戶名,發帖ID
(5) 回復:發帖ID,回復ID

這樣的設計是滿足第1、2、3範式和BCNF範式要求的,但是這樣的設計是不是最好的呢?
不一定。

觀察可知,第4項"發帖"中的"用戶名"和"發帖ID"之間是1:N的關系,因此我們可以把"發帖"合並到第2項的"帖子信息"中;第5項"回復"中的"發帖ID"和"回復ID"之間也是1:N的關系,因此我們可以把"回復"合並到第3項的"回復信息"中。這樣可以一定量地減少數據冗餘,新的設計為:
(1) 用戶信息:用戶名,email,主頁,電話,聯系地址
(2) 帖子信息:用戶名,發帖ID,標題,內容
(3) 回復信息:發帖ID,回復ID,標題,內容

資料庫表1顯然滿足所有範式的要求;

資料庫表2中存在非關鍵字「標題」、「內容」對關鍵欄位「發帖ID」的部分函數依賴,即不滿足第二範式的要求,但是這一設計並不會導致數據冗餘和操作異常;

資料庫表3中也存在非關鍵欄位"標題"、"內容"對關鍵欄位"回復ID"的部分函數依賴,也不滿足第二範式的要求,但是與資料庫表2相似,這一設計也不會導致數據冗餘和操作異常。

由此可以看出,並不一定要強行滿足範式的要求,對於1:N關系,當1的一邊合並到N的那邊後,N的那邊就不再滿足第二範式了,但是這種設計反而比較好!

對於M:N的關系,不能將M一邊或N一邊合並到另一邊去,這樣會導致不符合範式要求,同時導致操作異常和數據冗餘。

對於1:1的關系,我們可以將左邊的1或者右邊的1合並到另一邊去,設計導致不符合範式要求,但是並不會導致操作異常和數據冗餘。

9. 資料庫中有兩張表,一張為學院表(學院ID,學院名稱),另一張為成績表(學號,姓名,分數,學院ID)。問題

select top 20 * from 成績表 where 學院ID in (select 學院ID from 學院表 where 學院名稱='計算機學院') order by 分數 desc

或是這樣寫

select top 20 成績表.* from 成績表,學院表 where 成績表.學院ID=學院表.學院ID and 學院表.學院名稱='計算機學院' order by 分數 desc

10. 在資料庫「SS」中包含專業信息表和學院信息表,要求設計資料庫並實現:(1)按學院名稱查詢該學院所有專

select ZYMC,ZYID,ZYBZ --專業表什麼列就自己寫出來
from XYB innet join ZYXXB on XYB.XYID = ZYXXB.XYID
WHERE XYB.XYMC = '網路大學'

--XYB學院表,ZYXXB專業信息表,XYMC學院名稱
--都是漢語拼音,

熱點內容
編程兒歌 發布:2024-10-06 14:03:32 瀏覽:635
所有程序都能反編譯嗎 發布:2024-10-06 13:48:39 瀏覽:605
城際快車源碼 發布:2024-10-06 13:28:10 瀏覽:132
什麼配置主機直播好 發布:2024-10-06 13:22:11 瀏覽:906
office緩存 發布:2024-10-06 13:20:03 瀏覽:540
我的世界國際版比較熱門的伺服器 發布:2024-10-06 13:04:10 瀏覽:534
8g緩存還剩多少怎麼看 發布:2024-10-06 12:59:52 瀏覽:232
物流公司怎麼配置電子面單 發布:2024-10-06 12:54:12 瀏覽:805
魔域歸來手游掛機腳本 發布:2024-10-06 12:42:54 瀏覽:352
福建伺服器雲空間 發布:2024-10-06 12:42:42 瀏覽:103