2011-08-22 34 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