【发布时间】:2010-10-03 08:43:42
【问题描述】:
我正在设计一个涉及“页面”的应用程序,其中有许多“块”,其中有几种类型的块。但是,我正在努力寻找一种将这些数据保存在数据库中的好方法。我想有一种流行的方法可以做到这一点,这里有两种我正在考虑:
方法一
- 页表
- 身份证
- 用户
- 创建、更新等
- 方块
- 身份证
- 页面(Blocks.page = Pages.id)
- 创建、更新
- block_type(例如“文本”)
- block_id(Blocks.block_id = nBlocks.id 其中 n = block_type)
- 文本块
- 身份证
- 文本特定属性
这样做的好处是所有类型的块(创建、更新、页面、标题、顺序)共有的属性保存在一个地方。您也不必查询每个块类型表来检查当前页面的块,因为您将拥有此“索引”。缺点是在查找块时可能会有点混乱,但这仅取决于正确实现它(查找页面的所有块,按 block_type 分组,对每个 block_type 运行查询)。
接近二
- 和以前一样的页面
- 文本块
- 身份证
- 页面
- 正文,特定于文本的项目
- 创建、更新、订购
- 列出块
- 身份证
- 页面
- 列表特定项
- 创建、更新、订购等
这样做的好处是消除了查找正确表以查询每个块的令人困惑的方式。缺点是无法轻松管理块顺序 (update where order in any other block != $order),并且每个表必须具有相同的创建、更新等字段,如果需要更改它们,则需要付出一些努力。更大的问题是每个页面都必须查询每个特定于块的表,而不仅仅是肯定有页面块的块表。
还有第三种更好的方法吗?我认为最好的方法是第一种(它至少比第二种更规范化,并且表格逻辑并不那令人困惑)但我想知道我是否缺少一些东西: )
【问题讨论】:
标签: database-design relational-database