需要评论策略

时间:2013-01-02 23:58:56

标签: sql database data-structures

我正在研究包含诸如库

之类的新Web应用程序
  1. 图片
  2. 文件
  3. 过去各种各样的部分在数据库中都有不同的属性,我不能将它们存储在一个数据表中,所以我需要创建3个不同的表。

    访客可以对书籍,文件和图片发表评论,我想开发一个评论模块,并将所有评论存储在一个表格中,让我们称之为(评论)

    我的问题是,我必须遵循什么策略来完成这项工作?

    我正在考虑创建参考列[reference_id] [nvarchar 50] 我将存储像这样的评论

    1. files_{id of file}
    2. pictures_{id of picture}等等......那会是一个很棒的方法吗?
    3. 感谢

2 个答案:

答案 0 :(得分:1)

您应该使用单独的ItemId和ItemType。

此外,您可以使用ItemTypes创建表并存储ItemId和ItemTypeId。

这样的结构:pictures_{id of picture}会浪费大量空间,对性能或后期代码开发没有帮助。

示例:如何从以下内容中删除项目类型:

picture_1234

你必须搜索“_”,将截断的文本转换为数字,并编写大量的SQL代码......

答案 1 :(得分:0)

我回答了一个非常相似的问题: In a StackOverflow clone, what relationship should a Comments table have to Questions and Answers?

在你的情况下,我建议创建一个表评论:

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

然后,Books,Pictures,Files中的每一个与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)
);

对图片和文件执行相同操作。 book_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)
);