得到了一個項目,我工作的一個小型關係問題,我試着用搜索引擎的答案,但不知道用什麼詞彙來找到我的答案洛爾MySQL的關係圈
的要解決的問題:
用戶可以有許多照片,其中一張照片可以是個人資料照片,但只有一張。
因此,例如:
CREATE TABLE user (
ID Int NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(25) NOT NULL
);
CREATE TABLE photo (
ID Int NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_ID Int NOT NULL,
imgpath varchar(260) NOT NULL,
FOREIGN KEY (user_ID) REFERENCES user (ID) ON UPDATE CASCADE
);
CREATE table userprofphoto (
user_ID Int NOT NULL,
photo_ID Int NOT NULL,
FOREIGN KEY (photo_ID) REFERENCES photo (ID) ON UPDATE CASCADE,
FOREIGN KEY (user_ID) REFERENCES user (ID) ON UPDATE CASCADE
);
所以一個查詢來獲取用戶的個人資料照片將是:
SELECT imgpath FROM photo WHERE photo_ID=(SELECT photo_ID FROM userprofphoto WHERE user_ID=:userid LIMIT 1)
這工作,但它會創建一個關係圈。我應該/可以解決這個問題嗎?
我沒想到從userprofphoto
表中刪除了user_ID
,但隨後這將增加查詢長度:
SELECT imgpath FROM photo
LEFT JOIN userprofphoto ON userprofphoto.photo_ID=photo.ID
WHERE photo.user_ID=:user_id
讚賞任何幫助:d
你不必在你的設計中的任何環雖然。 –
它確實...因爲userprofphoto有FK user.ID和FK photo.ID,並且照片有FK user.ID –
這是2個路徑(從userprofphoto到user),而不是一個循環。 –