在一个表中存储多个表ID时编程逻辑

时间:2012-07-23 06:19:46

标签: data-modeling

我有五张桌子如下

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

除了第一个tblDescriptions之外的所有表都将id作为一列和主键,而Items作为第二列。

表1至表4中的列类似,如下所示

ids     item_name 

现在我想在第五个表中存储四个表项的描述,如下所示

Desc_Id   Description     Ids

现在的问题是,因为我存储id以识别其他四个表中项目的描述,当我将四个表的ID放在一起时,我可能会得到类似的ID。

让我知道上述要求的表格设计

3 个答案:

答案 0 :(得分:0)

由于您的表类似,最佳做法是组合所有表甚至描述并使用类型列定义行类型。

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

更容易理解和维护。

但如果您的表格不同,您有两个选择:

1-为你的类型使用超级表格,我建议使用这些表格。

2-在描述字段中使用类型行,并将其定义为该表中ID旁边的主键。

答案 1 :(得分: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'

答案 2 :(得分:0)

使用Polymorphic Association。作为包含说明的第5个表的外键,使用两列object_idobject_model

表格内容示例:

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

出于性能原因,请记住在两列上添加唯一索引。

Here you有一篇文章在PHP中解释了这一点