0

基本的に、投稿とコンテナー (投稿の配列) の 2 種類の要素を格納する必要がある Web アプリを設計しています。

コンテナーの各行に、コンテナーが保持する投稿の配列の文字列化されたバージョンを格納するように、データベースを作成しました。

問題は、コンテナを呼び出すたびに投稿が削除されると、投稿のIDがあり、投稿が有効かどうかを確認する必要があることです。

これを行うより良い方法はありますか?たとえば、実際の投稿への「ポインター」を保持するようにコンテナー テーブルを構造化しますか?

どうもありがとう!

4

5 に答える 5

2

2つのテーブル間で外部キー関係を使用するのが理想的です。

まず、あなたのデータ間の関係を正しく理解していれば、あなたContainerのテーブルは一意のIDに関連する情報を保持するテーブルになります。`Postsテーブルには、独自の一意のID、containerId、および投稿コンテンツ自体があります。

引き出してみると、少しこんな感じになります。

Container
---
id

Posts
---
id | containerId | post

との間の関係は1対多ContainerであるとPosts推定されます; つまり、1つのコンテナに多くの投稿が含まれる場合がありますが、1つの投稿が多くのコンテナに属することはできません。この関係が必要な場合は、そのために別の列を追加する必要があります。Posts

于 2012-11-12T17:06:52.153 に答える
2

私の理解が正しければ、1 対多の関係があります。各コンテナーには多くの投稿を含めることができますが、各投稿は 1 つのコンテナーに関連付けられています。したがって、データベースの設計はこれを反映する必要があります。

例:

create table tbl_containers (
    containerId int unsigned not null auto_increment primary key,
    containerDescription varchar(100)
);
create table tbl_posts (
    postId int unsigned not null auto_increment primary key,
    containerId int unsigned not null,
    postText varchar(100),
    index idxContInd(containerId)
);

データを入力するときは、すべての投稿をコンテナに関連付ける必要があります。つまり、投稿を入力する前に、それを保持するコンテナーが必要であり、「適切な」コンテナーがない場合は、投稿を作成する前に作成する必要があります。

データがテーブルに格納された後は、各投稿が属するコンテナーに関係なく、簡単に投稿を探して削除できます。

これがお役に立てば幸いです

于 2012-11-12T17:05:11.680 に答える
1

ここに、いくつかの肯定的なフィードバックを受け取った私のコメントを裏付ける答えがあります:)あなたはすでにそこに答えを持っていますが.

コンテナはポストを保持します。つまり、1 つのバスケットに多くのアイテムが入っているようなものです。したがって、投稿ごとにコンテナ ID があります。コンテナ テーブルの場合 - コンテナ ID が主キーです。posts テーブル - 投稿 ID が主キーです。外部キー関係を持たせるには、コンテナー ID を posts テーブルの外部キーとして設定します。これがわかりにくい場合は、以下のテーブル スキーマを参照してください。コンテナが削除されたときにコンテナに関連する投稿を削除したい場合は、親キー (外部キー) で使用ON CASCADE DELETEして、孤立したもの (親のない子) を削除できます。ID を自動インクリメントしたい場合は、それ以外のAUTO_INCREMENT場合は削除するだけで使用できます。

さらに理解を深めるために、 SQL構文もご覧ください。

CREATE TABLE tblParent (
    `CID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `field2` varchar(100),
    `field3` varchar(100)
);

CREATE TABLE tblchild (
    `PID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `PCID` int NOT NULL,
    `field2` varchar(100),
    `field3` varchar(100),
    FOREIGN KEY REFERENCE tblParent ('CID')
    ON DELETE CASCADE
);
于 2012-11-12T17:36:03.847 に答える
0

私があなたを正しく理解しているかどうかはわかりませんが、これを逆に行うとします。container_ID というフィールドを持つ POST テーブルがあります。投稿が削除されると、POST テーブルの行が削除されます (container_ID の親エンティティへのポインターを含む)。この場合、データベース内でデータの一貫性と関係をそのまま維持するために、テーブル間に外部キー関係を作成できます。私が何か誤解した場合は明確にしてください..

于 2012-11-12T16:59:50.520 に答える
0

たとえば、「container_id」と「post_id」の 2 つのフィールドを持つ 3 番目のテーブルを作成できます。次に、投稿を削除すると、コンテナの場合と同じように、post_id を含むすべてのエントリが削除されます。エントリの重複を避けるために、テーブル primary_key が two_fields で構成されていることを確認してください。

于 2012-11-12T17:01:33.657 に答える