1

ベストプラクティスを使用してデータベース構造を設計しようとしていますが、基本的なことだと確信していることについて理解できません。DBは、ユーザー(100人以上)がどの雑誌(100人以上)を読んだかを購読するためのものです。

ユーザー名、ユーザー情報、雑誌のタイトルの表がありますが、各ユーザーがフォローしている雑誌をどこにリストすればよいかわかりません。ユーザー テーブルに列を追加して、それをマガジン テーブルにリンクするか、それとも各ユーザーに、そこにマガジンを一覧表示する独自の「フォロー」テーブルを設定しますか? 私は混乱しているので、どんな助けも素晴らしいと思います。

よろしく

ライアン

4

6 に答える 6

4

あなたが苦労しているのは、多対多の関係と呼ばれるものです。

この問題を解決するには、おそらく と呼ばれる 3 番目のテーブルが必要ですuser_magazines。この 3 番目のテーブルには 2 つのキー フィールドが必要です。1 つはユーザー テーブルから、もう 1 つはマガジン テーブルからのものです。たとえば、user_id列とmagazine_id列です。これは複合キーと呼ばれます。これらの列の両方を使用して、どのユーザーがどの本を読んだかを識別できるようになりました。

これは視覚的に最もよく理解できます。

ここに画像の説明を入力

上の図では、3 番目のテーブル (中央のテーブルstock_category) により、どの在庫品目がどのカテゴリに属しているかを知ることができることがわかります。

于 2012-08-17T04:31:40.957 に答える
0

users自動インクリメントの主キー、ユーザー名、およびそのユーザーについて保存したいその他のものを含むテーブルが必要です。

次に、magazines別の自動インクリメント主キー、雑誌の名前、およびその雑誌について保存する必要のあるその他のものを含むテーブル。

最後に、subscriptionsテーブル。これには、自動インクリメントの主キー(実際にはこのテーブルでは実際には必要ありませんが、個人的には追加します)、user_ID列、magazine_ID列が必要です。

サブスクリプションを追加するには、ユーザーのIDと関連する雑誌のIDを含む新しいレコードをサブスクリプションテーブルに追加するだけです。これにより、ユーザーは複数の雑誌を購読できます。

凝ったものにしたい場合は、subscriptionsテーブルに参照整合性制約を追加できます。これにより、特定の列が別のテーブルへの参照であることをデータベース管理システムに通知し、変更時に何をするかを指定できます(たとえば、DBMSを使用できます)。特定のユーザーが削除された場合、そのユーザーが所有するサブスクリプションを自動的に削除します)

于 2012-08-17T04:34:22.103 に答える
0

と呼ばれる別のテーブルを作成する必要がありますUserMagazineSubs。+ IDを複合キーとして作成しますUserIDMagazineTile

Userこのテーブルは、すべてのMagazine関係の詳細をキャプチャします 。

于 2012-08-17T04:37:14.350 に答える
0

user テーブルに列を追加して、magazine テーブルを参照することは絶対に避けてください。ユーザーは、現実の世界を反映していない 1 つの雑誌しかフォローまたは購読できません。

userId と magazineId を持つ結合テーブルが必要になります。ユーザーが購読する雑誌ごとに、結合テーブルに 1 つのエントリがあります。

私はあなたのテーブル構造について少し推測していますが、もしあなたが持っていたら:

User (id, login)
Magazine (id, name)
User_Magazine (userId, magazineId)

おそらく、この最後のテーブルはサブスクリプションと呼ばれる必要があります。追跡したいサブスクリプションの終了日などの他の情報がある可能性があり、それが現実世界で実際に表されているものだからです。

サブスクリプションごとに User_Magazine テーブルにエントリを入れることができます。

また、ログイン jdoe を持つユーザーが持っていたすべての雑誌を見たい場合は、次のようにします。

SELECT name 
  FROM User, Magazine, User_Magazine 
  WHERE login = 'jdoe'
    AND User.id = User_Magazine.userId
    AND Magazine.id = User_Magazine.magazineId
于 2012-08-17T04:51:31.910 に答える
0

と の 2 つの列があり、キーは両方の列を含む複合キーであるUser_To_MagazineテーブルUserIdMagazineId

于 2012-08-17T04:31:52.163 に答える
0

まず第一に、ユーザーと雑誌の例のように、多対多の関係を理解する必要があります。最初にシナリオを理解します。1 人のユーザーが多くの雑誌をフォローでき、1 つの雑誌を多数のユーザーがフォローできるため、ユーザーと雑誌の間には多対多の関係が存在します。

2 つのエンティティ間に多対多の関係が存在する場合は常に、連想エンティティと呼ばれる 3 つ目のエンティティをそれらの間に導入する必要があります。

そのため、選択した名前の第 3 のエンティティを導入する必要があり、これには、どのユーザーがどの雑誌をフォローしているかに関する情報が含まれます。

図を使用して理解を深めるために、 http://sqlrelationship.com/many-to-many-relationship/にアクセスしてください。

于 2012-08-17T05:57:27.013 に答える