我知道这可能已被问过一百万次,但我找不到任何确定的东西。我正在制作一个涉及可以构建项目列表的用户的网站。我想知道将他们的项目存储在 SQL 表中的最佳方式是什么?
我在想我需要为每个用户制作一个单独的表,因为我看不到任何存储数组的方法。我认为这将是低效的。
根据“项目”是什么,似乎有两种可能的解决方案:
如果可以将单个项目(例如“书”)“分配”给多个用户,则为 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
);
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)
);
由于您的描述非常模糊,这是我能想到的最好的。
不需要使用数组或类似的东西。看来您是数据库建模的新手,所以您应该阅读有关规范化的内容。每次您想到“数组”时,您可能都会想到“表”(或关系)。
编辑(刚刚看到你提到了 MySQL):
上面的 SQL不会在 MySQL 中创建外键约束(即使它会在没有错误的情况下运行),因为 MySQL 的愚蠢“我不会告诉你我不能做某事”态度。您需要单独定义外键。
最好为每个用户\帐户创建一个单独的表。这将限制必要表的大小并允许更快的搜索。当您呈现数据时,您通常会显示该当前用户/帐户的数据。当您必须通过表格搜索以查找相关信息时。随着依赖表的增长,应用程序将开始减慢。编写应用程序,就好像它将最大限度地使用 SQL。如果网站变得流行,这将限制未来重新设计的需要。