【问题标题】:How can I translate an Excel table into a Relational Database Table Design?如何将 Excel 表转换为关系数据库表设计?
【发布时间】:2016-02-22 11:11:32
【问题描述】:

我有一个数据表,我想确保我为数据库表设计正确格式化它。

以下 Excel 表格/图表显示了不同目标和规模组合的不同结果:

        fast  ave  slow
small    A     B     C
med      D     E     F
large    G     H     I

从 Excel 格式转换和规范化后,我最终得到了以下 3 个数据库表:

目标表:

**goal**
id  name
1   fast
2   ave
3   slow

尺寸表:

**size**
id  name
1   small
2   med
3   large

存储不同规模和目标组合的结果的结果表:

**outcome**
id  goal_id   size_id   name
1      1         1        A
2      2         1        B
3      3         1        C
4      1         2        D
5      2         2        E
6      3         2        F
7      1         3        G
8      2         3        H
9      3         3        I

会有以下一对多关系: 1) 目标到结果 2) 结果的大小

我是在正确的轨道上还是我错过了一个关键概念?谢谢!

【问题讨论】:

    标签: database-design relational-database database-schema


    【解决方案1】:

    你好像有这个应用关系&表:

    -- outcome of goal GOAL with size SIZE has name NAME
    Outcome(goal, size, name)
    
    goal      size     name
    fast      small    A
    ave       small    B
    slow      small    C
    fast      med      D
    ave       med      E
    slow      med      F
    fast      large    G
    ave       large    H
    slow      large    I
    

    规范化不涉及引入新的列名或值。您可能想使用 ids 而不是值(为什么?)和 ids 用于关系实例(为什么?),但这不是规范化。规范化是将一个表替换为始终连接到该表的其他表。

    我的结果的 CK 是(目标,大小)。有理由支持和反对在各种情况下引入 id。但是在这里,由于表格的重点是通过目标和大小进行查找,因此很难理解为什么需要 id。 (不幸的是,有些 ORM 要求您有一个单列 CK。)

    您的“关系”是关系数据库 FK(外键)。 FK 是从表和列列表到表和列列表。 (这种“关系”实际上是关于表对的事实。应用程序关系由表表示。)当一个源/引用表中的列列表的值必须作为目标中列列表的值出现时声明一个/referenced 表和后面的列在后面的表中形成 CK(候选键)。 CK 是一组在表中唯一的列,但不包含较小的此类集合。鉴于您的表带有_ids,您需要:

    FOREIGN KEY outcome (goal_id) REFERENCES goal (goal_id)
    FOREIGN KEY outcome (size_id) REFERENCES size (size_id)
    

    PS Re 替代与自然 PK/CK:研究这个。 (当心——那里有很多废话。)当系统用户需要一个新名称但数据库不存储任何自然 CK 时,需要一个代理 CK。 (有些人甚至不称这样的 ids 为代理人。)当自然 CK 可能改变时被要求。过去只是比任何多列自然 CK 短。经常使用,因为 DBMS 不隐藏实现:例如,它们可以更快、更小用于索引等。 PS PK 的概念不是很有帮助。谨防以 PK 而不是 CK 的形式呈现。在使设计复杂化之前总是有一个理由。

    【讨论】:

    • 根据您的回答,听起来我只是在创建额外的表格,而实际上,我应该只使用一个表格,例如:outcome [id goal size name ] [1 快速小 A] [2 平均小 B] [3 慢小 C] [4 快速 D] [5 平均 E] [6 慢速 F] [7 快速大 G] [8 平均大 H] [ 9 慢大 I] 这样对吗?
    • 我想我在某处读到应该使用代理键(而不是复合键)作为主键。显然,我是数据库设计的新手,所以我不清楚为什么要使用代理而不是复合(除了它似乎更容易键入)。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多