标签: database-normalization

数据正常化在什么时候变得荒谬可笑?

我经常发现自己质疑在创建数据库和关系时是否采取正确的方法来计划未来的可扩展性.

我有以下情况:

  1. 我有一张Donor桌子和一张Recipient桌子.这两个表共享公共信息,如first_name,last_name,email_address,date_of_birth,等似乎都,如果你不介意我的面向对象语言,都有一个共同的抽象类型的Person.有可能某个人在某一点上Recipient可能会Donor通过捐赠的方式成为一个,所以重要的是不要在表格之间复制信息.我应该选择继承模式,还是应该只将外键DonorRecipients添加到Person表中?

  2. 最初,我在考虑简单地将属性email_address和街道地址属性直接映射到需要它们的东西,但是可能会出现一个人有多个电子邮件地址或邮寄地址(即:家庭,工作等)的可能性.这意味着我们有一个像这样的模型:

    create table person(id int primary key auto increment, ..., 
        default_email_address);
    
    create table email_address(id int primary key auto increment, 
        email varchar(255), name varchar(255), is_default bool, person_id int);
    
    Run Code Online (Sandbox Code Playgroud)

    这让事情变得有点复杂,你可以想象.该name字段还涉及默认值列表以及允许自定义输入.我不能只是把它变成一个enum字段,因为有可能有人会有很多电子邮件需要添加才能完全不同......(这就是我尖叫出来的那一点"它是否值得信赖它" !?!?"并对项目感到沮丧

我想这真正归结为以下几点:数据规范化在什么时候变得荒谬可笑?我的目标是创建一个非常好的as-forward-compatible-as-possible数据模型,我不会自己创建以后创建.

sql orm database-normalization

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

规范化依赖关系

我只是想确保我正确地思考它

1)完全依赖性是指一个或多个主键确定另一个属性

2)部分依赖性是当其中一个主键确定另一个或多个属性时

3)传递依赖性是当nonkey属性确定另一个属性时

我在想它吗?

database database-normalization functional-dependencies

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

依赖保留

因此,我正在查看我的数据库备注和材料,试图让自己了解即将采访的一般概念和术语.然而,我已经陷入了依赖,然而无损连接分解.我已经搜遍了所有并且看到了许多mathy方程式,但我正在寻找一个简单而简单的英语响应或示例.

我从http://www.cs.kent.edu/~jin/DM09Fall/lecture6.ppt找到了一个powerpoint,它说明了一个我无法完全理解的例子.它发布在下面.

R = (A, B, C)F = {A ? B, B ? C)
Can be decomposed in two different ways
R1 = (A, B),   R2 = (B, C)
Lossless-join decomposition:
         R1 ? R2 = {B} and B ? BC
Dependency preserving
R1 = (A, B),   R2 = (A, C)
Lossless-join decomposition:
         R1 ? R2 = {A} and A ? AB
Not dependency preserving (cannot check B -> C without computing R1 ? R2)
Run Code Online (Sandbox Code Playgroud)

所以我理解A→B和B→C意味着你们彼此有"参考",而A→B和A→C意味着B和C之间没有参考或联系.

所以,

  1. Lossless-join分解是否意味着整体数据仍然完好无损?在这两种情况下,您仍然可以最终获得两种数据,对吧?如果这是错的,请纠正我!:)

  2. 在第二次分解中将连接B设置为C有什么意义,这又如何使它不依赖于保留? …

database database-normalization functional-dependencies

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

功能依赖的无损连接和分解

假设关系R( K, L, M, N, P)和持久的功能依赖关系R是:

 - L  -> P
 - MP -> K
 - KM -> P
 - LM -> N
Run Code Online (Sandbox Code Playgroud)

假设我们将其分解为3个关系,如下所示:

 - R1(K, L, M)
 - R2(L, M, N)
 - R3(K, M, P)
Run Code Online (Sandbox Code Playgroud)

我们如何判断这种分解是否无损? 我用过这个例子

R1∩R2= {L,M},R2∩R3= {M},R1∩R3= {K,M}我们使用函数依赖,在我看来这不是无损的,但有点混淆.

join relational-algebra lossless database-normalization functional-dependencies

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

如何在Firebase JSON树中表示双向关系?

警告:

  • 这是一个练习,以了解Firebase中更好的JSON数据库设计
  • 这不一定是现实的

我在用户和门钥匙之间有两种关系.我想了解:

  • 如何直观地表示这种关系(我可以想象它只是作为两个独立的树)
  • 如何在Firebase上运行,用户门钥匙都是父节点"myparentnodename"的子节点吗?
  • 如果我以这种方式对数据库建模,感觉效率非常低,因为每次我查询子节点"用户"时,我都会得到所有用户的回复.还是我错了?是否可以仅返回与特定用户匹配的数据?例如,让用户在哪里"user = user1"?我们可以做嵌套查询吗?例如,将前一个条件与门钥匙上的某些条件相结合,以便返回的JSON对象仅与"user1"节点中包含的门钥匙相关?

在此输入图像描述

json nosql database-normalization firebase firebase-realtime-database

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

什么是数据规范化?

可能重复:
数据库规范化究竟做了什么?

有人可以澄清数据规范化吗?有什么不同的水平?什么时候应该"去标准化"?我可以过度正常化吗?我有一张包含数百万条记录的表格,我相信我过度规范了它,但我不确定.

database database-normalization

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

6NF和历史属性数据

使用符合6NF原则标准化的数据库时,如何存储历史属性数据?

比方说,我们从@PerformanceDBA 获取此示例,但具有以下额外要求:

我们需要存储所有产品的历史数据,我们应该只需输入日期并获取该特定时间产品属性的快照.

更实际的示例:
假设上面示例中的磁盘和CPU是虚拟的,用户可以随意更改磁盘容量.我们如何改变数据库,以便我们可以在过去的任何时间(当然是在创建日期之后)检索给定磁盘的属性,同时保持5NF视图足够快.

我正在考虑的事情

  • 将时间戳列" changedate " 添加到每个属性表(这将导致带有子查询和每个属性表的连接的相当复杂的查询)
  • 为每个属性表创建一个单独的*历史表(可能会产生大量的表,因为我们有大约70个属性分布在20种产品类型中)
  • 另外:为每个属性表添加一个索引的" 当前 "列以加速5NF视图

任何帮助表示赞赏!


编辑:我知道时态数据库的概念,但问题是,对于我正在使用的数据库引擎(postgresql),时间扩展尚未完全实现.关于如何在没有时态数据库的情况下实现这一目

database database-design relational-database database-normalization

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

带有一个代理键和两个唯一键的BCNF

我想了解BCNF是什么,我有这样的关系:

学生(id,ssn,电子邮件,姓名,姓氏)

哪里

  • id是主要代理键,不具有null和自动增量属性,
  • ssn是一个非null属性的唯一键,并且
  • 电子邮件也是一个非空的属性的唯一键.

有没有违反BCNF的事情,如果有的话,我怎样才能通过更好的设计克服这种情况?

编辑

我正在尝试编写我的功能依赖,但如果我错了请纠正我.

有三个属性决定了其他属性,所以令人困惑的是ssn和email都存在于方程的左侧和右侧.似乎这种关系不是在bcnf但是一定有什么问题:)

id -> (ssn, email, name, surname)
ssn -> (id, email, name, surname)
email -> (id, ssn, name, surname)
Run Code Online (Sandbox Code Playgroud)

database-design database-normalization

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

将行反规范化为列可以增强SQL Server的性能吗?

我有一个数据,它是一个整数值矩阵,表示带状分布曲线.我正在针对INSERT性能优化SELECT性能.最多有100个乐队.我主要是通过在一段时间内对频段求和或求平均来查询这些数据.

我的问题是,通过在每个频段有1列的表格中展平这些数据,或者使用表示频段值的单个列,我可以获得更好的性能吗?

扁平化数据

UserId ActivityId DateValue Band1 Band2 Band3....Band100
10001  10002      1/1/2013  1     5     100      200
Run Code Online (Sandbox Code Playgroud)

或标准化

UserId ActivityId DateValue Band BandValue
10001  10002      1/1/2013  1    1
10001  10002      1/1/2013  2    5
10001  10002      1/1/2013  3    100
Run Code Online (Sandbox Code Playgroud)

示例查询

SELECT AVG(Band1), AVG(Band2), AVG(Band3)...AVG(Band100)
FROM ActivityBands
GROUP BY UserId
WHERE DateValue > '1/1/2012' AND DateValue < '1/1/2013'
Run Code Online (Sandbox Code Playgroud)

sql sql-server denormalization database-normalization

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

什么是dbms中的原子性

我在1NF形式的DBMS中读过类似下面的内容.

有一句话如下:

"每列都应该是原子的."

任何人都可以通过一个例子向我解释一下吗?

sql database atomic database-normalization

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