我們想假設一個情況:我正在維護一個系統而裡頭有許多筆玩家的資料皆存在Players這張TABLE,而玩家的目的就是在收集優待券(存在Coupon這張TABLE),而一個玩家會有很多Coupons,相對地同一Coupon也會被許多玩家擁有,那麼該如何建立這種都對多關聯呢?
首先我運行的資料庫版本是 MySQL 5.5.36,以下SQL是用來建立上述問題的TABLE。
CREATE TABLE Players( p_id INT NOT NULL, p_name VARCHAR(20) NOT NULL, p_createDate TIMESTAMP NOT NULL, PRIMARY KEY(p_id) ); CREATE TABLE Coupons( c_id INT NOT NULL auto_increment, c_description TEXT NOT NULL, c_photoLink VARCHAR(25), PRIMARY KEY(c_id) ); CREATE TABLE PlayerOfCoupon( playerId INT NOT NULL REFERENCES Players (p_id) ON DELETE CASCADE, couponId INT NOT NULL REFERENCES Coupons (c_id) ON DELETE CASCADE );在PlayerOfCoupon的建立SQL裡,可以發現我們使用ON DELETE CASCADE,主要是因為假設當Players或Coupons裡的某一筆資料若被刪除,那麼PlayerOfCoupon裡有參考到這筆資料的部分也該被刪除。
而下面這段則是查詢的SQL,運用Inner Join去Join Players 跟 Coupons這兩張表格並取出想要的欄位資訊。
SELECT PlayerOfCoupon.*, Players.p_name AS playerName, Coupons.c_description AS CouponDesc FROM Players INNER JOIN (PlayerOfCoupon INNER JOIN Coupons ON PlayerOfCoupon.couponId = Coupons.c_id ) ON PlayerOfCoupon.playerId = Players.p_id
沒有留言:
張貼留言