0

我正在为这个简单的想法而苦苦挣扎。看看reddit,当你注册一个新帐户时……你会自动订阅一些默认频道。

我想对我的网站做同样的事情。

我知道我可以用 id、user_id、chan_id做简单而愚蠢的user_chan

如果是这样的:

ID | NAME
1  | videos
2  | pictures

user_chan会是这样(我是用户 1)

ID | USER_ID | CHAN_ID
1  | 1       | 1
2  | 1       | 2

我想在这里说得很清楚:D

我想这就是reddit的工作方式。但是每次用户注册时,他们必须插入十几行。而且我猜他们有很多用户!

那么像这样的用户表内部的解决方案更聪明吗?:

ID | USER_NICKNAME | CHANS
1  | me            | 1,2
4

2 回答 2

3

不要使用一列存储多个值。这是一种非规范化,会在以后引起痛苦。例如,当您需要查询哪个用户拥有频道 3 时,您将不得不使用LIKE,这将表现不佳。当您只需要删除用户拥有的几个频道中的一个时,它变得更加困难。

INSERT对于大多数数据库,您可以使用一条语句插入多行。确切的语法因平台而异;在 SQL Server 中,您可以这样做:

insert into user_chan
(USER_ID, CHANID)
select 7634, 3
union all
select 7634, 27
union all
select 7634, 9
于 2010-08-01T01:13:09.027 回答
0

或者,按照您的建议,使用 XML 列存储多个值。这可以有一个 XML 索引,并且可以像关系表一样被查询/更新等(尽管语法更复杂)。

于 2010-08-04T10:27:57.530 回答