1

我有一个我已经设置好的设计,我真的可以使用一些帮助来看看我是否走在正确的轨道上。如果这对 Stackoverflow 来说不是一个合适的问题,我深表歉意,并将其删除。我是一个相当新的用户,不能 100% 确定。

我正在构建一个内容管理器,一切都来自数据库。我有一个包含部分的页面,这些部分具有字段,并且在这些字段中输入了数据。这些字段可以是文本框、组合框或列表框。这里的重点是能够创建页面,这些页面会根据部分类型获取带有字段的适当部分,我只是想存储这些值,以便以后可以读取或编辑页面。

第1页

第一节

字段1 [Texbox1] 字段2 [Texbox2]
字段3
[Combobox1]

第二节

field1 [Texbox1]
field2 [Listbox1]
field3 [Combobox1]

这些部分可以在不同的页面上重复使用,并且每个部分的字段始终相同。

我的数据库如下所示:

页面
* PageId
* PageName

Page_Section
* PageId
* SectionId

Section
* SectionId
* SectionTypeId
* SectionName

SectionType
* SectionTypeId
* SectionTypeName

字段
*字段 ID * 部分 ID
*
字段 名称

FieldValue
* FieldValueId
* FieldId
* FieldValueValue
* Current Value (这有点因为组合框可以有多个值,但我想显示选择了哪个值。同样,列表框可​​以选择多个值)
* PageId

因此,根据部分类型创建了一个包含部分的页面。每个部分都有 x 个字段,然后显然每个页面字段可以有不同的值,这就是为什么 FieldValue 有 pageId 但将 pageId 放入 FieldValue 感觉很奇怪,但我看不到其他方法。我在正确的轨道上吗?

4

3 回答 3

2

我认为你在正确的一般轨道上。

我担心的一个领域是每一页上部分的排序——我认为你的 Page_Section 表需要一个额外的列SeqNo SMALLINT NOT NULL,它以递增顺序获取值(它们不必是连续的),所以当你按 SeqNo 排序时,您的部分将在页面上以正确的顺序显示。

您可能需要一个类似的排序列用于部分中的字段。

您的字段表可能需要一些字段类型信息。

也许您的 FieldValue 表应该重命名为 PageFieldValue;它旨在将值与特定页面上的字段相关联。只要一个给定的字段在一个页面上不能出现多次,重命名的表就会被准确命名;它包含指定页面上字段的值。目前尚不清楚是否可以存在某种默认系统,以便如果页面没有为字段指定特定值,那么默认值就会生效。这可能值得考虑。

于 2012-11-27T19:48:57.207 回答
1

我的大问题是,你想记录什么?记录字段到部分和部分到页面的分配是否重要?或者是因为屏幕大小的限制等原因,记录恰好被分成多个部分和页面的业务数据?

例如,假设在第 1 页我们有客户姓名和地址,在第 2 页我们有帐号和电话号码。如果明天有人要重新设计屏幕以将帐号移动到第 1 页,那么您当前的数据库将需要重大数据更新才能将帐号的所有字段记录从第 2 页移动到第 1 页。如果这对您想要的任何内容都很重要与数据有关,例如如果您想查询“给我一个第 3 页上所有字段的列表”,那么就是这样,您的设计在这里是一个很好的设计。但是,如果字段与页面的关联只是一个巧合的事实,而不是您在查询中关心的事情,那么您就走错了方向。如果是这样的话,

也就是说,这是一个“屏幕布局数据库”,还是“客户信息数据库”或“产品数据库”之类的?如果它是一个屏幕布局数据库,那么您就在正确的轨道上。如果它是一个产品数据库,那么你就走错了路。

于 2012-11-27T20:18:06.630 回答
0

根据应用的不同,如果某个section有固定的字段并且被频繁访问,您可以对该section进行反规范化以提高查询性能。在某种程度上,你可以创建一个表section_x:

section_x
field_1
field_2
...
field_n

您可以在此 wiki 页面上找到有关非规范化的更多信息:https ://en.wikipedia.org/wiki/Denormalization

于 2012-11-27T20:00:20.047 回答