我正在考虑以下具体问题的结构数据库设计:
我有两个不同的表属于同一个数据库。在第一个表中,存储了不同对象的详细数据,其中列id指的是特定对象。
另一方面,第二个表存储第一个表中的对象感知到的每个更改。第二个表中的每一行都将引用对象的id存储为定义对象的不同状态版本的version\u id,即每一个已生效的更改。
现在让我们假设在objects表的一行中将'emplieted'参数设置为“true”,用于声明对象在对象的管理器站点中不可见。在我们的显示站点中,表version是用来显示链接对象的版本的,但是如果id引用的对象被标记为已删除,则系统不应该显示它。
为了解决这个问题,我有两种可能的解决方案:要么增加数据库存储,在eliminated表中添加一个version列,要么在从eliminated表接收到对象objects后,在php中添加一个用于处理id表中的参数version的查询。
我想知道这两种不同的解决方案都有哪些缺点和优势,如果节省存储成本比处理更多的查询和访问多个查询来接收数据更容易,或者,如果相反,牺牲存储成本并将eliminated列分散到version表中,则通过为访问其他表中的数据而保留多个查询,可以提高站点的响应时间性能。

CREATE TABLE `objects` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `eliminated`  tinyint(1) DEFAULT NULL,
  ...

  PRIMARY KEY (`id`),
 KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

CREATE TABLE `version` (
 `version_id` int(11) NOT NULL AUTO_INCREMENT,
 `object_id` int(11) NOT NULL,
 `eliminated`  tinyint(1) DEFAULT NULL, //optional
  ...

  PRIMARY KEY (`version_id`),
 KEY `id` (`version_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

最佳答案

向版本表中添加消除列的好处是,它为您提供了对象消除的详细信息。它允许您存储对象消除的详细信息。
缺点是您要保存一个额外的行,同时还要添加一个额外的列,如果表中有很多行,这会产生开销。
使用哪种解决方案取决于表中存储了多少数据,以及需要向用户显示哪些数据

10-07 12:34
查看更多