2017-09-05 57 views
-2

我所要求的是沿着说我有用户数据存储和每个用户将有一个与他们相关的项目列表的东西。创建任意sql表是否是不好的做法?

我的第一个想法是为每个用户创建另一个表格,例如$userid$_list列表中的列表。这似乎是不好的做法,所以我的另一个想法是在users表中的另一列中存储json格式的列表。是第一个坏习惯


我想这是不必要的,但这里的具体是什么,我试图做的,我做了不和谐(discord.gg)和我在做什么,现在一个机器人正在每个服务器的一个新的数据库文件与一堆表。

从更大的伤害

除了正在做,如果有数据损坏,我想知道,如果它是可以接受的对我来说,而不是让表,如warnsbanskickscustom_commands等,我将有一个数据库serverid_warnsserverid_bans,serverid_kicksserverid_custom_commands

+0

请提供您正在尝试执行的示例。 – nicomp

回答

2

这听起来像你想要关联的东西用户项目

对于这一点,你要寻找的是被称为bridging table(或关联实体),其中有一个many-to-many关系。有一个表users,和一个表items。然后建立第三个表作为桥接表,通过在其他两个表的每个表中使用ID字段的foreign keys将每个表中的ID相互关联。

例如,这是表users

ID | User 
==== | ====== 
    1 | Bob 
    2 | Jim 

这是items表:

ID | Item 
==== | ======== 
    1 | Sword 
    2 | Shield 

在我的例子而言,鲍勃拥有一把剑,和Jim同时拥有一把剑和一个盾牌。

因此,桥接表是这样的:

ID | UserID | ItemID 
==== | ======== | ====== 
    1 | 1  | 1 
    2 | 2  | 1 
    2 | 2  | 2 

希望这有助于! :)

+0

我曾考虑过这一点,但我只是在考虑排序问题,如果所有条目都在一张表中以便为一个用户获取所有项目,将需要很长时间,但我想这可能不会太糟糕,谢谢! –

+1

行**没有订单**。您只需提取所需的数据,然后对提取的数据进行排序。另外,创建一个桥接表确实会有几行,尽管理论上行的数量与为每个用户创建表的行数相同。这是一种更“干净”的方法,并且还允许多个用户之间的轻松关联。 –

+0

此外,如果这可以解决您的问题,请不要忘记[**接受它作为答案**](https:// stackoverflow。通过点击投票按钮下方的灰色检查 - 将其从“未答复的问题”队列中移除,并将问题授予问题提问者和问题答疑者。询问任何问题后,您可以在15分钟内完成。当然,在说,你没有义务标记我的答案(或任何其他人)是正确的,但标记为已解决的问题有助于保持事情顺利进行:) –

相关问题