我正在努力应对这个简单的想法。 注册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
答案 0 :(得分: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
答案 1 :(得分:0)
或者,使用XML列按照建议存储多个值。这可以有一个XML索引,可以像关系表一样查询/更新等(尽管语法更复杂)。