【发布时间】:2014-12-21 07:19:04
【问题描述】:
我为一家出租车公司实施了一个数据库。我已经使用 PostgreSQL 创建了这个数据库。我有 4 个实体客户、公司、司机和预订。目前,我很难找到一种方法来计算某家公司有多少司机。
在驱动程序实体中使用了一个外键,即“firmid”。 “firmid”创建一个链接,告诉数据库某个驱动程序属于某个公司。
在公司表中,我有一列名为“驱动程序编号”。目前,我必须从驱动程序实体手动计算属于特定公司的驱动程序数量,并将整数输入到公司实体的列中。有没有我可以实现的任何类型的公式或某些功能可以自动化这个过程。
例如,如果我要从驱动程序实体中删除驱动程序,则特定记录的公司实体中的驱动程序数量应该减少,反之亦然以添加驱动程序。
这个问题已经困扰了我一个星期了。
2014 年 12 月 20 日更新
我尝试添加一个约束来检查驱动程序的数量:
ALTER TABLE firm ADD CONSTRAINT numberofdrivers_check CHECK (driversno ~ (SELECT COUNT (*) AS drivers FROM driver d GROUP by d.firmno ORDER BY 01));
但我收到以下错误:
ERROR: operator does not exist: bigint ~ bigint
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
有什么想法吗?
【问题讨论】:
-
在您更改驱动程序列表时使用触发器更新“公司”表中的计数。
-
使用视图。这就是它们的用途。
-
这很简单。但是您应该使用 sqlfiddle.com 来演示您的表格。
-
@MarcB 触发器是什么意思?我应该添加约束吗?
-
CHECK有不同的含义。您对它的使用看起来像是来自其他语言。driversno不能在这样的表达式中定义。
标签: sql database postgresql rdbms