2010-10-02 67 views
1

我正在设计一个涉及“页面”的应用程序,它有许多“块”,其中有几种类型的块。然而,我努力寻找一种将数据保存在数据库中的好方法。我想像有这样的一种流行方式,这里有两个我正在考虑:如何处理“扩展”表

一种用法

  • 页表
    • ID
    • 用户
    • 创建,更新等。
    • ID
    • 页(Blocks.page = Pages.id)
    • 创建,更新
    • BLOCK_TYPE(例如“文本”)
    • BLOCK_ID(Blocks.block_id = nBlocks.id其中n = BLOCK_TYPE)
  • 文本块
    • ID
    • 特定文本的属性

其优点是,所有类型的块(创建,更新,页面,标题,顺序)通用的属性保存在一个地方。您也不必查询每个块类型表来检查当前页面的块,因为您将拥有此“索引”。缺点是它可能会在查找块时变得有点混乱,但这取决于正确实施它(查找页面的所有块,块的类型,每个块类型的查询)。

方法有两个

  • 页面像以前
  • 文本块
    • ID
    • 体,特定文本项
    • 创建,更新,为了
  • 列表块
    • ID
    • 特定列表项
    • 创建,更新,订单等本

优点卸下的混乱方式找到正确的表来查询每个块。缺点是无法轻松管理块顺序(update where order in any other block != $order),并且每个表必须具有相同的创建,更新等字段,这些字段在需要更改时需要付出一些努力。更大的问题是,每个页面都必须查询每个块特定的表格,而不是仅仅为页面确定的块表格。

有没有第三个更好的方法呢?我认为最好的方法是第一个(它至少比第二个更规范化,表格逻辑不是混淆)但我想知道是否有什么我想念:)

回答

1

方法二有一个巨大的con:排序。

我会采取一种用法,或这样的: (我知道这看起来脏脏的,但它的工作原理)

  • 页面作为一个办法
    • ID
    • block_type
    • 文本特定项目(全为空)
    • 特定列表项(全部为空的)
    • XXXX特定
    • 项(全部为空的)
    • 创建,更新,为了

u能优化它重用一些列

优点:与方法一相同

缺点:

  • 如果u有很多块类型或很多每种类型的特定项目的,日子会把具有宽和混乱阅读的表。
  • 一切都是空的,所以你不能肯定这些都是由刚刚在你计划的情况下看表


额外提示

必填字段使用VisualStudio创建应用程序,使用实体数据模型(.edmx文件),以“应该的方式”创建具有继承的实体,然后单击从模型生成数据库。我相信这两种方法都有利弊。