0

私が取り組んでいるアプリケーションの状況を説明してみましょう。

A、B、C、D、E、F、Gとしましょう.これらのカテゴリはDB側にテーブルを持っていません.今、ユーザーはこれらの7つからいくつかのカテゴリを選択します.Cとしましょう. Cには、C1、C2、C3からC30までの別のサブカテゴリがあります。ユーザーがC2サブカテゴリに対してC2を選択すると仮定しましょう。ユーザーがフロントエンドを介してすべてのデータを入力すると、データベースにテーブルが挿入されます.今C2テーブルには、c2t1id、c2t2....c2t8 という 8 つの列があります。そのテーブルへの挿入ごとに自動インクリメントを取得する自動インクリメント id 列と、そのテーブルの主キーもあります。

今私の問題は、すべてのテーブルでアプリケーション全体にあるすべての挿入をユーザーに表示する必要があることです。ユーザーは7つのカテゴリすべてに挿入でき、各カテゴリにはサブカテゴリupt0 30があり、既存の設計によれば、これは210テーブル近くになります.

これで、ログイン テーブルが id/name/pw で構成されました。

データベース側の見通しから私の設計を見て、この設計には多少の欠陥があると感じ始めており、ユーザーの 5 つのレコードを取得するだけで 200 以上のテーブルを検索する必要があると感じ始めています。 long mulitable select join ?

これをさらに進めるには、いくつかのヒントが必要です。必要に応じて、再設計する準備ができています。

4

4 に答える 4

1

先に進む前に、デザインを調べる必要があるようです。

一般的に話すのではなく、具体的に話します。データの詳細がわからない場合、データベース設計を推奨することは困難です。

それで、データが何であるかを具体的に教えてください。

編集:

あなたがあなたのデータについて私たちに言ったことを考えると、それは次のようになります:

USER
----------------------
ID (PK) INTEGER AUTOINCREMENT NOT NULL
EMAIL (PK) VARCHAR(1000) NOT NULL
FIRST_NAME VARCHAR(50) NOT NULL
LAST_NAME  VARCHAR(50) NOT NULL
ENCRYPTED_PASSWORD ....etc


POST
--------------
ID (PK) INTEGER AUTOINCREMENT NOT NULL
USER (FK) INTEGER NOT NULL
CONTENT TEXT NOT NULL
DATE_POSTED TIMESTAMP NOT NULL
DATE_EDITED DATETIME NOT NULL


POST_CATEGORIES
--------------------
ID (PK) INTEGER AUTOINCREMENT NOT NULL
CATEGORY_ID (FK) INTEGER NOT NULL
POST_ID (FK) INTEGER NOT NULL

CATEGORY (hierarchal table)
------------------------------
ID (PK) INTEGER AUTOINCREMENT NOT NULL
PARENT_ID INTEGER
CATEGORY_NAME VARCHAR(200) NOT NULL

CATEGORYテーブルは単純なエージェンシーリストモデルを使用していることに注意してください。他のタイプのモデルも可能です。詳細については、MySQLでの優れた階層データの管理に関する記事を参照してください。

この設計では、ユーザー投稿のリストを取得することは次の問題になります。

select * from POSTS where USER = (select ID from USER where FIRST_NAME = 'John' and LAST_NAME = 'Doe');

カテゴリを追加する場合は、POST_CATEGORIESテーブルとCATEGORYテーブルも結合します。明らかにこれは単純化された例ですが、この設計がほんの一握りのテーブルに数十万または数百万の投稿がある数百または数千のカテゴリをどのようにサポートするかがわかるといいのですが。

于 2012-06-10T16:56:37.247 に答える
0

ノードごとにテーブルを持つ階層構造は、通常の答えではありません。この質問への回答をチェックして、アドバイスのいずれかが問題に当てはまるかどうかを確認することをお勧めします。

于 2012-06-10T23:41:44.010 に答える
0

うん、そのデザインは敗者です。210テーブル?もう一度考えてみて。テーブルや列の観点から考えるのをやめて、解決しようとしている問題として表現してください。たぶん、リレーショナル データベースはここでは適切ではありません。

于 2012-06-10T16:41:45.500 に答える