2012-07-20 51 views
0

假設我想要一個Web應用程序,需要存儲用戶信息,圖像等,以及存儲狀態更新或帖子/評論,我想分開表嗎? 例如,如果我有一個「用戶」表,其中包含用戶信息,如密碼,電子郵件和典型的社交網絡信息,如年齡,位置等,是否是一個好主意創建第二個表格(「職位」),處理用戶評論和/或帖子等內容?用戶驅動網站的數據庫設計

表之一: 「用戶」

  • 用戶名
  • 用戶名
  • 年齡

表二: 「上崗」

  • 帖子ID
  • PostContent
  • PostAuthor

這是一個有效的組織?此外,如果我想跟蹤媒體,我應該在另一張桌子上做這個嗎?

表三: 「媒體」

  • ID
  • 類型
  • 上傳

任何幫助深表感謝。我很好奇,看看我是在正確的軌道還是完全失去。我主要想知道我是否應該有很多桌子,或者如果我應該有更少的隔離桌子。 同樣值得注意的是,我計劃將追隨者(或朋友)等信息保存在'用戶'表中,但我不確定這是回顧過去的好主意。 在此先感謝,

回答

2

一般來說,爲了設計一個數據庫,您將爲每個要處理的對象創建一個表格。在你的例子中,你有Users,Posts,CommentsMedia。從中你可以充實你想要爲每個對象存儲的內容。要存儲的每個項目都是在表中的字段:

[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,所以帖子是由該用戶創建的。評論有PostIDUserID,所以你可以看到評論是由某人爲特定帖子撰寫的。

一旦你確定了一般的領域,你可以看看設計的其他方面。例如,現在用戶表中的Email字段表示用戶可以有一(1)個電子郵件地址,不再有。您可以通過兩種方法解決這個問題:添加更多電子郵件字段(EmailA,EmailB,EmailC)如果您知道您正在處理的特定類型的電子郵件(例如EmailWork或EmailHome),則此方法通常有效。如果您不知道總共有多少封電子郵件,這不起作用。爲了解決這個問題,你可以拉出來的郵件到它自己的表:

[Users] 
ID 
Username 
PasswordHash 
Age 
Birthdate 
JoinDate 
LastLogin 

[Emails] 
ID 
UserID 
Email 

現在你可以擁有任意數量的電子郵件的單個用戶。你可以爲你想要設計的任何數據庫做到這一點。按小步驟操作,根據需要將較大的物體分成較小的物體。

更新

對付你應該想想你正在處理的關係啦。有一(1)人有許多朋友。關於其上一個用戶到多個用戶的表格。這可以通過一個特殊的表格來完成,該表格除了您正在尋找的關係之外不包含任何信息。

[Friends] 
[UserA] 
[UserB] 

因此,如果當前用戶的ID在A,他的朋友的ID在B和visa-verse。這建立了友誼,所以如果你是我的朋友,那我就是你的朋友。沒有你成爲我的朋友,我無法成爲你的朋友。如果你想設置爲單向的能力友誼,你可以設置這樣的表:

[Friends] 
[UserID] 
[FriendID] 

所以,如果我們彼此雙方的朋友也必須是2分的記錄,一個是我的朋友給你,一個給你我的freindship。

+0

謝謝!你已經完全回答了我的問題!我希望以這種方式組織起來是正確的,因爲它看起來非常整潔和模塊化。你將如何處理諸如「朋友」,「訂戶」或「追隨者」等用戶關係?像user1是user2和user3的朋友 – Suavelizard 2012-07-20 01:49:07

+0

@Suavelizard - 我已經爲你更新了我的答案 – Justin808 2012-07-20 02:07:52

1

您需要使用多個表。

表的數量取決於您希望交互式網站的複雜程度。根據您發佈的內容,您需要一個可以存儲用戶信息的表格,一個用於評論的表格以及一些用於存儲狀態類型的表格等。

例如tbl_Users應存儲: 1.用戶名 2名 3.姓 4.電子郵件 5.密碼(加密) 6.地址 7.市 8.國家 9。國家 10.出生日期 11 UserStatus 12等

這個項目聽起來像它應該使用一個關係數據庫,將拉起記錄,如評論,相對於用戶ID。

這意味着你將需要存儲如下表: 1. CommentID(主鍵,INT,自動遞增) 2.評論(文本) 3.用戶ID(外鍵,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"; 

這種說法實際上是說從用戶表中獲取所提供的用戶的信息,並得到所有的評論與附加了相同的用戶ID,並從用戶表中得到userStatus狀態'。

因此,您需要一個名爲tbl_userStatus的表,其中保存了唯一的statusID(主鍵,int,自動遞增)以及確定長度的文本(varchar),例如「online」或「offline」。當您使用PHP,ASP或類似的語言給E記錄開始寫的信息出表將自動只需使用簡單的線條像

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

沒有額外的工作需要檢索tbl_userStatus爲您的信息。大部分的項目時間將用於開發數據庫結構和編寫SQL語句,以正確檢索每個頁面所需的信息。

有許多偉大的YouTube視頻系列描述關係型DBS和繪圖實體關係圖。這就是你應該研究的內容,瞭解更多關於創建你所描述的項目的信息。最後一個注意事項是,如果您希望評論對某個組的所有成員都可見,則會描述所謂的多對多關係,這將需要額外的表格以允許多個用戶「擁有」一個與單個表的關係。您可以存儲引用組表的組的單個組ID。

tbl_groups 1.的GroupID 2.組名 3.更多組信息等

而對於組註冊的用戶的表 Tbl_groupMembers 1. membershipCountID(主鍵,INT,自動增量) 2. GroupID(foriegn key,int) 3.用戶標識(foriegn key,int)

這允許用戶爲一個組和內部的註冊商將它們加入基於組的註釋。這些關係需要一點時間才能理解,這些視頻將會有很大的幫助。

我希望這會有所幫助,稍後我會回來發佈一些YouTube鏈接,我發現這些內容很有幫助。

+0

Tye訂閱他以下視頻: – Matt 2012-07-20 01:32:41

+0

感謝,期待着視頻 – Suavelizard 2012-07-20 01:50:39

+0

嘗試訂閱以下視頻:foxiaacademy - 邏輯數據建模(觀看全部5部分)和kvviswana - 實體關係圖簡介另一個5部分系列。在這些視頻的最後,假設您瞭解所有內容,您將能夠爲Web應用程序設計更復雜的數據庫。這確實需要我幾次才能完全理解課程中的所有內容。祝你好運,你的能力和應用程序將很快改善! – Matt 2012-07-20 02:37:13

相關問題