0

私の現在のデータベースは、次のテーブルで構成されています。

与えられた質問のユーザー評価を保存する -

user( uid(varchar), qid(varchar), rating(varchar), primary key(uid, qid) )

質問とその ID を保存します -

questions( uid(varchar), question(text), primary key(qid) )

質問同士の関係を保存する -

related( qid(varchar), related_qid(varchar), relation(varchar), primary key(qid, related_qid, relation) )

各質問は、少なくとも 1 つの他の質問に関連しています。たとえば、質問 1 と質問 2 は、質問 1 の平均評価が質問 2 の評価よりも高いと予想されるという点で関連している可能性があります。この関係は、「関連」テーブルに次のように格納されます。

INSERT INTO related (qid, related_qid, relationship) VALUES (1, 2, gt)
ここで、「gt」は「より大きい」を意味します。

問題は、関係のエンコードがまったくエレガントに見えないことです。誰かがより良い解決策を持っていますか?

4

1 に答える 1

1

列のタイプを変更します。高速結合の整数として最適であり、データベースで使用可能な場合は列挙型qidに変更できます(たとえば、MySQL にはENUMがあります)。related_qidrelated

PS: テーブルを使用して可能な値を格納し、このテーブルに外部キー制約を設定することにより、列挙型を持たないデータベースで列挙をシミュレートすることもできます。

また、ユーザー テーブルに 2 列の主キーがある理由もわかりません。単一の列で十分だと思いますが、アプリケーションについて詳しく知らなければ、それを確認するのは困難です。

これらの点を除けば、妥当な設計に思えます。

于 2011-01-08T01:18:03.747 に答える