A. 資料庫設計的步驟有哪些
資料庫設計過程分為以下六個階段:
1、需求分析階段
准確理解和分析用戶需求(包括數據和處理),它是整個設計過程的基礎,也是最困難、最耗時的一步。
2、概念結構設計階段
是整個資料庫設計的關鍵,通過對用戶需求的集成、歸納和抽象,形成了一個獨立於特定資料庫管理系統的概念模型。
3、邏輯結構設計階段
將概念結構轉換為DBMS支持的數據模型,對其進行優化。
4、資料庫物理設計階段
為邏輯數據模型選擇最適合應用程序環境的物理結構(包括存儲結構和存取方法)。
5、資料庫實現階段
根據邏輯設計和物理設計的結果,使用資料庫管理系統提供的數據語言、工具和主機語言,建立資料庫,編寫調試應用程序,組織數據倉庫,並進行試運行。
6、資料庫運行維護階段
資料庫應用系統經試運行後可投入正式運行,在資料庫系統運行過程中,需要不斷地對其進行評估、調整和修改。
註:在設計過程中,將資料庫的設計與資料庫中數據處理的設計緊密結合起來,在每個階段同時對這兩個方面的要求進行分析、抽象、設計和實現,相互借鑒和補充,從而完善這兩個方面的設計。
(1)評論中有圖片提及資料庫怎麼設計擴展閱讀:
資料庫設計技術
1、清晰的用戶需求:作為計算機軟體開發的重要基礎,資料庫設計直接反映了用戶的需求。資料庫必須與用戶緊密溝通,緊密結合用戶需求。在定義了用戶開發需求之後,設計人員還需要反映具體的業務關系和流程。
2、注意數據維護:設計面積過大、數據過於復雜是資料庫設計中常見的問題,設計人員應注意數據維護。
3、增加命名規范化:命名資料庫程序和文件非常重要,不僅要避免重復的名稱,還要確保數據處於平衡狀態。為了降低檢索信息和資源的復雜度和難度,設計人員應了解資料庫程序與文件之間的關系,並靈活使用大小寫字母命名。
4、充分考慮資料庫的優化和效率:考慮到資料庫的優化和效率,設計人員需要對不同表的存儲數據採用不同的設計方法。在設計中,還應該使用最少的表和最弱的關系來實現海量數據的存儲。
5、不斷調整數據之間的關系:不斷調整和簡化數據之間的關系,可以有效減少設計與數據之間的聯系,進而為維護數據之間的平衡和提高數據讀取效率提供保障。
6、合理使用索引:資料庫索引通常分為聚集索引和非聚集索引,這樣可以提高數據搜索的效率。
參考資料來源:網路-資料庫設計
B. 對於圖片分享網站的資料庫如何設計,求大神指點思路
按你說的簡單的來弄得話,就是兩個表,一個用戶表,儲存用戶信息啊,一個圖庫表,裡面儲存每張圖的上傳者id啊,儲存地址啊,這是最簡單的關聯了,如果數據多可以考慮用附表等,自己可以進行一下拓展
C. 評論和通知系統的資料庫表要怎麼設計
標識新聞的唯一標識 ID int (自增長) (主鍵)新聞標題 Title varchar(100) 長度自定100差不多是50個中文 可以根據需要來設置新聞作者 Author varchar(20) 長度根據用戶表中的用戶名列表的長度來定發布時間 ReleaseTime datetime修改時間 UpdateTime datetime新聞內容 Content text 能存放最大值為2147483647個字元的變長文本(如果不需要那麼長的內容 可以考慮使用varchar(max)可存儲最大值為8000個字元的可變長字元串)新聞關鍵字 Keywords varchar(200) 用逗號等符號分隔關鍵字(新聞,發布,系統)新聞類別 CategoryId int (要使用類別的話要再建立一個類別的表) 如果要簡單點可以省略關鍵字 類別等要復雜點可以再加不少東西 比如加等對應的表
D. 論壇的資料庫怎麼設計
常用的論壇設計方法,總結如下:
一 分割思想:
1 資料庫切分:用戶庫、主題庫、回復庫
2 數據表水平切分:用戶庫1-n、主題庫1-n、回復庫1-n (比如按時間分)
3 分布式資料庫:每台計算機中都有DBMS的一份完整拷貝副本,並具有自己局部的資料庫,位於不同地點的許多計算機通過網路互相連接,共同組成一個完整的、全局的大型資料庫。
4 論壇功能可以進行分隔,不同的伺服器負責不同的功能
5 用主從資料庫,master是寫, slave是讀
6 把內容與其它信息分開,好處就是可以讓每個表的文件最小化,對資料庫操作壓力會減小,這樣保證每張表數據量很小,操作速度會快,也可以在這里使用緩存
二 索引:
針對是否建立索引有著一定的分歧:
我覺得建立索引還是很有必要的。理由如下:
1)建立索引可以加快檢索速度,對於論壇讀和寫的比例相差很大,用戶體驗當然是讀多寫少,所以綜合考慮還是要用索引,而且是加在常用的讀關鍵字上。
2)索引之所以會降低更新的速度,是因為更新還包括對索引的更新,從更新帖子10萬左右,這句話是說,我們可能對發帖標題,發帖內容,回復標題,回復內容這4個欄位做更新。需要注意的是,這四個欄位並不是用來建立表連接的欄位,為了優化查詢速度我們不會在這四個欄位上建立索引,所以從這道題目出發,我們建立的索引不會影響更新帖子的性能。只要被索引的列(例如回復表的標題ID)不被頻繁更新,即使索引所在地行的其它列被頻繁update,索引也不會被更新從而產生性能消耗,一張表一天30萬次的索引更新,因它引起的性能消耗小到即使資料庫安裝在奔騰3單核CPU下都能輕松承擔下來。
3)對於更新的速度慢的問題,我們有解決的方法,你提交更新了後,前台可以讓程序返回一個正確結果,後台開個線程非同步慢慢跟新資料庫就是了,反正更新成功的前提就是假設資料庫連接永遠正確並處於可靠狀態。在資料庫和用戶之間建立一個緩沖區。(如,將更新的數據放到內存中,達到一定數量的時候再統一更新資料庫。假如以100條為例,一旦內存中達到100條數據量將這100條數據統一入庫。減少insert操作)
三 緩沖:
讀的時候的緩沖:緩存路由表
主題緩存表(這個取每個區的前面100條記錄),一般來說負載最大的就是主題的第一頁,所以緩存表是個小表。
另外使用hibernate,在資料庫上面加了一層緩存。
生成靜態頁,緩存最熱,最新的帖子。
對於經常更新的數據都設計成單獨表 ,這樣可以最大程度的利用hibernate緩存
緩存常用的數據和表,利用緩存來將經常被訪問的帖子留在內存中,為每條緩存的記錄添加一個訪問時間,如果長時間沒被訪問就從緩存中刪除掉,
避免內存過大,每次用戶看帖的時候,首先檢索緩存中時候有需要的帖子,沒有的話再訪問資料庫,然後將資料庫返回的帖子信息存儲到緩存中。
寫的時候的緩沖:資料庫和用戶之間建立緩存,將更新的數據放在內存中,非同步操作的。所有的寫貼操作 放到一個隊列然後批量執行插入資料庫操作。
預估計的緩沖:假如用戶第一次打開某標題,那將此標題的相關的前100條數據緩存到客戶斷。這樣避開對資料庫的直接查詢,減少資料庫壓力。
四 代碼優化
1盡量避免表的連接約束通過代碼來實現約束 例如用戶id的驗證在用戶登錄時驗證這樣就可以把帖子表的用戶id外鍵去掉這樣就成了單表操作、查詢 而連接可以通過觸發來實現這樣最多是查詢了3個表而不是連接中的笛卡爾笛卡爾積 回復表的查詢限定每次查詢的記錄數例如限定10條其它的通過點擊觸發來操作"注代碼優化容易出現bug 原因有些開發工具本身有優化"
五 資料庫性能調優
盡量用硬體來代替軟體優化 原則就是能用硬體的盡量用硬體 比如磁碟陣列 RAID0 有條件用RAID10 加大內存 .避免小表上建索引 對論壇來說數據帖子和回復不是很重要 可以定期刪除一些垃圾帖子 樓主說的幾百萬條記錄的論壇對現在的資料庫管理系統和計算機來說永不著刻意的優化,定期維護打包備份資料庫就可以了
提高速度的關鍵:
1.建立合理的索引並在查詢時充分利用;
2.避免使用關聯,這樣避免整表掃描;使用關聯不如多次使用主鍵查詢來的快;
3.一些處理的功能盡可能放到內存中來做,比如組織主題和回復;
4.海量緩存(使用靜態頁面也是個不錯的做法)
5 定期對表進行轉儲
E. 怎麼把帶有圖片的文章寫資料庫
你用什麼資料庫?在資料庫里創建OLE對象,然後把你的文章用二進制寫入資料庫。
用以下方法來實現:
*******************************************************
首先我們先來熟悉一下將要使用的對象方法。我們用來獲取上一個頁面傳遞過來的數據一般是使用Request對象。同樣的,我們也可以使用Request對象來獲取上傳上來的文件數據,使用的方法是Request.BinaryRead()。而我們要從資料庫中讀出來圖片的數據顯示到網頁上面要用到的方法是:
Request.BinaryWrite()。在我們得到了圖片的數據,要保存到資料庫中的時候,不可以直接使用Insert語句對資料庫進行操作,而是要使用ADO的AppendChunk方法,同樣的,讀出資料庫中的圖片數據,要使用GetChunk方法。各個方法的具體語法如下:
*Request.BinaryRead語法:
variant=Request.BinaryRead(count)
參數
variant
返回值保存著從客戶端讀取到數據。
count
指明要從客戶端讀取的數據量大小,這個值小於或者等於使用方法Request.TotalBytes得到的數據量。
*Request.BinaryWrite語法:
Request.BinaryWritedata
參數
data
要寫入到客戶端瀏覽器中的數據包。
*Request.TotalBytes語法:
variant=Request.TotalBytes
參數
variant
返回從客戶端讀取到數據量的位元組數。
*AppendChunk語法
將數據追加到大型文本、二進制數據Field或Parameter對象。
object.AppendChunkData
參數
objectField或Parameter對象
Data變體型,包含追加到對象中的數據。
說明
使用Field或Parameter對象的AppendChunk方法可將長二進制或字元數
據填寫到對象中。在系統內存有限的情況下,可以使用AppendChunk方法對長整型值進行部分而非全部的操作。
*GetChunk語法
返回大型文本或二進制數據Field對象的全部或部分內容。
variable=field.GetChunk(Size)
返回值
返回變體型。
參數
Size長整型表達式,等於所要檢索的位元組或字元數。
說明
使用Field對象的GetChunk方法檢索其部分或全部長二進制或字元數據。在系統內存有限的情況下,可使用GetChunk方法處理部分而非全部的長整型值。
GetChunk調用返回的數據將賦給「變數」。如果Size大於剩餘的數據,則
GetChunk僅返回剩餘的數據而無需用空白填充「變數」。如果欄位為空,則
GetChunk方法返回Null。
每個後續的GetChunk調用將檢索從前一次GetChunk調用停止處開始的數據。但是,如果從一個欄位檢索數據然後在當前記錄中設置或讀取另一個欄位的值,ADO將認為已從第一個欄位中檢索出數據。如果在第一個欄位上再次調用GetChunk方法,ADO將把調用解釋為新的GetChunk操作並從記錄的起始處開始讀取。如果其他Recordset對象不是首個Recordset對象的副本,則訪問其中的欄位不會破壞GetChunk操作。
如果Field對象的Attributes屬性中的adFldLong位設置為True,則可以對該欄位使用GetChunk方法。
如果在Field對象上使用Getchunk方法時沒有當前記錄,將產生錯誤3021(無當前記錄)。
接下來,我們就要來設計我們的資料庫了,作為測試我們的資料庫結構如下(access2000):
欄位名稱 類型 描述
id 自動編號 主鍵值
img OLE對象 用來保存圖片數據
對於在MSSQLServer7中,對應的結構如下:
欄位名稱 類型 描述
id int(Identity) 主鍵值
img image 用來保存圖片數據
現在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個提供給用戶的上傳界面,可以讓用戶選擇要上傳的圖片。代碼如下
(upload.htm):
<html>
<html>
<body>
<center>
<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=post>
<input type=file name=mefile><br>
<input type=submit name=ok value="OK">
</form>
</center>
</body>
</html>
注意enctype="multipart/form-data",一定要在Form中有這個屬性,否則,將無法得到上傳上來的數據。接下來,我們要在process.asp中對從瀏覽器中獲取的數據進行必要的處理,因為我們在process.asp中獲取到的數據不僅僅包含了我們想要的上傳上來的圖片的數據,也包含了其他的無用的信息,我們需要剔除冗餘數據,並將處理過的圖片數據保存到資料庫中,這里我們以access2000為例。具體代碼如下(process.asp):
<%
response.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
set connGraph=server.CreateObject("ADODB.connection")
』connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("images.mdb")
connGraph.Open
set rec=server.createobject("ADODB.recordset")
rec.Open "SELECT * FROM images where id is null",connGraph,1,3
rec.addnew
rec("img").appendchunk mydata
rec.update
rec.close
set rec=nothing
set connGraph=nothing
%>
好了,這下我們就把上傳來的圖片保存到了名為images.mdb的資料庫中了,剩下的工作就是要將資料庫中的圖片數據顯示到網頁上面了。一般在HTML中,顯示圖片都是使用<IMG>標簽,也就是<IMGSRC="圖片路徑">,但是我們的圖片是保存到了資料庫中,「圖片路徑」是什麼呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:
<IMGSRC="showimg.asp?id=xxx">
所以,我們所要做的就是在showimg.asp中從資料庫中讀出來符合條件的
數據,並返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):
<%
setconnGraph=server.CreateObject("ADODB.connection")
』connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("images.mdb")
connGraph.Open
set rec=server.createobject("ADODB.recordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
rec.open strsql,connGraph,1,1
Response.ContentType="image/*"
Response.BinaryWrite rec("img").getChunk(7500000)
rec.close
set rec=nothing
set connGraph=nothing
%>
注意在輸出到瀏覽器之前一定要指定Response.ContentType="image/*",
以便正常顯示圖片。
最後要注意的地方是,我的process.asp中作的處理沒有考慮到第一頁(upload.htm)中還有其他數據,比如<INPUT type=tesxt name=userid>等等,如果有這些項目,你的process.asp就要注意處理掉不必要的數據。
F. 網站有很多圖片,如何設計資料庫
你可以加個欄位是否為完整URL。
第二種判斷是否包含https//或者http://
資料庫設置的話.
id,name,file_name,add_time,is_full_url(如果你需要的話)