2

我正在开发新的 Web 应用程序,其中包含库等

  1. 图书
  2. 图片
  3. 文件

过去的每一种部分在数据库中都有不同的属性,我不能将它们的信息存储在一个数据表中,所以我需要创建 3 个不同的表。

访问者可以对书籍、文件和图片发表评论,我想开发一个用于评论的模块并将所有评论存储在一张表中,我们称之为(评论)

我的问题是,我必须遵循什么策略才能做到这一点?

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

  1. files_{id of file}
  2. pictures_{id of picture} 等等……那是不是很好的方法?

谢谢

4

2 回答 2

1

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

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

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

示例:您如何从以下内容中剪切项目类型:

picture_1234

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

于 2013-01-03T00:07:06.440 回答
0

我回答了一个非常相似的问题: 在 StackOverflow 克隆中,Comments 表与 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)
);
于 2013-01-03T00:21:24.963 回答