表关系sql中没有中间表的多对多?

时间:2013-02-13 22:38:54

标签: java sql

我正在创建一个可以查找生物的应用程序,并且正在尝试增加我的知识。

我有一张桌子生物和桌子技能

多个生物可以使用具有多种技能和技能的生物。

我使用sql manager在java中编码。

我使用1,2来表示生物表中的技能,并使用数值引用技能表。

我有一个想法是有办法制作一个重载的存储过程吗?

我还没有开始编码,因为我仍然在计划,但我会很感激任何想法。

我不是试图避开中间表,只是看看是否有办法以另一种方式做到这一点并不是那么难以毫无意义。

2 个答案:

答案 0 :(得分:8)

您可能需要中间表。

在“生物”表中存储以逗号分隔的技能列表,可以轻松获取每个生物的技能,但如果您想知道具有特定技能的生物会怎么样?

以逗号分隔的名单充满了问题。您可以使用它们来优化一种访问数据的方式,但这会导致其他访问数据的方式出现大幅度的优化。

另请参阅我对Is storing a delimited list in a database column really that bad?

的回答

答案 1 :(得分:2)

如果您正在使用关系数据库,那么解决它的“正确”和一般方法是使用一个表来存储关系。 如果你想避开中间牌,你可以对每个生物的最大技能数量设置一个约束 - 让我们说最多5个技能,然后有一个名为skill1,skill2,...,skill5的字段。我不推荐这个选项,因为它会使查询更复杂,但在某些情况下它是可能的。 此选项的另一个改进是单个int或long字段,其中每个位代表一种技能。我的意见仍然不好。