【问题标题】:How to store variably-sized relationships in a database?如何在数据库中存储可变大小的关系?
【发布时间】:2018-04-14 03:41:12
【问题描述】:

首先,我作为一个对数据库相对缺乏经验的人来找你,所以对于我犯的任何错误,我深表歉意。

在我当前的数据库中,存储了 2 种事物:人(以及有关这些人的信息)和他们喜欢的报纸。我的主表看起来像这样:

这很好用,但是现在随着我的应用程序的增长,我现在开始找到喜欢超过 1 份报纸的人!我的(大概是无知的)解决方案是创建新列 - 称为 multiple_favourite - 这将包含“是”或“否”。

如果它包含“否”,这意味着该人只有 1 份最喜欢的报纸,并且在“最喜欢的报纸”列中紧挨着它列出。然而,它有一个“是”,那么它意味着这个人喜欢不止一份报纸。

然后,我的应用程序将导航到另一个表格,如下所示:

现在,每当我的应用程序遇到在“multiple_favourite”行中有“yes”的人时,它就会导航到该表,找到相关的用户 ID,然后提取该列表。就其工作而言,这是一个很好的解决方案,但是每次您想查找一些数据时都必须解压缩列表,这感觉是一种非常糟糕的做法。

此外,它使“multiple_newspapers”表的过滤结果几乎不可能。例如,假设您想找出同时喜欢“洋葱”和“每日邮报”的每个人的姓名。在此设置中执行此操作的唯一方法是遍历表的每一行,解压缩列表,然后检查这两项是否存在。

这适用于小型数据库,但是在可扩展性方面肯定会失败。

因此,我的问题是,我该如何解决这个问题?感觉必须有一个明显的解决方案,我正在浏览,但对于我的生活,我似乎找不到它。

非常感谢任何帮助!

谢谢。

【问题讨论】:

    标签: mysql database database-design sqlalchemy


    【解决方案1】:

    将其标准化,为报纸提供一张桌子,并在两者之间建立多对多关系。

    【讨论】:

    • 谢谢@Gumerhara。为什么会是多对多而不是单对多?单个是第一个数据库中的人员条目,许多是另一个表中的多行
    • A 喜欢报纸 P 和 Q。报纸 P 被 A 和 B 喜欢。这是多对多。而且需要一张额外的桌子。
    猜你喜欢
    • 2010-09-26
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2015-03-21
    相关资源
    最近更新 更多