构建“;页面”;在我的数据库中


Structuring the enabling and arranging of "pages" in my database

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

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

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

我很难找到一种合适的方式来构建我的数据库,让我知道哪些页面被启用,如果它们被启用,它们的顺序是什么。

有人能帮我吗?

您认为以下内容如何:

page

id_page
pagename
enabled
sort

field

id_field
fieldname

page_field

fi_page
fi_field
value

这一原理被称为实体-属性-价值模型

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

page

id_page
pagename
enabled
sort
commonfield1
commonfield2

subpage1

id_subpage1
fi_page
subpage1_specialfield

subpage2

id_subpage2
fi_page
subpage2_specialfield

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

TABLE页面(页面内容在此处)

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;

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