如何在一个表中为用户设置不同的列数?

yyhrrdl8  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(260)

我对postgres和databases是新手。我想做一个密码管理器。我有一个名为password的表,用于存储密码,另一个名为person的表,用于存储他们的唯一id和其他详细信息。
现在password表中的问题是每个用户都有不同数量的密码要存储。所以我不确定我希望这个表有多少列。
我要做的是为每个用户设置一行,并在该行中添加所有详细信息,每个用户可以拥有不同数量的密码。但是我不知道怎么做。
所以我认为,由于每个用户都有一个唯一的id,(比如user1有id2),所以我可以添加具有相同id的不同行来存储细节。就这么跑了 SELECT * FROM password where id=2 . 所以它会列出他们存储的所有密码,这是可行的
然而,我想知道一个更有效的方法来做到这一点。所以请帮帮我
如果你不明白,请转到这个链接,我已经在那里更好地描述了它。

68bkxrlz

68bkxrlz1#

关于使用第二个表存储各种登录(网站、网站\用户名、密码)的想法,您是正确的。但是,您应该在这里使用关系数据库中的主键和外键的概念。例如,这意味着:
将person表中的“id”列定义为主键,将passwords表中的“pid”列定义为引用person表中id的外键。如果我查对了,你就用references关键字。看到了吗https://www.postgresqltutorial.com/postgresql-foreign-key/ 例如。您还可以(而且应该)去掉“passwords”表中的username字段,因为这是冗余信息。
然后可以查询用户并通过主id和外部pid上的内部连接来连接这两个表,请参阅https://www.postgresqltutorial.com/postgresql-inner-join/ 然后,您的查询可能看起来像这样(为了更好的可读性,我将“password”表重命名为“login”:

SELECT person.id, username, website, website_username, password FROM person INNER JOIN login ON login.pid = person.id;

然后,每个用户的所有登录信息都会返回给您。当然,您可以通过使用where关键字来缩小范围,就像您在示例查询和文档末尾所做的那样。
尽管这超出了问题的范围:避免以纯文本形式存储密码。如果可能,请始终加密它们。
希望这有帮助:)

相关问题