要坚持第一范式,你必须避免的一件事是重复组.而不是:
CustID Name Address Phone1 Phone2 Phone3
102 Jerry 234 East.. 555-2342 555-9854 555-2986
Run Code Online (Sandbox Code Playgroud)
您应该创建第二个电话号码表,然后在连接上创建:
CustID Name Address Phone
102 Jerry 234 East.. 555-2342
102 Jerry 234 East.. 555-9854
102 Jerry 234 East.. 555-2986
Run Code Online (Sandbox Code Playgroud)
有时,它有点模棱两可,而且很难判断一组列标题何时合格.例如,假设您目前在每个硬件上运行两次测试.您的第一个数据库设计产生了最横向的方法:
设计1
SN Test1_Max Test1_Min Test1_Mean Test2_Max Test2_Min Test2_Mean
2093 23 2 15 54 -24 45
Run Code Online (Sandbox Code Playgroud)
显然,这是一个重复的组,可以更容易地表示为(在"部件"和"测试"之间的连接):
设计2
SN Test Max Min Mean
2093 1 23 2 15
2093 2 54 -24 45
Run Code Online (Sandbox Code Playgroud)
但是,你可以更加垂直:
设计3
SN Test Statistic Value
2093 1 Max 23
2093 1 Min …Run Code Online (Sandbox Code Playgroud) 是否有更好或更简单的方法来存储SQL Server数据库中的枚举(在C#等编程语言中可用的枚举),而不是简单地为每个枚举创建一个查找表(带有Id,代码和名称作为列)(特别是当有每个表中只有很少的行)?我发现一篇文章建议只为所有枚举创建一个查找表,并且一些人在评论中批评该方法,这违反了参考数据的完整性.如果所有枚举仅由一个表使用,那么使用某些预定义代码然后为它们添加约束(可能使用扩展属性)是一个好习惯吗?
在回顾 JavaScript 概念时,我发现String.normalize(). 这并没有出现在 W3School 的“ JavaScript String Reference ”中,因此,这就是我之前可能错过的原因。
我在HackerRank中找到了更多有关它的信息,其中指出:
返回一个字符串,其中包含调用字符串值的 Unicode 规范化形式。
举个例子:
var s = "HackerRank";
console.log(s.normalize());
console.log(s.normalize("NFKC"));
Run Code Online (Sandbox Code Playgroud)
具有作为输出:
HackerRank
HackerRank
Run Code Online (Sandbox Code Playgroud)
另外,在GeeksForGeeks中:
string.normalize() 是 javascript 中的内置函数,用于返回给定输入字符串的 Unicode 规范化形式。
举个例子:
<script>
// Taking a string as input.
var a = "GeeksForGeeks";
// calling normalize function.
b = a.normalize('NFC')
c = a.normalize('NFD')
d = a.normalize('NFKC')
e = a.normalize('NFKD')
// Printing normalised form.
document.write(b +"<br>");
document.write(c +"<br>");
document.write(d +"<br>");
document.write(e);
</script>
Run Code Online (Sandbox Code Playgroud)
具有作为输出:
GeeksForGeeks
GeeksForGeeks …Run Code Online (Sandbox Code Playgroud) CREATE TABLE SupplierQuote
(
supplierQuoteID int identity (3504,2) CONSTRAINT supquoteid_pk PRIMARY KEY,
PONumber int identity (9553,20) NOT NULL
.
.
.
CONSTRAINT ponumber_uq UNIQUE(PONumber)
);
Run Code Online (Sandbox Code Playgroud)
上面的ddl产生错误:
Msg 2744,Level 16,State 2,Line 1为表'SupplierQuote'指定的多个标识列.每个表只允许一个标识列.
我怎么解决呢?我希望PONumber能够自动增加.
假设您正在处理您的正常联系人数据库(您知道...姓名,电话号码,地址,电子邮件等...).如果你在当地对此表示不满,那么处理这个问题通常不是一个大问题,但是当我们看到国际集时,它就是.
看着电话号码系统,你会认为这很简单,但事实并非如此.在北美,我们通常有1-222-333-4444格式用于呼叫人.这当然分为您的国际拨号代码,区号,交换前缀和行号.问题:实际电话号码是有限的,美国大约有220个区号在潜在的1000个区域内,每个区号只有有限数量的交换机,并且线路号码仅限于该国家/地区的特定用途(例如, 911的模式受到限制,只有10,000个中的约3/4在使用中.把这个带到英国,他们有自己的行号规则,例如保留0300-0399块的大部分特定用途,以及其他限制.国际代码也是有限的.规范区号,交换,并将数据验证检查放到电话号码上变得复杂了.我不会详细说明我们何时进入不属于该地区的地方NPA计划,但我们只是确定我们不能真正信任北美模板,踢回去,并称之为一天.
我们如何规范这样的事情?我们如何验证数据?我们如何处理这些看似临时的扩展代码或内部拨号指令?
国际地址不是更好,不仅保留数据之间的差异,而且输出格式也不尽相同.我们如何处理国际邮政编码,加拿大的格式是A1A1A1,而美国的系统如55555 [-4444]?
当我遇到它们时,我很想为每种情况编写类,将它们作为XML/JSON /类似存储在数据库中,但是我如何关联字段并轻松搜索我的内容?我不想最终为每个国家创建数千张表的表格.我想要一个易于扩展的解决方案,我可以规范我的地址并验证内容.这要问太多了吗?
validation database-design normalization internationalization
Haskell如何解决"规范化的不可变数据结构"问题?
例如,让我们考虑代表前女友/男朋友的数据结构:
data Man = Man {name ::String, exes::[Woman]}
data Woman = Woman {name :: String, exes::[Man]}
Run Code Online (Sandbox Code Playgroud)
如果一个女人改变她的名字并且她和13个男人在一起会怎么样?然后所有13个人都应该"更新"(在Haskell意义上)?需要某种规范化来避免这些"更新".
这是一个非常简单的例子,但想象一个具有20个实体的模型,以及它们之间的任意关系,那么该做什么呢?
在不可变语言中表示复杂的规范化数据的推荐方法是什么?
例如,可以在此处找到Scala解决方案(请参阅下面的代码),它使用引用.在Haskell可以做些什么
class RefTo[V](val target: ModelRO[V], val updated: V => AnyRef) {
def apply() = target()
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果像上面的那些(在Scala中)更通用的解决方案在Haskell中不起作用或者它们不是必需的吗?如果它们不起作用,为什么不呢?我试图搜索在Haskell中执行此操作的库,但它们似乎不存在.
换句话说,如果我想在Haskell中建模规范化的SQL数据库(例如与酸状态一起使用),是否有一种描述外键的通用方法?一般来说,我的意思是,不要按照以下评论中chepner的建议手工编码ID.
编辑:
换句话说,是否存在一个库(用于Haskell或Scala)在内存中实现SQL /关系数据库(可能还使用事件源来实现持久性),这样数据库是不可变的和大多数SQL操作(查询/连接/插入/删除/等.)是否已实现并且是类型安全的?如果没有这样的图书馆,为什么不呢?这似乎是个不错的主意.我该如何创建这样的库?
编辑2:
一些相关链接:
haskell scala normalization immutability database-normalization
我在Dreamweaver上有四个选项:C,D,KC,KD.我应该选择哪一个?为什么?
当输入数据采用"标准化"格式而非交叉表时,Tableau通常效果最佳.这也称为从"宽格式"转换为"长格式".
也就是说,转换自:

至:

Tableau 为Excel用户提供了"重塑工具",但如果您没有Excel,则会遇到困难.
那么如何在不使用Excel的情况下将电子表格转换为此格式?
data-manipulation normalization google-sheets reshape tableau-api
在应用最小最大缩放以标准化您的要素时,是否对整个数据集应用最大最大缩放比例,然后将其拆分为训练,验证和测试数据?
或者首先拆分然后使用特定集合中的最小值和最大值对每个集合应用最小值?
最后,在对新输入进行预测时,是否应该使用训练数据中的最小值,最大值在输入网络之前对该输入的特征进行标准化?
假设您正在收集有关即将发布的超级英雄电影的内幕信息,您的主电影表看起来像这样:
表格1
Title Director Leading Male Leading Female Villain
--------------------------------------------------------------------------
Green Lantern Kubrick Robert Redford Miley Cyrus Hugh Grant
The Tick Mel Gibson Kevin Sorbo Linda Hunt Anthony Hopkins
Run Code Online (Sandbox Code Playgroud)
这通常可以很好地工作,并允许非常简单的查询以及行之间的比较.
但是,您希望跟踪每个数据事实的来源,以及发现该事实的记者的姓名.这似乎暗示了某种类似这样的EAV表:
表2
Movie Attribute Value Source Journalist
----------------------------------------------------------------------------------
Green Lantern Director Kubrick CHUD Sarah
Green Lantern Leading Male Robert Redford CHUD James
Green Lantern Leading Female Miley Cyrus Dark Horizons James
Green Lantern Villain Hugh Grant CHUD Sarah
The Tick Director Mel Gibson Yahoo Cameron
...
Run Code Online (Sandbox Code Playgroud)
虽然它可以轻松捕获我们想要的元数据,但却更难以进行查询.简单地获取单个电影的所有基本数据需要更多.更具体地说,你必须在这里处理四行以获得绿灯侠上的四个重要信息,而在表1中它是一个单独的,封装良好的行.
所以我的问题是,鉴于我刚才描述的复杂情况,并且因为我知道EAV表一般要避免,EAV仍然是最好的解决方案吗?它似乎是表示此数据的唯一合理方式.我看到的唯一另一种选择是将表1与另一个 …
normalization ×10
sql ×2
sql-server ×2
database ×1
dreamweaver ×1
forms ×1
haskell ×1
immutability ×1
javascript ×1
reshape ×1
scala ×1
string ×1
t-sql ×1
tableau-api ×1
unicode ×1
validation ×1