在之前我們了解了模型的建立,模型是代表資料庫中表的抽象,而在資料庫庫的表中,我們可以給表設定關聯,所以我們也可以通過模型完成這些關聯的建立。
在資料庫中標準關聯關係有:一對
一、一對多、多對多。而sequelize模組都可以實現,sequelize模組提供了四種關聯型別,將他們組合在一起可以建立關聯:
hasone 關聯型別:a.hasone(b) 關聯意味著 a 和 b 之間存在一對一的關係,外來鍵在目標模型(b)中定義.
belongsto 關聯型別:a.belongsto(b)關聯意味著 a 和 b 之間存在一對一的關係,外來鍵在源模型中定義(a).
hasmany 關聯型別:a.hasmany(b) 關聯意味著 a 和 b 之間存在一對多關係,外來鍵在目標模型(b)中定義.
belongstomany 關聯型別:a.belongstomany(b, ) 關聯意味著將表 c 用作聯結表,在 a 和 b 之間存在多對多關係
綜合對關聯型別的定義,可以得出:
建立乙個 一對一 關係, hasone 和 belongsto 關聯一起使用;
建立乙個 一對多 關係, hasmany he belongsto 關聯一起使用;
建立乙個 多對多 關係, 兩個 belongstomany 呼叫一起使用
在建立一對一關係時,我們必須通過hasone 和 belongsto 關聯一起使用。 hasone 在 目標模型中插入關聯鍵, belongsto 在 源模型中插入關聯鍵。(引數被稱為目標模型,呼叫關聯的為源模型)。下列為建立一對一關係的方式:
外鍵名預設為表名+主鍵名
const player =
this
.sequelize.
define
('player',)
;const team =
this
.sequelize.
define
('team',)
;player.
belongsto
(team)
;// 將向 player 新增乙個 teamid 屬性以儲存 team 的主鍵值
team.
hasone
(player)
;// 將向 player 新增乙個 teamid 屬性以儲存 team 的主鍵值
player.belongsto(team);
和team.hasone(player);
,所表達的意思是一樣的。在建立一對一關係中必須同時使用 hasone 和 belongsto 進行設定。
在建立過程中可以給關聯傳遞引數,ondelete和onupdate分別表示刪除時、修改時執行什麼操作,預設為set null
和cascade
,可選引數為restrict
,cascade
,no action
,set default
和set null
player.
belongsto
(team,);
team.
hasone
(player)
;
在建立一對多關係時,我們必須通過hasmany 和 belongsto 關聯一起使用。
const player =
this
.sequelize.
define
('player',)
;const team =
this
.sequelize.
define
('team',)
;player .
hasmany
(team )
;team .
belongsto
(player )
;
必須同時使用 hasmany 和 belongsto 來建立一對多關係。引數部分同一對一關係所示。
在建立一對多關係時,我們必須通過兩個 belongstomany 關聯一起使用。
const movie = sequelize.
define
('movie',)
;const actor = sequelize.
define
('actor',)
;movie.
belongstomany
(actor,);
actor.
belongstomany
(movie,
);
這將建立乙個名為 actormovies的新模型,具有等效的外來鍵 movieid 和actorid。
在上面所以例項中,sequelize 自動定義了外來鍵名稱。有三種方法可以為外來鍵指定不同的名稱:
通過直接提供外來鍵名稱
通過定義別名
通過兩個方法同時進行
預設設定
在不指定任何值的時候,外來鍵名稱就是主鍵表表名+主鍵名,也可以通過通過給模型新增underscored: true
配置項,則外來鍵名稱就是主鍵表表名_主鍵名。
const user =
this
.sequelize.
define
('user',,
)const company =
this
.sequelize.
define
('company',}
);user.
belongsto
(company)
;// 將 company_uuid 新增到 user
直接提供外鍵名
通過 foreignkey 直接提供外鍵名,如下所示:
const user =
this
.sequelize.
define
('user',)
const company =
this
.sequelize.
define
('company',)
;user.
belongsto
(company,);
// 將 bossid新增到 user
定義別名
通過as
定義別名,外來鍵名稱就是別名+主鍵名。
const user =
this
.sequelize.
define
('user',)
const company =
this
.sequelize.
define
('company',)
;user.
belongsto
(company,);
// 將 leaderid新增到 user
兩者都做
我們可以定義別名,也可以直接定義外來鍵,但是這種情況下就以直接定義外來鍵為主。
Sequelize模組運算元據庫之預先載入
在之前我們了解了 sequelize 模組的一部分內容,那麼這篇內容我們去了解一下 sequelize 的 剩餘的部分。在查詢資料的時候我們使用了findall 方法,除了這種方式,還可以使用findone findorcreate和findandcountall等方法。findone 查詢單項 這...
pymysql模組運算元據庫
pymysql模組是python運算元據庫的乙個模組 connect 建立資料庫鏈結,引數是連線資料庫需要的連線引數 使用方式 模組名稱.connect 引數 host 資料庫ip port 資料庫埠 user 資料庫使用者名稱 passwd 資料庫密碼 db 資料庫名稱 charset 資料庫編碼...
DBI模組運算元據庫示例
perl中乙個很重要的模組就是dbi模組 perl database inte ce,資料庫介面 dbi模組為很多不同的資料庫提供了乙個統一的介面。perl通過此介面可以很容易對資料庫進行操作。結構圖如下 下面說下perl如何對mysql資料庫進行操作。1.首先要確保perl及mysql資料庫已經安...