标签: normalization

较高规范化形式是否总是满足较低规范化形式的标准?

例如,3NF 的数据库总是 1NF 和 2NF;这是否适用于 4、5 和 6?

normalization

6
推荐指数
3
解决办法
634
查看次数

IIS 访问日志到 SQL 规范化

我正在寻找将 IIS 6.0 访问日志(5 个服务器,每天超过 400MB)插入 SQL 数据库。让我害怕的是尺寸。您正在复制大量信息(即站点名称、网址、引荐来源网址、浏览器),并且可以通过索引和查找表进行规范化。

我寻找自己的数据库而不是使用其他工具的原因是它有 5 个服务器,我需要非常自定义的统计数据和报告,每个、少数或全部。安装任何(特别是开源)软件也是大屠杀(需要有 125% 的功能并且需要几个月的时间)。

我受伤了最有效的方法是什么?有人看过有关它的示例或文章吗?

normalization logs

6
推荐指数
1
解决办法
242
查看次数

在单个列中使用来自多个表的 ID

我的一位同事创建了一个类似于以下的架构。这是一个简化的模式,仅包括解决此问题所需的部分。

系统规则如下:

  1. 部门可以有 0 到多个部门。
  2. 一个部门必须只属于一个部门。
  3. 一篇文章可以分配给一个部门,也可以分配给该部门的一个部门。

架构是:

Department
---------- 
DepartmentID (PK) int NOT NULL
DepartmentName varchar(50) NOT NULL

Division
--------
DivisionID (PK) int NOT NULL
DepartmentID (FK) int NOT NULL
DivisonName varchar(50) NOT NULL

Article
-------
ArticleID (PK) int NOT NULL
UniqueID int NOT NULL
ArticleName varchar(50) NOT NULL
Run Code Online (Sandbox Code Playgroud)

他使用一个虚构的规则(因为没有更好的术语)定义了模式,即所有 DepartmentID 都在 1 到 100 之间,所有 DivisionID 都在 101 到 200 之间。他指出,在查询文章表时,您将知道是否UniqueID 来自 Department 表或 Division 表,具体取决于它所属的范围。

我认为这是一个糟糕的设计,并提出了以下替代方案:

Department
----------
DepartmentID (PK) int NOT NULL
ParentDepartmentID (FK) int NULL …
Run Code Online (Sandbox Code Playgroud)

normalization foreign-key database-design

6
推荐指数
1
解决办法
2285
查看次数

第一范式,为什么好,如何减少冗余

我在 SO 上问了一个类似的问题,并被建议在这里问问题类型。这是关于关系数据库的课程。一个示例问题询问“为什么关系数据库中的每个表都应该是第一范式”我的第一个问题是不是 3NF 被认为更好,所以该语句不会是错误的吗?我的第二个问题是关于 SO 人们说第一范式很好,因为它消除了冗余。我不知道它是如何做到这一点的,因为 1) 所有值都是原子的 2) 有一个主键 - 这两个都没有消除冗余。

我想另一种问法是为什么值是原子的很重要?

normalization relational-theory

6
推荐指数
1
解决办法
7063
查看次数

仅当第三列为 NOT NULL 时才使用两列外键约束

鉴于以下表格:

CREATE TABLE verified_name (
  id               SERIAL PRIMARY KEY,
  name             TEXT NOT NULL,
  email            TEXT NOT NULL,
  UNIQUE (name, email)
);

CREATE TABLE address (
  id               SERIAL PRIMARY KEY,
  name             TEXT NOT NULL,
  email            TEXT NOT NULL,
  verified_name_id INTEGER NULL REFERENCES verified_name(id)
);
Run Code Online (Sandbox Code Playgroud)

如何添加附加约束,当address.verified_name_id不为 NULL 时,nameemail字段address必须与引用的字段匹配verified_name

我尝试将以下内容添加到address

FOREIGN KEY (name, email) REFERENCES verified_name(name, email)
Run Code Online (Sandbox Code Playgroud)

...但即使verified_name_id是 NULL ,该约束也会被应用。

我正在寻找类似于部分索引语法的东西,带有像这样的子句WHERE verified_name_id IS NOT NULL,但是简单地将这样的子句附加到 …

postgresql normalization foreign-key database-design constraint

6
推荐指数
1
解决办法
6822
查看次数

是否可以在没有 UNION 的情况下组合 7 个源?

我有一个源表,它看起来基本上是这样的:

  • 员工代码
  • 周开始日期
  • 工作时间Day1
  • 工作时间Day2
  • 工作时间Day3
  • 工作时间Day4
  • 工作时间Day5
  • 工作时间Day6
  • 工作时间Day7

实际的表有类似于 500 个编号的列(并没有真正计算它们 - 有各种各样的编号为 1-7 的字段,然后是另一个编号为 1-25,乘以 7 的字段)每个工作日(不,这不是我的设计) ,目前大约有 38,600 行(每周增加)。

我有一个 SSIS 包,它试图标准化这些数据......目前看起来像这样:

联合所有

每个“源”从同一个源表中选择一组编号的列,UNION ALL 组件将 7 个源合并为一个,从而产生大约 258,900 行。

工作流的其余部分添加一些计算列,查找代理键(例如EmployeeCode用于查找EmployeeId,然后计算日期并用于查找 a TimeId),然后“修改”的行得到更新和“新的”被插入到规范化表中;未更改的行最终无处可去。

有没有更好的方法(例如减轻内存压力)来规范化源数据?

normalization sql-server ssis sql-server-2014

6
推荐指数
1
解决办法
166
查看次数

存储正确答案以进行检查

我正在为投票应用程序设计一个数据库。用户可以回答一堆问题,然后我们将它们存储起来。

相关的 ERD 部分 在此处输入图片说明

我想存储每个问题的正确答案,以便我们可以检查他们是否正确回答了问题。

问题可以有不同的“类型”:

  • 细绳
  • 数字
  • single_response
  • 多重响应

我应该如何存储正确答案?

添加correct_answerquestionsoptions

加入只是一个correct_answer字段questions将不会在情况下,工作questiontype multiple_reponse。我想过添加correct_answer到两者questionsoptionswherequestions将有一个字符串或数字与正确的答案,并options会简单地得到一个trueor false。如果所有我们希望检查optionscorrect_answer设置为true被选中与否,如果一个optioncorrect_answer设置为false选择

创建一个名为的新表 correct_answer

添加 2 列:

  • correct_answer
  • options_id

然后检查是否设置了任何一个。我们必须correct_answer为每个option.

添加correct_answerquestions

我们可以使用type来确定如何阅读correct_answer,然后correct_answer直接检查或explode()以逗号分隔的option_id值来检查答案

我想知道哪个选项是最佳实践,或者是否有人有更好的主意。

我的整个 …

mysql normalization database-design

6
推荐指数
1
解决办法
141
查看次数

第三范式:复合 PRIMARY KEY 与系​​统生成的代理 (IDENTITY)

我正在研究一个数据建模项目,我正在尝试为一个history只有四列的表找出最好的数据建模方法:

CREATE TABLE FooHistory
(
    SecurityID  INT (FK),     -- Part of the natural PK.
    FieldID     INT (FK),     -- Part of the natural PK.
    DateCreated DATETIME2(0), -- Part of the natural PK.
    Value       VARCHAR(50)
);
Run Code Online (Sandbox Code Playgroud)

此表中的自然复合 KEY 将是(DateCreated, SecurityId, FieldID),并且 ETL 过程每 30 分钟将向此表添加 ~ 2K 行。

问题

  1. 声明复合 PRIMARY KEY (PK)(DateCreated, SecurityId, FieldID)与添加新 IDENTITY 列(即系统生成的代理)并将其用作 PK 的优缺点?

  2. 我相信,如果我添加一个 IDENTITY 列并将其用作 PK,那么该表将不会处于第三范式(3NF)中,因为非 PK 列之间将存在函数依赖关系,即,(DateCreated, SecurityId, FieldID)Value.

  3. 由于此表保留了历史数据,因此我不希望将此表加入其他外部表,应用程序将主要使用 SELECT 语句与其进行交互。基于这些假设,将表保持在 …

normalization database-design sql-server sql-server-2014

6
推荐指数
1
解决办法
2720
查看次数

SQL:在数据中存储格式

我一直教导将格式化数据存储在表格中是不正确的。例子包括:

+----------------+----+
| 数据 | 好的 |
+----------------+----+
| 0370101234 | ? |
+----------------+----+
| 03 7010 1234 | |
+----------------+----+
| (03) 7010 1234 | |
+----------------+----+

(为什么不支持表格?!)

数据是一个澳大利亚电话号码,通常有 10 位数字,包括区号。

包括格式间距或字符会引入歧义,因此更难排序或搜索。

问题是:标准或关系理论中有没有涵盖这个问题的内容?

编辑

这不是关于电话号码的问题。我用应该以最简单的形式存储的数据说明了一个点,即使它是用格式化字符显示的。

其他示例包括$显然从未与货币值一起存储的符号,以及有其自身问题的千位分隔符。

normalization database-design

6
推荐指数
1
解决办法
1285
查看次数

意外的超长查询时间(使用嵌套 WHEN-IN 约 5 分钟)

我第一次遇到 MySQL 查询执行时间过长(约 5 分钟)的问题。

数据库中的数据是高度(而非任意)规范化的。它非常有效地组织和改组数据以用于不同目的的许多非常有用的方式显示,除了这个特定的查询正在向它投掷扳手。

我无法理解这样做的原因。但是,一些背景信息可能会对其他任意复杂的查询有所了解。


该公司将世界划分为许多团队(macroregions)。根据他们的专业知识,每个人都属于一两个团队。

  • 例如,有许多不同的团队。几个例子是SpanishSaharaIberiaPortugueseJungle团队。每个团队都与其他团队有相当大的重叠,但在某种意义上是独立的。

  • Arabic团队与Sahara团队密切合作,因为数据库告诉他们由于地理位置重叠,他们必须在某些任务上一起工作。在SpanishPortuguese球队也紧密合作,他们与工作都AmericasEurope队和Portuguese队还与Africa球队一样,该Arabic团队。

  • 每个团队都有一组给定的区域,这些区域也不是该特定团队独有的。例如,该Mediterranean地区属于大约 12 个团队,当那里发生事件时,他们都会一起工作。

  • 每个国家属于一个或多个地区。Turkey属于Central AsiaEurope甚至Mediterranean,以及其他一些。

鉴于所有这些,有必要向每个人展示他们团队中的其他人正在做什么,以及不在他们的团队中但具有重叠区域的人。

查询 1完美地完成了这一点,而且非常快,不到 0.09 秒。


                SELECT report_name 
                FROM reports 
                WHERE region IN (
                    SELECT distinct region 
                    FROM macroregions
                    WHERE macroregion IN (
                        SELECT distinct …
Run Code Online (Sandbox Code Playgroud)

mysql performance normalization join

5
推荐指数
1
解决办法
1345
查看次数