我有0-30页,如果启用,用户可以enable or disable
和re-arrange
。
每个页面在数据库中都有一个表,其中包含显示信息的特定变量。
在我的网站上,我有一个部分,按照它们所在的顺序显示所有已启用的页面(非常像word文档)
我无法找出构建数据库的合适方法,让我知道哪些页面已启用,如果已启用,则说明它们的顺序。
有人可以帮我解决这个问题吗?
答案 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;
此解决方案目前尚未处理用户未指定页面订单的情况。它也不处理在用户指定订单后添加新页面的情况。你会想要处理这些情况,你可以使用这种结构。