在我的数据库中构建“页面”的启用和排列

时间:2013-11-19 22:40:11

标签: php mysql database data-structures structure

我有0-30页,如果启用,用户可以enable or disablere-arrange

每个页面在数据库中都有一个表,其中包含显示信息的特定变量。

在我的网站上,我有一个部分,按照它们所在的顺序显示所有已启用的页面(非常像word文档)

我无法找出构建数据库的合适方法,让我知道哪些页面已启用,如果已启用,则说明它们的顺序。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您如何看待以下内容:

page

id_page
pagename
enabled
sort

field

id_field
fieldname

page_field

fi_page
fi_field
value

这个原则叫做Entity–attribute–value model

另一种方法是使用超类型/子类型:

page

id_page
pagename
enabled
sort
commonfield1
commonfield2

subpage1

id_subpage1
fi_page
subpage1_specialfield

subpage2

id_subpage2
fi_page
subpage2_specialfield

超类型/子类型设计接近您的设计,因为每个页面都有一个额外的表格。但是你有一个超级page可以保存公共字段。

答案 1 :(得分:0)

表页面(您的页面内容在此处)

id_page
other...

TABLE用户(您的所有用户信息都在这里)

user_id
others...

TABLE users_pages(您的“加入”表,将页面与用户关联)。每个用户都有与页面一样多的行。因此,您的总行数是用户数X页数。这可能非常大!如果正确设置索引,仍然应该很快。

user_id
page_id
disabled
rank

更简单的情况:选择为用户'7'启用的页面:

SELECT page_id
FROM pages p
LEFT JOIN users_pages up 
ON p.page_id = up.page_id 
WHERE up.disabled != TRUE AND up.user_id = 7;

按顺序选择为用户'7'启用的页面:

SELECT page_id
FROM pages p
LEFT JOIN users_pages up 
ON p.page_id = up.page_id 
WHERE up.disabled != TRUE
AND up.user_id = 7
ORDER BY up.rank desc;

此解决方案目前尚未处理用户未指定页面订单的情况。它也不处理在用户指定订单后添加新页面的情况。你会想要处理这些情况,你可以使用这种结构。