Mysql 是否可以将数组添加到sql列?
是否可以将和列添加到可以包含数组的数据库中?我知道在无sql数据库中可以给出数组值,但我以前从未见过在sql数据库中不这样做 我想为用户权限存储两个整数值,但不想存储两次用户信息。(每个权限值一个) 我想返回json一些类似于Mysql 是否可以将数组添加到sql列?,mysql,sql,database-design,Mysql,Sql,Database Design,是否可以将和列添加到可以包含数组的数据库中?我知道在无sql数据库中可以给出数组值,但我以前从未见过在sql数据库中不这样做 我想为用户权限存储两个整数值,但不想存储两次用户信息。(每个权限值一个) 我想返回json一些类似于 { "User": "bob", "permissions": [0, 3] } vs 给定用户表: | user_id | user | |---------|------| | 1| bob | 创建权限表: | user_id | p
{
"User": "bob",
"permissions": [0, 3]
}
vs
给定用户表:
| user_id | user |
|---------|------|
| 1| bob |
创建权限表:
| user_id | permission |
|---------|------------|
| 1| 0|
| 1| 3|
然后,您可以使用join
查询来获取所需的信息:
select * from users u
inner join permissions p
on u.user_id=p.user_id
where u.user='bob'
and p.permission=0
可以将JSON存储为字符串。较新版本的MySQL具有更好的JSON支持。从这个意义上说,答案是“是的”。但是您不能在SQL语句中将列真正视为数组。使用单独的表以多对一的方式存储权限有问题吗?好的,我正在尝试创建一个授权表。例如,如果您具有权限3,则可以登录到与您的
用户id
相关的业务帐户,如果您具有权限0,则可以登录到个人用户帐户。基本上,我想存储多个用户id和多个和权限。我是否需要为每个权限和每个用户id创建一行?如果您可以选择权限代码的值,那么您可以使用二次幂,将它们存储为整数中的压缩二进制,并使用位运算符测试、设置和重新设置它们。@如果可以避免,Jay肯定不想复制数据。通常在关系数据库世界中,您需要创建一个单独的表。您甚至可以将主键设置为用户id
和权限
的组合,前提是您不需要多次存储。是的,我相信这是最好的方法。让我困惑的一件事是,当你在上面说我可以将主键作为user\u id
和权限的组合使用时。将它们都用作PK的目的是什么?通常,您希望每一行都有一个唯一的标识符。这通常是通过一个单独的列(即permission\u id
)完成的。如果您知道不需要存储具有相同权限的同一用户的两个单独实例,则可以使用user\u id
和permission
的组合来创建表的主键,因为每行都是唯一的。在任何一种情况下,您都希望权限表上的user\u id
上有一个非唯一索引,以便随着表的增长加快联接速度。
select * from users u
inner join permissions p
on u.user_id=p.user_id
where u.user='bob'
and p.permission=0