2013-01-02 83 views
2

我工作的新的Web應用程序包含如圖書館評論戰略所需

  1. 圖片
  2. 文件

每一種過去種段具有不同的性質在數據庫中,我不能將它們的信息存儲在一個數據表中,所以我需要創建3個不同的表。

遊客可以在書籍,文件和圖片評論,我想開發註釋一個模塊並存儲一個表內的所有意見,讓我們把它(評論)

我的問題是,什麼樣的策略,我要按照做到這一點?

我正在考慮創建引用列[reference_id] [nvarchar 50] ,我會保存這樣

  1. files_{id of file}
  2. pictures_{id of picture}的評論等等......是這將是偉大的方法?

感謝

+1

請訪問http://計算器。com/questions/987654/in-a-stackoverflow-clone-what-relationship-should-a-comments-table-have-to-ques/987709#987709 –

+0

這意味着創建一個與item_id和dataItem_id的一對一關係例如? 創建評論表comment_id,item_id –

+0

我會在下面寫一個答案。 –

回答

0

我回答了一個非常類似的問題: In a StackOverflow clone, what relationship should a Comments table have to Questions and Answers?

在你的情況,我建議建立一個單一的表Commentables:

CREATE TABLE Commentables (
    item_id INT AUTO_INCREMENT PRIMARY KEY 
    item_type CHAR(1) NOT NULL, 
    UNIQUE KEY (item_id, item_type) 
); 

然後書籍,圖片,文件中的每一個與Commentables的關係都是1:1。

CREATE TABLE Books (
    book_id INT PRIMARY KEY, -- but not auto-increment 
    item_type CHAR(1) NOT NULL DEFAULT 'B', 
    FOREIGN KEY (book_id, item_type) REFERENCES Commentables(item_id, item_type) 
); 

對圖片和文件做同樣的事情。對於圖書,item_type應始終爲'B',對於圖片始終爲'P',對於文件始終爲'F'。因此,您無法將圖書和圖片引用到Commentables中的同一行。

然後你的意見可以參考一個表,Commentables:

CREATE TABLE Comments (
    comment_id INT AUTO_INCREMENT PRIMARY KEY, 
    item_id INT NOT NULL, 
    FOREIGN KEY (item_id) REFERENCES Commentables (item_id) 
); 
1

您應該使用單獨的項目Id範圍和項目類型。

此外,您可以使用ItemTypes創建表並存儲ItemId和ItemTypeId。

像這樣的結構:pictures_{id of picture}會浪費很多空間,對性能或後續代碼開發無幫助。

例如:你是如何從切東西的項目類型是這樣的:

picture_1234

你要搜索「_」,截斷文本轉換爲數字,並寫了很多的SQL代碼...