首页>Database>source

我正在努力将标准化工作笼罩在脑海中。 这是使用此数据创建数据库的正确方法吗? 使用外键而不是仅仅重复APL会更有效吗?

这是公司资料,每个公司都有外键

这是保存所有数据的表.例如,显示了几列,但还有30列左右.每个公司将拥有20年左右的数据. CompanyID链接到Company Profile表的外键。

谢谢!

最新回答
  • 2月前
    1 #

    对表进行规范化的三个很好的理由。

    它最大程度地减少了数据冗余.在您的示例中,不需要为主数据表中的每个记录重复AAPL.它仅存在于CompanyProfile表的一条记录中。

    如您所见,代替重复主数据表中的CompanyID,没关系,与文本字符串(如APL)相比,重复整数要轻得多.因此,这里可以提高性能。

    如果您不进行规范化,而是将CompanyName重复存储在主数据表中,并且Company有一天更改了它的名称,则您必须更新主数据表中的每一行以修复 公司名.但是将其标准化为自己的表意味着您只需要在一行中更改CompanyName.从维护的角度来看,这不仅更好,而且效率更高。

    *也只是一个旁注,但您的CompanyProfile表可能不需要该ForeignKey列.它具有一个PrimaryKey列,该列在其内部是唯一的(并且与主数据表中的PrimaryKey列无关).您可以将外键关系从CompanyId上的主数据表到CompanyProfile的PrimaryKey列(通常是人们设计表的方式)。

  • 2月前
    2 #

    在第二个表中,看起来像 (company_id, fiscal_year) 将是独特的,因此可以作为 PRIMARY KEY .然后删除 id

    如果您可以在各处使用股票行情,请 "AAPL" 似乎是一个合理的 .再次,扔 PRIMARY KEY .我不知道"外键"列的含义-您应该链接到PK. ( id的"重量" 和一个 SMALLINT UNSIGNED 可能不像JD所建议的那么重要-至少如果您只有数千家公司,而不是数百万。)

    VARCHAR(10) CHARSET ascii ,无论它看起来像 company_id1 将重复很多地方.但是在一个表中,它将只显示一次-您的第一个表。

    成千上万的行(数百家公司乘以20年)和30列-很好.只是没有分散在各列中的东西的"数组"。

    公司名称和代码很少更改.很久以前,"国际商业机器"更改为" IBM".股票代码" AOL"更改为" TRw".合并发生. Google成为Alphabet的一部分.等等,每一种都会引起某种打ic.规范化减少了麻烦; 您可以确定临界点在哪里-在速度/空间/麻烦/等之中。

    AAPL

  • postgresql:在Postgres中使用COPy
  • 加速MySQL(8013)从sql文件还原