数据库架构设计选项

时间:2014-02-08 16:13:02

标签: sqlite database-design database-schema

我很难决定使用什么数据库架构。一张大桌子,或许多小桌子(虽然更难管理)。

我有10个模板,每个模板都有自己的文本字段。我试图将模板的文本存储在数据库中,然后当调用网页时,我将在html模板中显示正确的文本。因为这些模板的混合将在一系列屏幕中,您可以向后或向前导航,我需要能够对它们进行排序,我只能想到添加page_number列。我还想重新排序它们并根据需要使用page_number列删除它们。

我计划在Web应用程序中完成所有这些操作,而不需要像小型CMS系统那样的标准文件夹/网页结构。

选项1, 我可以创建一个包含许多列的大型表,其中很多列都是空的,每行超过一半。这不好吗?

选项2, 我可以只使用所需的相关模板列来创建许多表。 我看到的问题是,当我删除一行时,在每个表中重新填充列的头痛,因为我需要重新排序表示页码的列。如果我使用一张大桌子,我会减少。

我曾想过将页码移到另一个名为page_order的表中,但如果我进行更改,我想不出能够在其他表之间保持有效关系的方法。

我还没弄清楚当删除一行时如何重新排序数据库中的列。当然这是一个常见的问题!?

感谢您抽出宝贵时间提供帮助!

1 个答案:

答案 0 :(得分:0)

让一个表每个模板包含一行。它可能看起来像:

id (INT, auto-increment)
page_order (INT, unique key here, so pages cannot have the same number)
field1 (STRING, name of the text field) 
value1 (STRING, contents of the text field)
field2
value2

然后你必须决定任何页面可以有的最大字段数(N),并继续将字段/值列添加到N.

这样做的好处是你有一个表没有稀疏填充(只要模板的字段数相同,即使这些字段的名称不同)。

如果您想对他进行改进(可能不需要少量数据),您可以将字段更改为INT ID并将其连接到包含(field_id,field_name)的查找表。