You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分oscars数据库中Oscars表为两张高效表并保存列至Series变量

拆分Oscars表为两张规范化表的方案

嘿,这是个很典型的数据库规范化需求——把包含重复维度信息和多值事实的单表拆分成一对多关联的两张表,既消除冗余又提升查询效率。

拆分思路

原Oscars表肯定存在重复的典礼属性(比如每届的年份、举办地点、主持人这些,每一条获奖记录都会重复存一遍),和多条获奖事实(每届有多个奖项/获奖者)。我们可以按照「维度表+事实表」的模式拆分:

  1. 维度表:Ceremonies(颁奖典礼信息)
    保存每届奥斯卡的唯一核心属性,因为每年一届,所以每一行对应一届典礼,用唯一主键标识。
    列定义(对应w4_table1):

    • ceremony_id:主键(自增整数或用届数,比如第95届就存95),用于关联另一张表
    • year:举办年份(比如2023)
    • ceremony_number:届数(比如95)
    • host:主持人姓名
    • venue:举办场馆
  2. 事实表:AwardWinners(获奖记录)
    保存每一个奖项的提名/获奖详情,每一行对应一个提名者/奖项,通过外键关联到Ceremonies表。
    列定义(对应w4_table2):

    • winner_id:主键(自增整数,唯一标识每一条提名记录)
    • ceremony_id:外键,关联Ceremonies表的主键,标记这条记录属于哪一届
    • category:奖项类别(比如「最佳影片」「最佳导演」)
    • nominee:提名对象(影片名或人名)
    • is_winner:布尔值,标记是否获奖
    • winner_name:获奖者姓名(针对个人奖项,可选)

用Pandas Series保存表列

import pandas as pd

# 维度表Ceremonies的列
w4_table1 = pd.Series(
    ['ceremony_id', 'year', 'ceremony_number', 'host', 'venue'],
    name='Ceremonies Table Columns'
)

# 事实表AwardWinners的列
w4_table2 = pd.Series(
    ['winner_id', 'ceremony_id', 'category', 'nominee', 'is_winner', 'winner_name'],
    name='AwardWinners Table Columns'
)

为什么这样更高效?

  • 消除冗余:比如举办地点、主持人这些信息只存一次,不用在每条获奖记录里重复存储,节省存储空间
  • 便于维护:如果某届的主持人信息需要修改,只需要更新Ceremonies表的一行,不用修改几十条获奖记录
  • 查询更灵活:可以单独查询典礼信息,或者关联查询某届的所有获奖记录,性能更优

内容的提问来源于stack exchange,提问作者Joe Camphens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:03:45