我知道这可能已被问了一百万次,但我找不到任何明确的东西。我正在建立一个网站,涉及可以建立项目列表的用户。我想知道在SQL表中存储项目的最佳方法是什么?
我想我需要为每个用户创建一个单独的表,因为在那里我看不到任何存储数组的方法。我认为这样效率会很低。
答案 0 :(得分:10)
根据“项目”的不同,似乎有两种可能的解决方案:
如果单个项目(例如“书籍”)可以“分配”给多个用户,则为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的愚蠢“我不是在告诉你我是不是可以做某事”的态度。您需要单独定义外键。
答案 1 :(得分:0)
每个用户\帐户的单独表格最好。这将限制必要表的大小,并允许更快的搜索。显示数据时,通常会显示当前用户/帐户的数据。当您必须搜索表格以查找相关信息时。应用程序将开始减慢依赖表增长的幅度。编写应用程序就好像它将在SQL的最大范围内使用一样。如果网站变得流行,这将限制将来重新设计的需要。