我正在寻找将 IIS 6.0 访问日志(5 个服务器,每天超过 400MB)插入 SQL 数据库。让我害怕的是尺寸。您正在复制大量信息(即站点名称、网址、引荐来源网址、浏览器),并且可以通过索引和查找表进行规范化。
我寻找自己的数据库而不是使用其他工具的原因是它有 5 个服务器,我需要非常自定义的统计数据和报告,每个、少数或全部。安装任何(特别是开源)软件也是大屠杀(需要有 125% 的功能并且需要几个月的时间)。
我受伤了最有效的方法是什么?有人看过有关它的示例或文章吗?
我的一位同事创建了一个类似于以下的架构。这是一个简化的模式,仅包括解决此问题所需的部分。
系统规则如下:
架构是:
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) 我在 SO 上问了一个类似的问题,并被建议在这里问问题类型。这是关于关系数据库的课程。一个示例问题询问“为什么关系数据库中的每个表都应该是第一范式”我的第一个问题是不是 3NF 被认为更好,所以该语句不会是错误的吗?我的第二个问题是关于 SO 人们说第一范式很好,因为它消除了冗余。我不知道它是如何做到这一点的,因为 1) 所有值都是原子的 2) 有一个主键 - 这两个都没有消除冗余。
我想另一种问法是为什么值是原子的很重要?
鉴于以下表格:
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 时,name和email字段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
我有一个源表,它看起来基本上是这样的:
实际的表有类似于 500 个编号的列(并没有真正计算它们 - 有各种各样的编号为 1-7 的字段,然后是另一个编号为 1-25,乘以 7 的字段)每个工作日(不,这不是我的设计) ,目前大约有 38,600 行(每周增加)。
我有一个 SSIS 包,它试图标准化这些数据......目前看起来像这样:

每个“源”从同一个源表中选择一组编号的列,UNION ALL 组件将 7 个源合并为一个,从而产生大约 258,900 行。
工作流的其余部分添加一些计算列,查找代理键(例如EmployeeCode用于查找EmployeeId,然后计算日期并用于查找 a TimeId),然后“修改”的行得到更新和“新的”被插入到规范化表中;未更改的行最终无处可去。
有没有更好的方法(例如减轻内存压力)来规范化源数据?
我正在为投票应用程序设计一个数据库。用户可以回答一堆问题,然后我们将它们存储起来。
我想存储每个问题的正确答案,以便我们可以检查他们是否正确回答了问题。
问题可以有不同的“类型”:
我应该如何存储正确答案?
添加correct_answer到questions和options
加入只是一个correct_answer字段questions将不会在情况下,工作question有type multiple_reponse。我想过添加correct_answer到两者questions和optionswherequestions将有一个字符串或数字与正确的答案,并options会简单地得到一个trueor false。如果所有我们希望检查options与correct_answer设置为true被选中与否,如果一个option与correct_answer设置为false选择
创建一个名为的新表 correct_answer
添加 2 列:
correct_answeroptions_id然后检查是否设置了任何一个。我们必须correct_answer为每个option.
添加correct_answer到questions
我们可以使用type来确定如何阅读correct_answer,然后correct_answer直接检查或explode()以逗号分隔的option_id值来检查答案
我想知道哪个选项是最佳实践,或者是否有人有更好的主意。
我的整个 …
我正在研究一个数据建模项目,我正在尝试为一个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 行。
问题
声明复合 PRIMARY KEY (PK)(DateCreated, SecurityId, FieldID)与添加新 IDENTITY 列(即系统生成的代理)并将其用作 PK 的优缺点?
我相信,如果我添加一个 IDENTITY 列并将其用作 PK,那么该表将不会处于第三范式(3NF)中,因为非 PK 列之间将存在函数依赖关系,即,(DateCreated, SecurityId, FieldID)和Value.
由于此表保留了历史数据,因此我不希望将此表加入其他外部表,应用程序将主要使用 SELECT 语句与其进行交互。基于这些假设,将表保持在 …
我一直教导将格式化数据存储在表格中是不正确的。例子包括:
+----------------+----+ | 数据 | 好的 | +----------------+----+ | 0370101234 | ? | +----------------+----+ | 03 7010 1234 | | +----------------+----+ | (03) 7010 1234 | | +----------------+----+
(为什么不支持表格?!)
数据是一个澳大利亚电话号码,通常有 10 位数字,包括区号。
包括格式间距或字符会引入歧义,因此更难排序或搜索。
问题是:标准或关系理论中有没有涵盖这个问题的内容?
编辑
这不是关于电话号码的问题。我用应该以最简单的形式存储的数据说明了一个点,即使它是用格式化字符显示的。
其他示例包括$显然从未与货币值一起存储的符号,以及有其自身问题的千位分隔符。
我第一次遇到 MySQL 查询执行时间过长(约 5 分钟)的问题。
数据库中的数据是高度(而非任意)规范化的。它非常有效地组织和改组数据以用于不同目的的许多非常有用的方式显示,除了这个特定的查询正在向它投掷扳手。
我无法理解这样做的原因。但是,一些背景信息可能会对其他任意复杂的查询有所了解。
该公司将世界划分为许多团队(macroregions)。根据他们的专业知识,每个人都属于一两个团队。
例如,有许多不同的团队。几个例子是Spanish、Sahara、Iberia、Portuguese、Jungle团队。每个团队都与其他团队有相当大的重叠,但在某种意义上是独立的。
该Arabic团队与Sahara团队密切合作,因为数据库告诉他们由于地理位置重叠,他们必须在某些任务上一起工作。在Spanish和Portuguese球队也紧密合作,他们与工作都Americas与Europe队和Portuguese队还与Africa球队一样,该Arabic团队。
每个团队都有一组给定的区域,这些区域也不是该特定团队独有的。例如,该Mediterranean地区属于大约 12 个团队,当那里发生事件时,他们都会一起工作。
每个国家属于一个或多个地区。Turkey属于Central Asia,Europe甚至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) normalization ×10
foreign-key ×2
mysql ×2
sql-server ×2
constraint ×1
join ×1
logs ×1
performance ×1
postgresql ×1
ssis ×1