可以将演示数据存储在数据库中吗?

时间:2011-04-28 17:38:15

标签: php sql css database sql-server-2005

我将在网页中显示数据库(SQL SERVER 2005)表中的行。这些行包含statusID(外键),它由Status表进一步定义(例如id,name,modifiedDate)。

各种状态应以不同的方式显示(假设它们只是具有不同的背景颜色)。

我使用php查询数据库,并构建网页表。在构建表时,我将基于该行的状态将css类应用于元素。

我至少有两个选项可以做到这一点:

  1. 在php中定义代码逻辑来处理它,如果在数据库中更改了状态,我将不得不更改代码。

  2. 将“class”存储在数据库中,只需应用已存储的类。

  3. 后一种选择对我来说似乎更好,但我不确定将表现数据嵌入数据库是否是一个糟糕的设计选择。这将是我创建几个Intranet实用程序的基础,我想从右脚开始。

4 个答案:

答案 0 :(得分:4)

班级本身并不是真正的表现数据。它只是每种状态的标签。理论上,你可以将它用于许多其他事情,而不是在网页上显示状态时应该是什么颜色。

当您将该类与给定的一组样式组合时,然后它的表示信息。你将在你的CSS文件中这样做,而不是在数据库中。

但是,如果数据库中的状态发生更改,则选项1不一定要求您更改PHP代码。您的PHP只能从状态的idname生成类名。如果状态的ID /名称发生变化,您的CSS必须更改,但这可能吗?如果应用程序需要更改状态,那么每个状态是否应保持不变,并添加新状态?

答案 1 :(得分:4)

在数据库中存储任何数据都没有错,包括演示数据。如果它可以帮助您产生有效的结果,同时编写更少的代码,那么这是一个很好的做法。您需要确保的是,不要将表示逻辑数据库逻辑混合在一起。

您可以通过在elementInfo对象的属性中封装表示层的数据来确保分离这些问题(例如)。

由于您正在讨论的是CSS类,因此演示数据应与业务数据分开。因此,虽然可以将演示数据和业务数据存储在数据库中,但将它们存储在同一个表中是不可接受的。

更新:评论不,您不应在业务对象上添加PresentationClassRecord的ID作为FK。我在下面的数据库中提供了一个方法的示例。我调用了DummyTable您的业务对象,其余的遵循规范。最相关的部分是StatusPresentationAssignmentTable

 -----------------------------------------------
 DummyTable
 -----------------------------------------------
 Id      Name     SomeOtherDataField    StatusId
 PK int  varchar  int                   FK int

 -----------------------------------------------
 StatusTable
 -----------------------------------------------
 Id      Name     ModifiedDate
 PK int  varchar  datetime

 -----------------------------------------------
 PresentationTable
 -----------------------------------------------
 Id      PresentationType    Value 
 PK int  varchar            
 sample data:
 43      CssClass            prettyBackground

 -----------------------------------------------
 StatusPresentationAssignmentTable
 -----------------------------------------------
 StatusId    PresentationId 
 FK int      FK int

现在有两个简单的连接子句,您可以获取演示数据,并且它与您的业务数据完全分离。你的脚本可以做一些事情,比如检查Dummy的状态是否有任何演示文稿分配。如果是,则查看PresentationType,获取相应的函数以将演示数据应用于演示文稿,并执行它。 (您需要为每个知道如何处理该值的PresentationType提供一个函数 - 可以通过function applyPresentationValue(presentationElement, presentationType, presentationValue)封装的函数,如果applyCssClass(presentationElement, value)调用不同的函数presentationType == "CssClass"

答案 2 :(得分:3)

虽然您可以将css类信息存储在数据库中,但许多内容管理系统都是这样做的,您最好将状态作为类名的一部分。

即。 status =打开,关闭 使用php逻辑生成表行并将css类设置为status_ {name} 然后,无论何时添加新状态或重命名,您只需添加/编辑css文件,无需重新编码。

.status_open{background-color:green;}

.status_closed{background-color:red;}

答案 3 :(得分:1)

我看到将其存储在数据库中的优缺点。显然,在那里获得类信息很方便,但它实际上并不是应用程序的一部分。

我倾向于不将其存储在那里并在表示层中做一些事情来根据状态来处理它。我的理由是,特别是因为您正在创建实用程序,数据可能会通过API或稍后类别无意义的东西使用。