1

投稿とコメントの 2 つのテーブルがあります。

create table posts
(
    id integer not null primary key auto_increment,
    body text not null
);

create table comments
(
    id integer not null primary key auto_increment,
    body text not null,
    post_id integer not null references posts(id)
);

ここで、レポート (「悪い投稿」フラグ) というテーブルをもう 1 つ作成し、投稿とコメントの両方のレポートを保存したいと考えています。

create table reports
(
    id integer not null primary key auto_increment,
    obj_type tinyint not null, /* '1' for posts and '2' for comments */
    obj_id integer not null,
    body text not null
);

alter table reports add foreign key(obj_id) references posts(id) on delete cascade;
alter table reports add foreign key(obj_id) references comments(id) on delete cascade;

ご覧のとおり、1 つのフィールドに 2 つの参照があり (obj_id で区別しています)、質問は、このようにしても大丈夫ですか?

そうでない場合、より良い解決策は何ですか?

前もって感謝します。

4

2 に答える 2

1

直感的には、それは正しい方法ではないと感じています。MySQLも混乱すると思います。制約が満たされていることをどのように検証しますか。それは最初に試すのでしょうpostsか、それともcomments最初に...多分両方を試すのでしょうか?

個人的には、2つのリンクテーブルを作成することを選択します。

  • comments <-> reports
  • posts <-> reports

obj_idそうすれば、適切に曖昧さを解消できます。

于 2012-05-24T12:40:06.597 に答える
0

コメントテーブルはすでに投稿テーブルを参照しているため、コメントテーブルを参照する必要があります。このようにして、レポートを取得するたびに、コメントへのキーと投稿へのキーがあります。

于 2012-05-24T12:40:10.110 に答える