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

1 つの列を使用して複数の値を格納しないでください。これは、後で痛みを引き起こす非正規化です。たとえば、チャネル 3 を使用しているユーザーを照会する必要がある場合、 を使用する必要がありますがLIKE、これはパフォーマンスが低下します。ユーザーが持っている複数のチャネルのうち 1 つだけを削除する必要がある場合は、さらに困難になります。

INSERTほとんどのデータベースでは、1 つのステートメントで複数の行を挿入できます。正確な構文はプラットフォームによって異なります。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 に答える