【发布时间】:2013-03-10 19:00:48
【问题描述】:
我是数据库设计的新手,我有一个关于为我的项目选择触发器与视图的问题。以下是一些细节:
使用的数据库:MySQL
Table 1:
Name: - no limit on number of values
Level: - four values are possible - 1,2,3,4
Status: - four values are possible - a,b,c,d
每个名称 CAN(不是强制性的,但可能)包含级别和状态的所有组合。
例子:
名称:“国王”可以持有1级状态a,1级状态b,......,2级状态a,2级状态b.....3级状态a,3级,状态b .....
现在我必须查询数据库以进行一些计算,以通过在网络上工作的 GUI(Java Swing)向用户显示它们。我需要的计算是......
-
每个名称的每个级别的每个状态计数。例如:
1 级 King 中有多少“状态 a”。 King 的级别 1 中有多少“状态 b”。 King 的级别 1 中有多少“状态 c”。 国王级别 1 中有多少“状态 d”。 King 的 2 级中有多少“状态 a”。 等等……
姓名---等级---状态
国王--- 1 --- a
国王--- 1 --- a
国王--- 1 --- a
国王--- 1 --- b
国王--- 1 --- b
国王--- 1 --- d
2 级以此类推,然后还有不同的名称。我想计算 1 级的名字“King”
如果我执行单独的查询来获取这些数据,如果我有 20 个名称,我需要执行 320 个查询。我不想。我这里有两个解决方案...
解决方案 1. 我创建了一个触发器。
我创建了表 2:
Name,Level,a_count,b_count,c_count,d_count
King 1 3 2 0 0
xyz 1 ... ..... .... ...
当原始表 1 更新时,触发器会相应地添加到计数中。现在我直接从这个 table2 中读取。
解决方案 2:创建一个显示此数据的视图。
名称--级别--状态--计数
国王 1 a 3
国王 1 b 2
国王 2 a ...
等等。
有了这个解决方案,我不需要一直通过网络发送所有查询。我可以只调用一次视图(它确实会执行所有查询,但不需要从程序中执行)
我可以实现两者,但我想知道哪种解决方案更有效。对于每个用户(使用我的前端),我将在父表中有大约 2000 行,用户可以是任意数字。请提出建议。
谢谢, 拉朱
【问题讨论】:
-
有人请告诉我触发器和视图之间可以使用什么来从父表中获取汇总数据?
标签: database-design triggers views database-trigger