2017-01-27 13 views
1

私は3つのテーブル、アップボート、コメント、投稿を持っています。コメントや投稿の両方がここにupvotedすることができますので、私は現在使用しているものです:複数のテーブルに外部キー参照を格納する最適な方法は何ですか?

CREATE TABLE upvotes(
    id PRIMARY KEY, 
    post_id INTEGER REFERENCES posts(id), 
    comment_id INTEGER REFERENCES comments(id), 
    user_id INTEGER REFERENCES users(id), 
    time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
) 

CREATE TABLE comments(
     id PRIMARY KEY, 
     body TEXT, 
     user_id INTEGER REFERENCES users(id), 
     time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
    ) 

CREATE TABLE posts(
    id PRIMARY KEY, 
    title TEXT, 
    body TEXT, 
    user_id INTEGER REFERENCES users(id), 
    time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
) 

すると、私はもっとエレガントからそれを参照することができビューまたはテーブルのいくつかの並べ替えで一緒に投稿とコメントの両方を表現するいくつかの方法がありますアップノート

CREATE TABLE upvotes(
    id PRIMARY KEY, 
    item_id INTEGER REFERENCES items(id), /*this could be a post or a comment*/ 
    user_id INTEGER REFERENCES users(id), 
    time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
) 

これを可能にする表またはビューアイテムを作成する方法はありますか?投稿とコメントに同じプライマリキーがある可能性があるため、すべてが独自の一次キーIDを持つようにアップウィートすることができるアイテムのセットをグループ化する方がいいですか?申し訳ありませんが、これが明白な質問である場合は、私が検索しているときにこれをどのようにフレーズして、重複する可能性があるかわかりませんでした。このような

+0

あなたの質問に正確に従っているかどうかわかりません。異なるテーブルのスキーマを提供して、関係が何であるかを確認できますか? – mba12

+1

基本的には、投稿とコメントをグループ化して、投稿やコメントを識別できる一意のIDを持つことができるようにしたいと思います。今、私の問題は、投稿とコメントにはそれぞれ別のプライマリキーがあることです。そのIDがあれば投稿やコメントかどうかわかりません。元の投稿を編集して投稿とコメント用のスキーマを追加しました。 – user1023465

+0

単一の主キーを持つ「UserInput」という表を1つ作成し、その行項目を投稿またはコメントとしてコード化する第2の識別子列を使用できますか?この表の他の列は、上記の2つの表の列の和集合です。それは最も効率的な解決策ではありませんが、あなたの問題を解決します。 – mba12

答えて

0

何か:

CREATE TABLE comments(
     id PRIMARY KEY, 
     body TEXT, 
     user_id INTEGER REFERENCES users(id), 
     time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
    ) 

CREATE TABLE posts(
    id PRIMARY KEY, 
    title TEXT, 
    body TEXT, 
    user_id INTEGER REFERENCES users(id), 
    time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
) 

代わりに使用します。

CREATE TABLE user_input(
    id PRIMARY KEY, 
    inputType smallint, 
    title TEXT, 
    body TEXT, 
    user_id INTEGER REFERENCES users(id), 
    time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() 
) 

とID、inputTypeのためのインデックスを追加します。

関連する問題