标签: normalization

我什么时候可以在SQL表中保存JSON或XML数据

当使用SQLMySQL(或任何关系数据库)时 - 我知道将数据保存在常规列中更适合索引和其他目的......

加载和保存JSON数据有时候要简单得多.并使开发更容易.

是否存在用于JSON在DB中保存原始数据的"黄金规则" ?

这样做是绝对错误的做法吗?

摘要

给出了非常好的答案,但毫无疑问,最有组织的是@Shnugo给出的答案,值得赏心悦目.

还想指出@Gordon Linoff和@Amresh Pandey给出的解释其他特殊用例的答案.

感谢上帝,大家好!

xml sql json normalization structured-data

51
推荐指数
5
解决办法
4万
查看次数

何时归一化数据库设计

我知道在Stack Overflow上已经广泛讨论了normalis(z)ation.我读过很多以前的讨论.我有一些额外的问题.

我正在研究一个至少有100个表的遗留系统.数据库具有一些非规范化结构,包含各种不同数据的表以及其他问题.我被赋予了改善它的任务.我不能再重新开始,但需要修改现有架构.

在过去,我一直试图设计规范化的数据库.现在的问题.一位高级开发人员建议在某些情况下我们无法规范化:

1)使用时态数据.例如,创建了一个链接到产品的发票.如果客户在一年后要求提供此发票的副本,我们必须能够生成原件的精确副本.如果产品价格,名称或描述已更新怎么办?资深人士建议将价格和其他产品信息复制到发票表中.我想也许我们应该有另一个表,例如productPrice,它有一个日期字段,所以我们可以跟踪价格随时间的变化.我想对产品描述和名称需要相同的东西吗?看似复杂.你怎么看?

2)数据库是一个会计系统.我对会计不是很熟悉.目前,一些摘要数据被导出并存储在数据库中.例如,当年的总销售额.我的高级助理表示,会计师喜欢通过将此值与实际根据发票等计算的数据进行比较来检查事情是否正确,以使他们相信应用程序正常工作.他说,目前我们可以判断是否有人错误地从去年删除了发票,因为总数不会相同.他还指出,在飞行中计算这些总数可能会非常缓慢.当然,我说数据不应该重复,应该在需要时进行计算.我建议我们可以使用SQL Reporting Services或其他一些解决方案来隔夜生成这些报告并缓存它们.无论如何,他不相信.对此有何评论?

非常感谢:)
干杯
马克

编辑

感谢您的出色回应.遗憾的是我只能将其中一个作为答案,因为这里有很多好的建议.

sql database-design normalization denormalization

48
推荐指数
6
解决办法
2万
查看次数

JavaScript中的程序口音减少(又称文本规范化或不合理)

我需要将2个字符串比较为相等,如下所示:

吕贝克==吕贝克

在JavaScript中.

为什么?好吧,我有一个自动完成字段,使用Lucene进行Java服务,其中地名自然存储(如Lübeck),但也被索引为规范化文本,

import sun.text.Normalizer;
oDoc.setNameLC = Normalizer.normalize(oLocName, Normalizer.DECOMP, 0)
    .toLowerCase().replaceAll("[^\\p{ASCII}]","");
Run Code Online (Sandbox Code Playgroud)

这样一来,一个不知道输入"Mèxico"的人可以输入"墨西哥"并得到一个返回"Mèxico"的比赛(在很多其他可能的点击中,如"CaféMèxico,Dubai,UAE").

现在问题是我没有能力更改服务以在服务器端进行任何突出显示,因此我在客户端JavaScript方面突出显示如下内容:

return result.replace( input.replace(/[aeiou]/g,"."), "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)

这有点花哨,因为我在输入中转义了特殊的正则表达式字符.这对于点击开头的简单单词匹配很好,但是如果你突然希望支持像"london cafe"这样的多字匹配,它真的会崩溃:

input = input.strip().toLowerCase(); //fyi prototype's strip is like trim
re = new RegEx(input.replace(/[aeiou]/g,".").replace(/\s+/g,"|"),"gi");
return result.replace(re, "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)

这不适用于说"伦敦ca"(正在输入伦敦咖啡馆),因为它会将"Jack London Cabin,Dawson City,Canada"标记为:"Ja<b>ck</b> <b>London</b> <b>ca</b>bin, Dawson <b>Ci</b>ty, <b>Ca<b/>nada"[注意"ck"和"Ci"特别]

因此,我有点像寻找一些不那么疯狂的东西:

input = input.strip().toLowerCase();
input = input.replace(/a/g,"[ÀàÁáÂâÃãÄäÅ寿??????]");
input = input.replace(/e/g,"[ÈèÉéÊêËë??????????]");
// ditto for i, o, u, y, c, n, maybe also d, g, h, j, k, l, r, s, t, w, z 
re …
Run Code Online (Sandbox Code Playgroud)

javascript unicode normalization accent-insensitive text-normalization

46
推荐指数
2
解决办法
1万
查看次数

为日历应用程序布置数据库架构

我想写一个日历应用程序.对于数据库架构来说,这是一个经常出现的问题.我想知道如何组织这个的一些意见.

如果用户创建了一个事件,并且输入它会在周一重复所有人,那会怎么样?我怎么能将所有这些存储在数据库中?我不能创造无限的事件.我只是在那里放一张包含相关信息的表格,以便我可以计算所有事件的去向吗?如果是这样,每次用户查看日历的新部分时,我都必须计算它们.如果他们翻了几个月,但他们有大量的经常性项目怎么办?

此外,架构需要处理用户单击某个项目并在序列中显示"在序列中编辑此项目"而不是序列中的所有项目.然后我将一个项目从序列中分离出来吗?

更新1

我根本没看过iCal.为了清楚起见,我认为保存允许您计算重复项目的信息,并将任何与序列不同的信息拆分是一种很好的方式来存储它以便能够传输它.但我认为在一个应用程序中,这将太慢,无法在所有地方进行日期数学运算.

database schema calendar normalization

46
推荐指数
2
解决办法
4万
查看次数

如何在MATLAB中标准化直方图?

如何对直方图进行归一化,使概率密度函数下的面积等于1?

matlab normalization histogram

45
推荐指数
4
解决办法
20万
查看次数

在数据库方面,"正确化标准化,性能标准化"是一个正确的口头禅吗?

归一化导致许多基本和理想的特征,包括审美愉悦.此外,它在理论上也是"正确的".在这种情况下,非规范化被用作折衷方案,用于实现性能的校正.除了性能之外,还有其他任何理由可以对数据库进行非规范化吗?

database database-design normalization denormalization

44
推荐指数
7
解决办法
1万
查看次数

想用一个例子来理解6NF

我刚刚阅读了@ PerformanceDBA的论点:6NF和EAV.我很好奇.我以前一直对6NF持怀疑态度,因为它只是"仅仅"在表格上粘贴了一些时间戳列.

我一直使用数据字典,不需要被说服使用它,或生成SQL代码.所以我希望答案需要一个用于生成代码的字典(或目录).

所以我想知道6NF如何处理一个非常简单的例子.项目,描述和价格表.价格随时间而变化.

那么无论如何,在转换为6NF时,Items表是什么样的?什么是"桌子爆炸?" 发生在这里?

如果该示例不适用于表格这么简单,请随意添加必要的内容以获得重点.

normalization

40
推荐指数
3
解决办法
2万
查看次数

归一化价值意味着什么?

我目前正在研究OpenGL中的照明,它使用GLSL中的一个函数,称为normalize.根据OpenGL文档,它说它"计算两个向量的标准化乘积".但是,它仍然无法解释"正常化"的含义.我已经尝试过在Google上查找标准化产品,但我似乎无法找到任何相关信息.任何人都可以解释正常化的含义并提供一些标准化值的例子吗?

opengl glsl normalization

37
推荐指数
2
解决办法
3万
查看次数

File.listFiles()使用JDK 6修改unicode名称(Unicode规范化问题)

在OS X和Linux上列出Java 6中的目录内容时,我正在努力解决一个奇怪的文件名编码问题:这些File.listFiles()和相关的方法似乎以不同于系统其他部分的编码方式返回文件名.

请注意,不仅仅是这些文件名的显示导致了我的问题.我主要感兴趣的是将文件名与远程文件存储系统进行比较,因此我更关心名称字符串的内容而不是用于打印输出的字符编码.

这是一个演示程序.它创建一个带有Unicode名称的文件,然后打印出从直接创建的文件中获取的文件名的URL编码版本,以及在父目录下列出的相同文件(您应该在空目录中运行此代码).结果显示该File.listFiles()方法返回的不同编码.

String fileName = "Trîcky Nåme";
File file = new File(fileName);
file.createNewFile();
System.out.println("File name: " + URLEncoder.encode(file.getName(), "UTF-8"));

// Get parent (current) dir and list file contents
File parentDir = file.getAbsoluteFile().getParentFile();
File[] children = parentDir.listFiles();
for (File child: children) {
    System.out.println("Listed name: " + URLEncoder.encode(child.getName(), "UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)

这是我在系统上运行此测试代码时得到的结果.请注意%CC%C3角色的表示.

OS X Snow Leopard:

File name: Tri%CC%82cky+Na%CC%8Ame
Listed name: Tr%C3%AEcky+N%C3%A5me

$ java -version
java version "1.6.0_20"
Java(TM) SE …
Run Code Online (Sandbox Code Playgroud)

java unicode normalization file-encodings unicode-normalization

36
推荐指数
1
解决办法
9863
查看次数

如何在MySQL中获取多个插入行的ID?

我使用此命令将一些单词插入到两列表中:

INSERT IGNORE INTO terms (term) VALUES ('word1'), ('word2'), ('word3');
Run Code Online (Sandbox Code Playgroud)
  1. 如何获取插入每个单词的行的ID(主键).我的意思是在执行后返回类似"55,56,57"的值INSERT.MySQL有这样的回应吗?

  2. 专栏一词是UNIQUE.如果一个术语已经存在,MySQL将不会插入它.是否可以返回此复制的引用(即该术语存在的行的ID)?像"55,A响应12,56".

mysql sql database insert normalization

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