如何将 Excel table 转换为关系数据库 Table 设计?

How can I translate an Excel table into a Relational Database Table Design?

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

以下Excel table/chart 显示了不同目标和尺寸组合的不同结果:

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

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

Table 目标:

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

Table 尺寸:

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

Table 用于存储不同大小和目标组合的结果的结果:

**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) 结果大小

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

你好像有这个申请关系&table:

-- 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

规范化不涉及引入新的列名或值。您可能希望使用 id 而不是值(为什么?)和关系实例的 id(为什么?),但这不是规范化。规范化是关于用始终加入它的其他 table 替换 table。

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

您的 "relationships" 是关系数据库 FK(外键)。 FK 是从 table & 列列表到 table & 列列表。 (这样的 "relationships" 实际上是关于成对的 table 的事实。应用关系由 table 表示。)每当一个 [=25= 中的列列表的值时声明一个] table 必须作为 target/referenced table 中列列表的值出现,后面的列在后者 table 中形成 CK(候选键)。 CK 是一组列,它们在 table 中是唯一的,但不包含更小的此类集合。鉴于您的 table 和 _id,您需要:

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

PS 代孕与自然 PK/CK:研究这个。 (当心——那里有很多废话。)当系统用户需要一个新名称但数据库不存储任何自然 CK 时,需要代理 CK。 (有些人甚至不称此类 id 为代理。)在自然 CK 可能发生变化时调用。用于比任何多列自然 CK 更短。经常使用,因为 DBMS 不隐藏实现:例如,它们可以更快、更小地用于索引等。PS PK 的概念不是很有帮助。注意 PK 而非 CK 方面的介绍。在使设计复杂化之前总是要有理由。