0

データベースの投影に問題があります。

「ニュース」、「記事」、「ファイル」など、いくつかの項目タイプがあります。

また、各タイプのカテゴリを格納する「カテゴリ」テーブルもあります。タイプは、特別なフィールド「category_type」で指定します。そのため、私のアプリケーション コードには、ニュース = 0、記事 = 1、ファイル = 2 などの定数が定義されています。

問題は、接続テーブルを作成する正しい方法は何でしょうか?

1 つの方法: 「news2categories」、「articles2categories」、「files2categories」など、タイプごとに複数のテーブルを作成できます。

2 番目のオプションは、「item_id (int)、item_type (int)、category_id (int)」の 3 つのフィールドを持つ 1 つのグローバル テーブルを作成することです。実際、私はすでに 1 つのフィールドだけで型を分割するカテゴリ用のグローバル テーブルを 1 つ持っています。しかし、それは正しい方法ですか?何十もの同一のテーブルを生成したくありませんが、一方で、1 つのテーブルと複数の型の関係は抽象的で複雑すぎるようです。お知らせ下さい。

DB は、この問題を解決する上で意味がある場合、主に Yii フレームワークで使用されます。

4

2 に答える 2

0

記事、ニュース、ファイルの違いは何ですか? これらのそれぞれに複数のカテゴリ (多対多) を含めることはできますか? 各タイプ (記事、ニュースなど) に対する複数のカテゴリの多対多の必要性があり、それぞれが互いに十分に異なると仮定すると、次の表が得られます。

 category
 news
 category_news
 article
 article_category
 file
 category_file

各カテゴリ リンク テーブルには、category_id と item_id (news_id、article_id など) の 2 つの列があります。

私は、すべての db テーブルに単数形で名前を付けるという db コーディング標準を使用し (Yii がそうでない場合は、自由に複数形に変更してください -ack- ます)、リンク テーブルには、リンクされた各テーブルの名前をアンダースコア (アルファベット順の名前) で区切ります。

何をするにしても、一貫性を保ちましょう。

于 2012-09-09T23:06:05.620 に答える
0

さまざまなタイプの追加/削除で設計を柔軟にしたい場合があるため、最初の方法は問題があるようです。新しいタイプを追加すると、新しいテーブルを追加する必要がありますが、これは良い設計ではないと感じています。

どうですか、このデザイン。

表 : カテゴリ、列 : カテゴリ ID (PK) タイプ ID (FK からタイプ テーブル)

表 : タイプ、列: TypeID (PK)、TypeValue

タイプ ニュース、記事などをタイプ テーブルに格納します。これにより、タイプやカテゴリを追加または削除することで、設計がより柔軟になります。

于 2012-09-09T23:07:18.637 に答える