Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以将数组添加到sql列?_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 是否可以将数组添加到sql列?

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

是否可以将和列添加到可以包含数组的数据库中?我知道在无sql数据库中可以给出数组值,但我以前从未见过在sql数据库中不这样做

我想为用户权限存储两个整数值,但不想存储两次用户信息。(每个权限值一个)

我想返回json一些类似于

{
   "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