2014-02-08 100 views
-1

我正在努力决定使用哪种数据库模式。一张大桌子,或许多小(虽然更难以管理)。数据库模式设计选项

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

我打算在Web应用程序中完成所有这些工作,而不需要标准的文件夹/网页结构,如小型CMS系统。

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

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

我想过将页码移动到另一个名为page_order的表中,但我想不出一种方法来维护其他表之间的有效关系,如果我进行更改。

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

感谢您花时间帮忙!

回答

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)的查找表。

+0

嗨感谢您的反馈,对于实践我想我会把两种解决方案都解决掉!这样我可以获得经验,因为我怀疑数据库规划更复杂。我已经开始使用多个表格了,因为我认为大多数列对于某个特定的模板来说是空的,而这个模板很少见,但有10列。尽管我仍然无法找到任何空列降低性能或任何其他可忽略的迹象效果如何? – Mangopop