在SQL表中存储项目数组

use*_*026 4 sql arrays

我知道这可能已被问了一百万次,但我找不到任何明确的东西.我正在建立一个网站,涉及可以建立项目列表的用户.我想知道在SQL表中存储项目的最佳方法是什么?

我想我是否需要为每个用户创建一个单独的表,因为在那里我看不到任何存储数组的方法.我认为这样效率会很低.

a_h*_*ame 10

根据"项目"的不同,似乎有两种可能的解决方案:

  1. 用户和项目之间的一对多关系
  2. 用户和项目之间的多对多关系

如果单个项目(例如"书")可以"分配"给多个用户,则为2).如果每个项目都是唯一的,并且只能属于单个用户,那么它就是1).

一对多的关系

create table users
(
   user_id    integer primary key not null,
   username   varchar(100) not null
);

create table items
(
   item_id    integer primary key not null,
   user_id    integer not null references users(user_id),
   item_name  varchar(100) not null
);
Run Code Online (Sandbox Code Playgroud)

多对多关系:

create table users
(
   user_id    integer primary key not null,
   username   varchar(100) not null
);

create table items
(
   item_id    integer primary key not null,
   item_name  varchar(100) not null
);

create table user_items
(
    user_id   integer not null references users(user_id),
    item_id   integer not null references items(item_id)
);
Run Code Online (Sandbox Code Playgroud)

由于你的描述非常模糊,这是我能想到的最好的.

不需要使用数组或类似的东西.您似乎是数据库建模的新手,因此您应该阅读有关规范化的内容.每当你想到"数组"时,你可能会想到"表格"(或关系).

编辑(刚看到你提到MySQL):
上面的SQL 不会在MySQL中创建一个外键约束(即使它会运行没有错误),因为MySQL的愚蠢"我不告诉你我是不是可以做某事"态度.您需要单独定义外键.