2

ユーザー情報や画像などを保存し、ステータスの更新や投稿/コメントを保存する必要があるWebアプリケーションが必要だとすると、テーブルを分離したいと思いますか?たとえば、パスワード、電子メールなどのユーザー情報、および年齢や場所などの一般的なソーシャルネットワーキング情報を含む「ユーザー」テーブルがある場合、ユーザーコンテンツを処理する2番目のテーブル(「投稿」)を作成することをお勧めします。コメントや投稿など?

表1:「ユーザー」

  • ユーザーID
  • ユーザー名

表2:「投稿」

  • PostID
  • PostContent
  • PostAuthor
  • 投稿日

これは有効な組織ですか?さらに、メディアを追跡したい場合は、別のテーブルでこれを行う必要がありますか?

表3:「メディア」

  • ID
  • タイプ
  • アップローダー

どんな助けでも大歓迎です。自分が正しい方向に進んでいるのか、それとも完全に道に迷っているのか知りたいです。私は主に、多くのテーブルを用意する必要があるのか​​、それともより大きく、分離度の低いテーブルを用意する必要があるのか​​疑問に思っています。また、これまでのところ、フォロワー(または友達)などの情報を「ユーザー」テーブルに保持することを計画していましたが、振り返ってみると、それが良いアイデアかどうかはわかりません。前もって感謝します、

4

2 に答える 2

6

一般的に、データベースを設計するには、処理するオブジェクトごとにテーブルを作成します。あなたの例では、、、、UsersPostsありCommentsますMedia。それから、各オブジェクトに保存したいものを具体化することができます。保存する各アイテムは、テーブルのフィールドです。

[Users]
ID
Username
PasswordHash
Age
Birthdate
Email
JoinDate
LastLogin

[Posts]
ID
UserID
Title
Content
CreateDate
PostedDate

[Comments]
ID
PostID
UserID
Content

[Media]
ID
Title
Description
FileURI

上記を見ると、各オブジェクトの情報を保持するための基本的な構造がわかります。フィールド名によって、オブジェクト間の関係を知ることさえできます。つまり、投稿UserIDにはそのユーザーが作成した投稿があります。コメントにはとが付いてPostIDいるUserIDので、コメントが特定の投稿に対して人によって書かれたことがわかります。

一般的なフィールドを特定したら、デザインの他のいくつかの側面を見ることができます。たとえば、現在、EmailUsersテーブルの下のフィールドは、ユーザーが1つの電子メールアドレスを持つことができ、それ以上は持てないことを意味します。これは2つの方法のいずれかで解決できます...メールフィールド(EmailA、EmailB、EmailC)を追加します。これは通常、EmailWorkやEmailHomeなどの特定の種類のメールを処理していることがわかっている場合に機能します。合計で何通のメールがあるかわからない場合、これは機能しません。これを解決するために、電子メールを独自のテーブルに引き出すことができます。

[Users]
ID
Username
PasswordHash
Age
Birthdate
JoinDate
LastLogin

[Emails]
ID
UserID
Email

これで、1人のユーザーに対して任意の数の電子メールを送信できます。これは、設計しようとしているほぼすべてのデータベースに対して実行できます。小さなステップでそれを取り、必要に応じて大きなオブジェクトを小さなオブジェクトに分割します。

アップデート

友達と取引するには、あなたが扱っている関係について考える必要があります。たくさんの友達がいる人が一人います。上記の表に関連して、1人のユーザーから多くのユーザーへ。これは、探している関係以外の情報を保持しない特別なテーブルを使用して実行できます。

[Friends]
[UserA]
[UserB]

したがって、現在のユーザーのIDがAにある場合、彼の友人のIDはBにあり、その逆です。これは友情を設定するので、あなたが私の友達なら、私はあなたの友達です。あなたが私のものでなければ、私があなたの友達になる方法はありません。一方向の友情のための能力を設定したい場合は、次のようにテーブルを設定できます。

[Friends]
[UserID]
[FriendID]

ですから、私たちがお互いに友達である場合、2つのレコードが必要になります。1つはあなたへの私の友情のため、もう1つは私へのあなたの友情のためです。

于 2012-07-20T01:21:31.857 に答える
1

複数のテーブルを使用する必要があります。

テーブルの数は、インタラクティブサイトをどれだけ複雑にするかによって異なります。投稿した内容に基づいて、ユーザーに関する情報を格納するテーブル、コメント用のテーブル、およびステータスタイプを格納するためのテーブルなどが必要になります。

たとえば、tbl_Usersは次の情報を保存する必要があります。1。ユーザーID2.名3.姓4.電子メール5.パスワード(暗号化)6。住所7.市区町村8.州9.国10.生年月日11.ユーザーステータス12.その他

このプロジェクトは、相対的なユーザーIDによってコメントなどのレコードをプルアップするリレーショナルDBを使用する必要があるようです。

これは、以下を格納するテーブルが必要になることを意味します。1. CommentID(主キー、int、自動インクリメント)2.コメント(テキスト)3。UserID(外部キー、int)

コメントは、外部キーを介してユーザーに添付されます。外部キーは、基本的にtbl_UsersテーブルのuserIdです。情報を単一の情報としてクエリするには、SQLステートメントでこれらのテーブルをスクリプトと組み合わせる必要があります。サンプルコードを参照してください

$sql_userWall = "SELECT tbl_Users.*, tbl_Comments.*, tbl_userStatus FROM tbl_Users
INNER JOIN tbl_Comments ON tbl_Users.userID = tbl_Comments.userID
INNER JOIN tbl_UserStatus ON tbl_Users.userID = tbl.UserStatus
WHERE tbl_Users.userID = $userID";

このステートメントは、基本的に、usersテーブルから提供されたユーザーの情報を取得し、同じuserIDが付加されたすべてのコメントを取得し、userstatusのテーブルからuserStatusを取得することを示しています。

したがって、一意のstatusID(主キー、int、自動インクリメント)と、たとえば「オンライン」または「オフライン」などの決定された長さのテキスト(varchar)を保持するtbl_userStatusというテーブルが必要になります。php、asp、または同様の言語を使用してeレコードから情報を書き始めると、テーブルは次のような単純な行を使用するだけで、tbl_userStatusから情報を自動的に取得します。

<?php echo $_REQUEST['userStatus']; ?>

余分な作業は必要ありません。プロジェクト時間のほとんどは、DB構造の開発と、各ページに必要な情報を正しく取得するSQLステートメントの記述に費やされます。

リレーショナルDBSと描画エンティティのリレーショナル図を説明するすばらしいYouTubeビデオシリーズがたくさんあります。これは、あなたが説明していたプロジェクトのタイを作成することについてさらに学ぶためにあなたが調べるべきものです。

最後に、グループのすべてのメンバーにコメントを表示したい場合は、多対多の関係と呼ばれるものを説明します。これには、複数のユーザーが単一の関係を「所有」できるようにするための追加のテーブルが必要になります。テーブル。グループのテーブルを参照する単一のgroupIDを格納できます。

tbl_groups 1. GroupID 2.GroupName3.その他のグループ情報など

そして、グループTbl_groupMembersに登録されているユーザーのテーブル1. membershipCountID(主キー、int、自動インクリメント)2. GroupID(foriegn key、int)3. UserID(foriegn key、int)

これにより、ユーザーはグループに登録し、グループベースのコメントに内部参加することができます。これらの関係を理解するにはもう少し時間がかかります。ビデオは大いに役立ちます。

これがお役に立てば幸いです。後で戻ってきて、このことを学ぶのに役立つと思ったYouTubeリンクをいくつか投稿します。

于 2012-07-20T01:20:04.887 に答える