2011-08-22 33 views
0

我正在考慮一個小型的微博系統,我正在鍛鍊身體。我有三張桌子:與外鍵的微博表關係,追隨者的麻煩?

users 
    id 
    username 

tweets 
    id 
    tweet 

followers 
    id_user 
    id_following 

我如何爲追隨者建立關係? id_user和id_following都是與同一個表相關的PK?

這裏是我的查詢:

CREATE TABLE tweets (
    tweet_id INT NOT NULL AUTO_INCREMENT, 
    tweet VARCHAR(140) NOT NULL, 
    PRIMARY KEY (tweet_id) 
) ENGINE=INNODB; 


CREATE TABLE users (
    user_id INT NOT NULL AUTO_INCREMENT, 
    user VARCHAR(255) NOT NULL, 
    password VARCHAR(40) NOT NULL, 
    email VARCHAR(255) NOT NULL, 
    PRIMARY KEY (user_id) 
) ENGINE=INNODB; 

CREATE TABLE user_tweets (
    id INT NOT NULL AUTO_INCREMENT, 
    id_user INT NOT NULL, 
    id_tweet INT NOT NULL, 
    PRIMARY KEY(id), 
    FOREIGN KEY (id_tweet) 
    REFERENCES tweets(tweeth_id) 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    FOREIGN KEY (id_user) 
    REFERENCES users(user_id)) ENGINE=INNODB; 

CREATE TABLE followers (
    id_user INT NOT NULL REFERENCES users (user_id), 
    id_following INT NOT NULL REFERENCES users (user_id), 
    PRIMARY KEY (id_user, id_following) 
) ENGINE=INNODB; 
+0

肯定的PK是(id_user,id_following),他們是單獨FKS到同一個表?你有什麼問題? – StevieG

+0

在同一個表中有兩個FK在另一個表中是PK是完全正確的。
Andrey

+0

請檢查我的sql更新 – OralB

回答

0

東西沿着這些路線?

create table followers (
    id_user integer not null references users (id), 
    id_following integer not null references users (id), 
    primary key (id_user, id_following) 
); 

如果MySQL支持CHECK約束,那麼您也應該使用CHECK (id_user <> id_following)。但事實並非如此。你必須使用觸發器,但它更簡單(對於Twitter克隆來說可能不是問題),只要讓人們按照自己的意願去追隨自己。我認爲他們中的大多數人很快就會厭倦追隨自己。

The CHECK clause is parsed but ignored by all storage engines.

+0

檢查我的查詢更新的帖子! – OralB