1

假设我在 mysql 数据库中有三个表,其中包含如下数据:

- Sections (which have a number, a title)
- Sub-sections (which also have a number and a title but the title is the same as the title of the next data type with is 'statements')
- Statements (which have a number, a title (the same as the title from Sub-sections)

正如您在上面看到的,表格子部分语句中的字段标题是相同的,并且它们具有相同的数据。有没有更好的方法可以在我的表中表示这个,这样我就不会有重复的数据?

感谢您的任何建议

4

2 回答 2

1

任何冗余都可能导致数据损坏:如果有两条数据代表相同的信息,而其中一条发生了变化,你会突然不知道哪一条是正确的。实际上,您已经丢失了信息!

这就是规范化很重要的原因:它最大限度地减少了冗余(和依赖性)。

有时,出于性能原因(所谓的“非规范化”)故意进行冗余,但这总是在衡量对性能的影响并仔细权衡数据损坏风险之后进行。除非您这样做,否则您的“默认”方法应该是避免数据模型中的冗余。

你还没有解释你的数据模型应该是什么意思,但我猜你需要这样的东西:

在此处输入图像描述

请注意,该语句没有标题。您可以通过 JOINingStatementSubSection.

注意:如果您预计您将需要少于或多于两个级别的部分,您可以通过 Mahmoud Gamal提出的“邻接列表”来表示。有关表示分层数据的其他一些方法,请查看Bill Karwin的此演示文稿。

于 2013-04-04T21:04:29.067 回答
1

是的,规范化你的表格。

您可以只使用两个表来执行此操作;和sectionssubsections 表将仅使用一个表来表示,其中Sections一个新列ParentSectionNumber指示每个部分的父部分,根部分将NULL作为父部分编号。像这样的东西:

Sections

  • SectionNumber,
  • SectionTitle,
  • ParentSectionNumber(可为空)外键引用同一个表。

对于第二个表,我猜测每个部分或子部分都有语句,在这种情况下,创建一个引用该表的外键sections

Statements

  • StatementNumber,
  • SectionNumber外键参考Sections(SectionNumber)
于 2013-04-04T20:27:45.550 回答