我是数据库设计的新手,我有一个关于为我的项目选择触发器与视图的问题。以下是一些细节:
使用的数据库: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)向用户显示它们。我需要的计算是......
每个名称的每个级别的每个状态的计数。例如:
King 的 1 级中有多少“状态 a”。King 的级别 1 中有多少“状态 b”。King 的级别 1 中有多少“状态 c”。国王级别 1 中有多少“状态 d”。King 的 2 级中有多少“状态 a”。很快....
名称---级别---状态
国王--- 1 --- 一个
国王--- 1 --- 一个
国王--- 1 --- 一个
国王--- 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一...
很快。
有了这个解决方案,我不需要一直通过网络发送所有查询。我可以只调用一次视图(它确实会执行所有查询,但不需要从程序中执行)
我可以实现两者,但我想知道哪种解决方案更有效。我将为每个用户(使用我的前端)在父表中保留大约 2000 行,并且用户可以是任意数字。请建议。
谢谢,拉朱