Database design 仅存在一次的数据项的数据库设计

Database design 仅存在一次的数据项的数据库设计,database-design,Database Design,好的,我想创建一个包含站点所有数据的数据库。但是这没有问题,对于那些只存在一次的项目,我应该怎么做 例如,在主页上,用户经常更改介绍文本,如何将其存储在数据库中?主页上还有6个用户经常更改的附加项目 我的想法是创建一个表,将这6项作为列,而该表只有一行。从数据库设计的角度来看,这可以吗?您可以这样做: table PageContent ----------------- varchar(10) Key varchar(8000) Value varchar(30) PageName

好的,我想创建一个包含站点所有数据的数据库。但是这没有问题,对于那些只存在一次的项目,我应该怎么做

例如,在主页上,用户经常更改介绍文本,如何将其存储在数据库中?主页上还有6个用户经常更改的附加项目


我的想法是创建一个表,将这6项作为列,而该表只有一行。从数据库设计的角度来看,这可以吗?

您可以这样做:

 table PageContent
 -----------------
 varchar(10) Key
 varchar(8000) Value
 varchar(30) PageName //use an index for this column
select * from PageContent where PageName = 'StartPage'
Show(pageContents["Title"])
您可以加载页面的所有变量,如下所示:

 table PageContent
 -----------------
 varchar(10) Key
 varchar(8000) Value
 varchar(30) PageName //use an index for this column
select * from PageContent where PageName = 'StartPage'
Show(pageContents["Title"])
在您的代码中,您可以检索一些可以像这样使用的集合:

 table PageContent
 -----------------
 varchar(10) Key
 varchar(8000) Value
 varchar(30) PageName //use an index for this column
select * from PageContent where PageName = 'StartPage'
Show(pageContents["Title"])

假设这六个项目都是相同的类型(在本例中为网页提供内容的文本),我更喜欢具有ItemName和itemvaluevarchar列的设计。这允许您在将来轻松地将方案扩展到七个项目(或更多),而无需更改数据库模式


你也可以考虑将这些资料保存在数据库之外。

听起来不太有效,因为你必须得到所有项目的那一行。如果您持有的是文本或blob,则将每个项目都放在自己的行中。如您所说,如果项目经常发生更改,那么您实际上是在一次又一次地更新同一行


另一个考虑:您现在有6项。也许明天你会有8、19等等,然后你必须不断地改变桌子。因此,我建议使用两列表格(“id”或“type”列和“content”列)。

基本上,您听到的是两种解决方案之一:EAV解决方案或使用单行表格。单行解决方案具有以下优点:

  • 您可以对包括引用完整性在内的值强制执行数据完整性规则
  • 类似地,可以强制给定属性具有值(通过可为null的属性)
  • 当您查询该值时,可以保证您只有一行
  • 对于某些人来说,很难随意更改键值(列名)并破坏代码
  • 除非你要有几百列,否则有几十列是没有区别的

    EAV结构肯定更具动态性。如果这将支持站点程序集,那么无论何时在何处添加属性,都必须更改代码以使用该新属性。此外,对于EAV结构,您不能保证值将存在,也不能保证它将匹配来自另一个表的内容


    正如我前面提到的,EAV系统的最大优势是它更具动态性。如果您的系统真的要支持许多不同类型的站点,并且这些站点的站点设计者在数据属性存储方面可能有不可预见的需求,那么EAV结构会更好。

    我喜欢这样。但是,在主页上有4个元素将存储在这里。因此,我可能必须将PageName更改为ElementName。或者,最好是添加第4个ElementName列。