我有两种方法可以设置我的数据库,我可以看到两者的好处,但我不确定考虑的方式"正确的方式"。它涉及一个赞成系统,就像Youtube风格一样,只是为了清楚地说明我的网站。
表布局的第一个想法(基本示例)
USER = user_id, etc<br>
PROJECT = project_id, user_id, etc<br>
PROJECTLIKE = project_like_id, project_id, user_id etc<br>
PROJECTDISLIKE = project_dislike_id, project_id, user_id etc
表布局的第二个想法(基本示例)
USER = user_id, etc,<br>
PROJECT = project_id, user_id, etc<br>
PROJECTLIKEDISLIKE = project_dislikelike_id, project__id, user_id, like (boolean), etc
我觉得第一个会更有效率,但第二个会更容易编写代码。是否有更好的方式或只是偏好。
问候
答案 0 :(得分:1)
考虑到你不太可能同时喜欢和不喜欢某些东西,只需要一张表来表达&#34;项目亲和力&#34;可能会做这个工作。
这也有更多选择的优势:&#34;喜欢&#34;,&#34;不喜欢&#34;甚至&#34; Meh&#34;可以很容易地包括在内。
在同一个两个实体之间有多个连接表是不方便的,除非每个连接表存储不同类型的信息。
答案 1 :(得分:1)
你可能会想要
CREATE TABLE vote_types (
vote_type INT,
vote_type_desc VARCHAR(32)
);
CREATE TABLE project_votes (
project_id BIGINT,
user_id BIGINT,
vote INT,
PRIMARY KEY (project_id, user_id)
);
CREATE INDEX project_votes_aggregated (project_id, vote);
SELECT vote, count(*) FROM project_votes WHERE project_id = ? GROUP BY vote;
该索引会减慢插入速度,但会使SELECT
非常快。在这里,你如何索引事物实际上是效率的关键。架构更像是规范化问题。