正确的数据库设置 - 加入太多?

时间:2016-12-19 13:05:23

标签: mysql join

我正在建立一个数据库,我有电影,导演,相机操作员,得分作曲家等。

现在每部电影都有一行标题,描述等。此外,还应该有导演,作曲家等栏目。

我不想为电影表中的每一行重复导演的名字,所以我将导演放在另一张桌子上,将作曲家放在不同的桌子上等等。

在电影表中,我用外键引用导演,作曲家等的数据。

要获取电影的所有数据,我会创建一个视图,我将所有表连接在一起,这样一个MySQL查询就能给我一个人类可读的电影信息。

这是一个很好的方法吗?或者几个左连接不是一个好主意?

视图看起来像这样(kindof)

   @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

        if(url.toLowerCase().contains("/favicon.ico")) {
            try {
                return new WebResourceResponse("image/png", null, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    @SuppressLint("NewApi")
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

        if(!request.isForMainFrame() && request.getUrl().getPath().endsWith("/favicon.ico")) {
            try {
                return new WebResourceResponse("image/png", null, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return null;
    }

这是一种有效的方法吗?

1 个答案:

答案 0 :(得分:0)

正如Gordon Linoff评论的那样,这称为规范化,一般是存储数据的好方法。

您在定义表格时肯定需要LEFT连接。如果用INNER JOIN替换LEFT联接,那么对于没有音乐家或没有导演的电影,结果中根本就没有行。

但是,您提出的标准化最终会有很多表格可用于电影行业中不同的创作角色。即使要涵盖奥斯卡颁奖典礼和其他奖项的主要创意角色,您也需要十张或更多的表格。

避免这种情况的一种常见方法是为电影设置一个表格,为广告素材设置一个表格。第三个表用于连接两个不同角色。例如:

TABLE CREATIVE_ROLES_LINK ( LIKN_ID INT, MOVIE_ID INT, ROLE_NAME VARCHAR(30), PERSON_ID INT);

以上显示了基本思路。实际上,可以使用存储在另一个表中的ROLE_NAME进行更多规范化。