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

Lit*_*eeX 8 css php sql database sql-server-2005

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

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

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

我有至少2个选项来做到这一点:

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

  2. 将"类"存储在数据库中,只需应用已存储的类.

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

sma*_*man 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
Run Code Online (Sandbox Code Playgroud)

现在,通过两个简单的连接子句,您可以获得演示数据,并且它与您的业务数据完全解耦。您的脚本可以执行一些操作,例如检查虚拟人的状态是否有任何演示文稿分配。如果是,那么它会查看PresentationType,获取适当的函数以将演示文稿数据应用到演示文稿,然后执行它。(您需要为每个PresentationType都有一个知道如何处理该值的函数 - 可以通过类似的函数封装的函数,function applyPresentationValue(presentationElement, presentationType, presentationValue)如果applyCssClass(presentationElement, value)presentationType == "CssClass"