数据库效率

时间:2014-09-19 19:21:26

标签: mysql sql database

我有两种方法可以设置我的数据库,我可以看到两者的好处,但我不确定考虑的方式"正确的方式"。它涉及一个赞成系统,就像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

我觉得第一个会更有效率,但第二个会更容易编写代码。是否有更好的方式或只是偏好。

问候

2 个答案:

答案 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非常快。在这里,你如何索引事物实际上是效率的关键。架构更像是规范化问题。

相关问题