【问题标题】:Simple database design - some columns have multiple values简单的数据库设计 - 一些列有多个值
【发布时间】:2021-07-15 04:30:07
【问题描述】:

警告:对数据库设计/建模非常陌生,请耐心等待 :)

我正在尝试设计一个简单的数据库,将有关图像的信息存储在档案中。除了file_name(这是一个不同的字符串),我还有像genrestarring这样的字段,其中每个字段可能包含多个字符串(如果图像与多种流派相关联,和/或图像有多个演员在里面)。

现在数据库只是一个以file_name 为键的表,而starringgenre 等字段只存储了多个逗号分隔的值。我可以使用通配符和likein 运算符很好地查询它,但我想知道是否有更优雅的方法来分解数据,以便更容易使用/查询。例如,我希望能够找出档案中有多少独特的演员,但我认为当前模型不可能做到这一点。

我意识到这是一个关于数据建模的非常基本的问题,但是任何人都可以提供或阅读您可以指导我的任何指导将不胜感激!

谢谢!

【问题讨论】:

    标签: database sqlite database-design


    【解决方案1】:

    您需要创建额外的表才能坚持规范化。在您的情况下,您需要 4 个额外的表来表示这些 n->m 关系(如果关系是 1->n,则额外 2 个就足够了)。

    表格:

    图片(id,文件名)

    类型(id、名称)

    image_genres(image_id,genre_id)

    星星(id、姓名、...)

    image_stars(image_id,star_id)

    还有表格中的一些数据:

    图像表

    id file_name
    1 /users/home/song/empire.png
    2 /users/home/song/promiscuous.png

    类型表

    id name
    1 pop
    2 blues
    3 rock

    image_genres 表

    image_id genre_id
    1 2
    1 3
    2 1

    星星表

    id name
    1 Jay-Z
    2 Alicia Keys
    3 Nelly Furtado
    4 Timbaland

    image_stars 表

    image_id star_id
    1 1
    1 2
    2 3
    2 4

    对于数据库中的唯一参与者计数,您可以简单地运行下面的 sql 查询

    SELECT COUNT(name) FROM stars
    

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多