資料庫如何設計表

2021-10-23 11:47:52 字數 1751 閱讀 4333

閒來無事,總結一下資料庫各種關聯**的優缺點

一對一ø 一對一是將資料表「垂直切分」,其實是不常見,或不常用的。也就是 a 表的一條記錄對應 b 表的一條記錄,為什麼要這樣的設計呢,不是增加了程度的複雜性嗎,然而並不一定,舉例說明:

乙個系統必然有 employee(員工表)(包含字段:employeeid、姓名、性別、年齡、**、位址等),每個員工都為乙個使用者,所以還有張 user 表(包含字段:userid(關聯 employeeid)、使用者名稱、密碼、角色等),這樣你會發現,集成為一張表是否不太妥當?因為,user 的記錄只會在登入時用到,感覺有點違背三大正規化中的「確保每列都和主鍵列直接關聯,而不是間接關聯」。

還有種情況,這就要根據具體的業務來決定了。如果,當一張表的字段過於太多,而很多字段可能只有在某些情況下,才會使用到,這時也可以考慮使用一對一設計。

ø 優點

便於管理、可提高一定的查詢速度

減輕 cpu 的 io 讀寫,提高訪問效率。

符合資料庫設計的三大正規化。

符合關係性資料庫的特性。

ø 缺點

增加一定的複雜程度,程式中的讀寫難度加大。

一對多ø 一對多,是最常見的一種設計。就是 a 表的一條記錄,對應 b 表的多條記錄,且 a 的主鍵作為 b 表的外來鍵。這主要看以哪張表為中心,以上示例以 a 表為中心,就是一對多,如果以 b 表為中心,則是多對一。舉幾個例子:

班級表 與 學生表,乙個班級對應多個學生,或者多個學生對應乙個班級。

角色表 與 使用者表,乙個角色對應多個使用者,或者多個使用者對應乙個角色。

商品表 與 表,乙個商品對應多張,或者多張對應乙個商品。

多對多ø 多對多,在資料庫中也比較常見,可以理解為是一對多和多對一的組合。要實現多對多,一般都需要有一張中間表(也叫關聯表),將兩張表進行關聯,形成多對多的形式。例如:

1.老師表、班級表、科目表,中間表為:課程表

1)   sql:

--教師表

create table #teacher(teacherid int, name nvarchar(20));

insert into #teacher values(1, '張老師'), (2, '王老師');

--班級表

create table #class(classid int, name nvarchar(20));

insert into #class values(1, '一班'), (2, '二班');

--課程表(關聯表)

create table #courses(coursesid int identity(1, 1), teacherid int, classid int, name nvarchar(20));

insert into #courses values(1, 1, '語文'), (1, 2, '語文');

insert into #courses values(2, 1, '數學'), (2, 2, '英語');

如何設計資料庫表?

背景 最近在準備軟體設計師的資格考試。首先表達一下我為什麼會去考這個證,主要有以下兩點 薪資待遇,求職。雖然很多人說該證書沒有用。但是有一些大廠會直接給你加薪的。我記得hk中級資格證書,每個月1000的補貼。高階資格證書是1500的補貼。並且在簡歷中,你有這個證書,hr對你的認可也會深刻。在福利面前...

資料庫表設計

在軟體的開發中,資料庫表的設計是十分基礎和重要的工作。資料庫表是軟體具體實現的基石,如果表設計的不合規範就會出現資料冗餘,跟業務脫節等問題,等出現問題後再做大的調整相應的依賴表的編碼測試等工作也會進行大的調整這樣就會造成極大的資源消耗。因此在專案一開始設計表的時候就要注意表設計的規範性問題。資料庫 ...

資料庫表設計

什麼是設計三正規化 1.1 設計表的依據 按照這個三正規化設計的表不會出現資料冗餘 三正規化都有哪些 第一正規化 任何一張表都有乙個主鍵,並且每乙個字段原子性不可以再分 例子不滿足第一正規化 學生標號 學生姓名 001jaden zjl 123.com,13029199039 002haoyue w...