Связь таблицы микроблогов с внешним ключом, проблемы с подписчиками? - PullRequest
0 голосов
/ 22 августа 2011

У меня небольшая проблема с мыслью о небольшой системе микроблогов, которую я делаю для упражнений. У меня есть три таблицы:

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;

1 Ответ

0 голосов
/ 22 августа 2011

Что-то в этом роде?

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) просто позволить людям следовать за собой, если они этого хотят. Я думаю, что большинство из них быстро устанут следовать за собой.

Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...