0

以下のように5つのテーブルがあります

1.tblFruits
2.tblGroceries 
3.tblVegetables
4.tblPlants
5.tblDescriptions

5 番目のテーブルを除くすべてのテーブルtblDescriptionsには、ID が 1 つの列として、主キーとして、Items が 2 番目の列として含まれます。

表 1 から表 4 の列は類似しており、次のとおりです。

ids     item_name 

今、私は以下のように5番目のテーブルに4つのテーブルのアイテムの説明を保存したい

Desc_Id   Description     Ids

ここでの問題は、他の 4 つのテーブルの項目の説明を識別するために ID を保存しているため、4 つのテーブルの ID をまとめると、同様の ID を取得する可能性があることです。

上記の要件を満たすテーブルのデザインを教えてください

4

3 に答える 3

0
tblDescription
=====================
id | pk_id | description | type

id : auto_generated id of tblDescription
pk_id : foreign key to linked to the tblFruits,tblGroceries.. table
description : the description
type : value either  be fruits, groceries,vegetables,plants .To identify the table.

説明を抽出するSQLは次のようになります。

Select f.item_name, d.description from tblDescription d 
inner join tblFruits f on d.pk_id=f.id and d.type='fruits'
inner join tblGroceries g on d.pk_id=g.id and d.type='groceries'
于 2012-07-23T06:27:54.900 に答える
0

を使用しPolymorphic Associationます。説明付きの 5 番目のテーブルの外部キーとして、2 つの列object_idと を使用しますobject_model

テーブル コンテンツの例:

Desc_Id Description Object_ID Object_Model
1       'dsferer'   12        `Fruit`
2       `desc2      12        `Vegetable`
2       `descfdfd2  19        `Vegetable`

パフォーマンス上の理由から、両方の列に一意のインデックスを追加することを忘れないでください。

ここに、PHPでこれを説明する記事があります

于 2012-07-23T06:28:03.293 に答える
0

テーブルは似ているため、すべてのテーブルと説明を組み合わせて、タイプ列を使用して行タイプを定義することをお勧めします。

id   name   description   type
                          [Fruits, Groceries, Vegetables, Plants]    

理解しやすく、維持しやすいです。

ただし、テーブルが異なる場合は、2 つのオプションがあります。

1-私が提案する一意のIDを生成するタイプにスーパーテーブルを使用します。

2-説明フィールドでタイプ行を使用し、そのテーブルの ID の横にある主キーとして定義します。

于 2012-07-23T06:27:44.837 に答える