关系数据库中的多值属性?

c0d*_*0da 1 sql database database-design relational-database

当广泛引用关系数据库中的多值属性时,它的概念有多好?

让我举个例子来说明我的意思.假设我有下表:

UserID          Attribute1

User1           a,b,c
User2           x,y,z
User3           a,x,y
User4           c,b,z
[a,b,c,x,y,z are to be strings]
Run Code Online (Sandbox Code Playgroud)

还有另一个用户User5,我必须根据他是否Attribute1匹配其他4个用户中的任何一个来对其他用户提出一些建议.

[在图形数据库中,任务本来可以更容易,因为我可以使用相同的关系从相应的用户创建多个节点.

现在,这个表只是对实际数据库外观的微观抽象.如果不是数百万,表中的行数可能会达到数十万.此外,多个值实际上可能远远超过3.除此之外,数据库可能负载很重,在这种情况下,可能存在一些问题.

那么,在这种情况下,多值属性是否有用?或者有更好的方法做同样的事情吗?我能想到的一个显而易见的方法是将其存储为:

UserID          Attribute1

User1           a
User1           b
User1           c
User2           x
User2           y
User2           z
User3           a
User3           x
User3           y
User4           c
User4           b
User4           z
Run Code Online (Sandbox Code Playgroud)

在数据库中处理这种情况的任何更快的方法?或者是否有现代数据库的内置功能可以利用?

Guf*_*ffa 6

在字段中具有多个值仅在数据在数据库中是自重时才有用,即,如果您只读取数据库中的字段并在之后处理它.

只要您想在查询中使用字段中的值,就必须通过解析值来比较它,从而获得巨大的性能损失.如果您将值放在单独的记录中,如第二个示例所示,以便您可以在其上添加索引,那么查询将快10 000倍并不是不现实的.

在表中有一百万条记录不是问题.我们有一些表中有超过1亿条记录.