1

壁紙共有ギャラリーを作成しようとしていますが、訪問者が壁紙と記事の両方にコメントを投稿できるようにしたいと考えています。

次のテーブルがあるとしましょう:

Wallpaper
- id
- name
- etc...

Article
- id
- title
- etc...

Comment
- id
- text

ユニークな壁紙またはユニークな記事のいずれかにコメントを関連付けたい.

私はこのような継承を行うことを考えました:

Commentable
- id

Article
- id references Commentable.id
- etc...

Wallpaper
- id references Commentable.id
- etc...

Comment
- id
- commented references commentable.id

しかし、この方法は重く見え、あまり良くありません。

私も作ることを考えました:

Wallpaper
- id
- name
- etc...

Article
- id
- title
- etc...

Comment
- id
- commented references either Wallpaper.id or Article.id

しかし、関連するものが壁紙なのか記事なのかを知る方法はありません。

また、5.1 MySQL を使用する無料の Web ホスト サービスにこれをアップロードするため、InnoDB ではなく MyISAM を使用したいと考えています。

これを行う明確な方法を知っていますか?前もって感謝します。

編集:あなたの答えに感謝します。

4

3 に答える 3

3

2 つのオプション:

オプション 1

Wallpaper
- id
- name

Article
- id
- title

Comment
- id
- wallpaper_id <== FK
- article_id   <== FK

長所: 参照整合性
短所: スキーマを変更して、追加のエンティティ タイプについてコメントする必要があります

オプション 2

Wallpaper
- id
- name

Article
- id
- title

Comment
- id
- entity_id <== either a wallpaper id or article id
- entity_type <== one of 'wallpaper' or 'article' (use lookup table if you wish)

長所: 追加のエンティティ タイプにコメントするためにスキーマを変更する必要がない
短所: 参照整合性がない (ただし、トリガーを介して強制することはできます)

于 2012-09-11T19:38:32.867 に答える
1

タイプという名前のコメント テーブルにフィールドを追加して、それを Tinyint にするのと同じくらい簡単なことに行きます。次に、コメントを保存するときに、それを 0 にするか 1 にするか、どちらがどのタイプか、つまり 0 が記事の壁紙かどうかを選択します。

于 2012-09-11T19:37:36.177 に答える
1

I would recommend adding a type field to your Comment table. You could populate it with a string like 'ARTICLE' or 'WALLPAPER', or create a ref table. Something like:

Type_Ref
- id
- desc

Type_Ref would contain the auto incremented primary key, and a description of Wallpaper or Article.

Then in your comment table, you would just have a Type_Ref_Id field, with the corresponding id. Then, whenever you need to add a new Type to vote on, you can simply add an entry to the ref table.

于 2012-09-11T19:39:47.683 に答える