一个条目中有两个MySQL关系?

时间:2017-03-02 15:00:47

标签: mysql relational-database

我的问题是:是否可以在一个数据条目中创建两个MySQL关系?

示例:

结构:

Table: QUEST

Colums:questId,questRewardTypeId

Table: REWARD_TYPE

Colums: rewardId,rewardDesc

数据:

一个数据行是{}

QUEST:

{1, LEVEL AND MONEY}

REWARD_TYPE:

{LEVEL, Level reward}, {MONEY, money reward}, {ITEM, item reward}

Database relations

1 个答案:

答案 0 :(得分:3)

具有两个表QUESTREWARD_TYPE,每个表都有主键(questIdrewardTypeId),通常的方法是创建链接数据的第三个表通过两个表的主键进行设置。这样一来,一项任务就有多个奖励条目。

让我们调用表QUEST_REWARD并为其提供以下结构:

+--------------+--------------+
| Field        | Type         |
+--------------+--------------+
| questId      | int(10)      |
| rewardTypeId | varchar(255) |
+--------------+--------------+

类型应与QUESTREWARD_TYPE中的键匹配。

然后,您可以为任务提供的每种奖励类型创建一个条目。例如,如果一个任务提供了新的水平和金钱,则SQL语句可能是:

INSERT INTO QUEST_REWARD SET questId=1, rewardTypeId='LEVEL';
INSERT INTO QUEST_REWARD SET questId=1, rewardTypeId='MONEY';

现在,您可以通过使用以下查询(此处是ID为1的任务)获得任务的所有奖励:

SELECT * from QUEST_REWARD WHERE questId = 1;

...,结果将是:

+---------+--------------+
| questId | rewardTypeId |
+---------+--------------+
|       1 | LEVEL        |
|       1 | MONEY        |
+---------+--------------+

当然,您可以将其扩展为任意数量的奖励类型,而不仅仅是每个任务两个。此外,比注释中提出的任何JSON或CSV方法更容易查询,因为您可以避免将这些内容解析为组件的麻烦。