【问题标题】:Suitable design for a database application适合数据库应用程序的设计
【发布时间】:2009-12-07 13:58:10
【问题描述】:

我有一个关于我用 PHP、MYSQL 开发的网络应用程序的问题。

基本上第 1 部分是: 我以表格的形式显示结果,例如用于软件测试。

ID Prod_Name       Set    Date      Result  Platform
1  Alpha1          Pro1   01.01.01  PASS    2.3.1.2_OS

现在,我已经对表格进行了相应的划分

Table Name: Results
ID, Name, Date, Result

Table Name : Set
ID, Set_Name, Prod_name

Table Name : Platform
ID,  Platform_Name, Set_Name

现在,每个表中的 ID 都是一个递增值,与其他任何内容无关。

我的 php 应用程序首先从“结果”表中获取结果。由于我希望为每一行显示 SET,因此我正在建立另一个与数据库的连接并使用查询

select Set_name 
from Set 
where Prod_name = row['Name'] // row['Name'] is fetched from the results table.

现在我还想显示我使用上述方法从 Platform 表中提取它的平台,即建立另一个连接并从 Set 表中传递 Set_Name = row['Set_Name']

现在对于我的应用程序,还有其他方法可以达到相同的结果吗?

通常,对于基于 Web 的大型应用程序,如果数据来自数据库服务器,那么与数据库服务器建立多个连接是否可行?

请不要考虑这样一个事实,即 MySQL 声明一个连接语句一次就可以了,但是 MSSQL 服务器呢?我们是否需要编写一个包含多个连接/自连接/联合的长 sql 语句并在整个应用程序中使用这些变量?

此案例的应用程序设计将如何?

谁能给我一些建议?

谢谢。

【问题讨论】:

    标签: php database web-applications


    【解决方案1】:

    对于几乎任何类型的数据库,连接三个表的单个 SELECT 语句将比三个单独的语句分别查询一个表执行得更好。连接是关系数据库所做的。

    【讨论】:

      【解决方案2】:

      我可能没有理解所有内容,但这里有类似的东西。首先,让我们制作一个 ER 模型。

      现在,因为您似乎不喜欢连接,所以在数据库中创建一个视图。

      CREATE VIEW v_test AS
       SELECT TestID, ProductName, TestName, Date, Result, PlatformName
       FROM Product AS p
            JOIN Test AS t ON t.ProductID = p.ProductID
            JOIN Platform AS f ON f.PlatformID = t.PlatformID;
      

      有了这个,你可以简单地使用:

      SELECT * FROM v_test WHERE ProductName = 'Alpha1'
      

      你也可以看看 this question/answer 类似的场景。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 2018-01-31
        • 2015-11-03
        • 2014-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多