添加记录和减少数量

时间:2016-05-26 14:00:31

标签: sql oracle plsql

我开始用pl / sql编程,我遇到了一些问题。我正在创建一个数据库,其中包括以下表格:

TRAINS: ID_TRAIN, NAME, TYPE

CARS: ID_CAR, TYPE, SEATS, QUANTITY

TRAINS_W_CARS: ID_TRAIN (FK), ID_CAR (FK), QUANTITY

我想制作一个程序/功能,当我添加一些火车时,它会减少可用汽车的数量。

例如:我有50辆可用的2级车,当我将5辆加到某辆列车时,这个数量将减少到45辆。

说实话,我真的不知道如何去做,因为到目前为止我还没有做过这么复杂的事情。

2 个答案:

答案 0 :(得分:3)

作为替代方案,请考虑首先修改您存储的内容的性质。

目前,您似乎正在存储一个记录,这是计数 50&#34; cars&#34;和 one < / em>记录是计数 0&#34;火车车厢&#34;。因此,您必须手动跟踪将这些计数从一个记录移动到另一个记录。这不仅容易出错,而且可能会让人感到困惑。主要是因为没有真正的汽车记录,只有重要的记录。

要进行更新,您必须执行以下操作:

  • 将车数减少1。
  • 将列车车数增加1。

相反,请考虑以下内容......

  • CARS表有50条记录,每条记录代表一辆实际的车。
  • TRAINS表有1条记录,代表实际的火车。
  • CARS表与TRAINS表格有一个FK。这标识了该汽车属于哪辆火车。对于当前未连接到火车的汽车,此值可以为空。

在这种情况下,您必须执行以下操作:

  • 更新CARS记录的FK。

它是一个成功或失败的单一原子操作。没有半承诺数据,没有丢失汽车等等。

数据中的每条记录都应代表&#34;事物&#34;。不是事物的数量和描述,而是实际的东西。在这种情况下,您也不需要该链接表,因为&#34; train&#34;和&#34;汽车&#34;本质上并不是多对多的事情。 (如何将汽车同时连接到两列火车?)

始终考虑在数据中建模的真实世界概念。你有:

  • 一辆可以有很多车的火车
  • 一辆可以有多个座位的汽车
  • 座位
  • 一名乘客

根据实际的真实世界对象建立关系,而不是根据您想要查看的数据的屏幕和报告。这些报告可以从现实世界的数据中轻松生成,但实际数据不能始终从平面报告中生成。 (例如,在您当前的设置中,您可以查看火车中有多少辆汽车的报告,但您不知道哪些是汽车。)

答案 1 :(得分:0)

我不知道您是手动在表格中插入行还是从某个UI按钮单击中插入行,但您可以在下面执行此操作:

在您的CARS表中添加一个前/后插入触发器,并在该触发器中写下您在TRAINS表中必须修改的内容。