标签: database-normalization

用简单的英语标准化

我理解数据库规范化的概念,但总是很难用简单的英语解释它 - 特别是对于求职面试.我已阅读维基百科帖子,但仍然觉得很难向非开发人员解释这个概念."以不会获得重复数据的方式设计数据库"是首先想到的.

有没有人用简单的英语解释数据库规范化的概念?有什么好的例子可以显示第一,第二和第三范式之间的差异?

假设你去面试并且这个人问: 解释规范化的概念以及如何设计规范化的数据库.

面试官在寻找什么关键点?

sql database terminology database-normalization

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

3NF和BCNF有什么区别?

有人可以向我解释3NF和BCNF之间的区别吗?如果您还可以提供一些示例,那就太棒了.谢谢.

database-design relational-database 3nf database-normalization bcnf

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

标准化 - 2NF对3NF

苦苦挣扎,看看他们之间的差异.我知道我们说2NF是"全键"而3NF"只不过是关键".

Smashery参考了这个伟大的答案:数据库设计中的1NF,2NF和3NF是什么?

用于3NF的示例与2NF完全相同 - 它是一个仅依赖于一个键属性的字段.3NF的例子与2NF的例子有何不同?

谢谢

database database-design database-normalization

28
推荐指数
4
解决办法
3万
查看次数

什么是对博伊斯 - 科德正常形式的良好KISS描述?

什么是KISS(保持简单,愚蠢)的方式来记住Boyce-Codd的正常形式是什么以及如何采用非标准化的表格和BCNF呢?

维基百科的信息:对我来说不是很有帮助.

database database-normalization bcnf

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

将关系分解为BCNF

我很难确定何时关系是Boyce-Codd Normal Form,以及如果不将其分解为BCNF.鉴于这个例子:

具有功能依赖性的R(A,C,B,D,E):A - > B,C - > D.

我怎么去分解它?

我采取的步骤是:

A+ = AB  
C+ = CD  
R1 = A+ = **AB**  
R2 = ACDE (since elements of C+ still exist, continue decomposing)  
R3 = C+ = **CD**  
Run Code Online (Sandbox Code Playgroud)

R4 = ACE(此关系中没有FD闭包)

所以现在我知道ACE将构成整个关系,但分解的答案是:AB,CD,ACE.

我想我正在努力解决如何将关系正确地分解为BCNF形式以及如何判断你何时完成.非常感谢任何能够在解决这些问题时让我完成思考过程的人.谢谢!

relational-database decomposition database-normalization

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

如何实现元数据的目录并在数据库中自动化SQL?

我在这里读到了关于5NF,EAV和6NF的讨论,以及需要一个目录来"自动"处理元数据和复杂的SQL.这是如何在实践中实施的?

PerformanceDBA在提到目录的6NF和EAV上写了几个答案,例如在以下问题中:

sql database-design schema-design entity-attribute-value database-normalization

22
推荐指数
1
解决办法
1067
查看次数

将MySQL中的JSON数组转换为行

更新:现在可以通过JSON_TABLE函数在MySQL 8中实现:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

我喜欢MySQL 5.7中的新JSON函数,但是试图将JSON中的值合并到一个普通的表结构中.

从中获取JSON,操作和提取数组等很简单.一路JSON_EXTRACT.但是从JSON数组到行的逆转呢?也许我对现有的MySQL JSON功能非常密切,但我还是无法解决这个问题.

例如,假设我有一个JSON数组,并希望为数组中的每个元素插入一行及其值?我找到的唯一方法是编写一堆JSON_EXTRACT(...'$ [0]')JSON_EXTRACT(...'$ [1]')等并将它们组合在一起.

或者,说我有一个JSON数组,并希望GROUP_CONCAT()它到一个逗号分隔的字符串?

换句话说,我知道我可以这样做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val
  FROM   
  (    
    SELECT 0 AS n    
    UNION    
    SELECT 1 AS n    
    UNION    
    SELECT 2 AS n    
    UNION    
    SELECT 3 AS n    
    UNION    
    SELECT 4 AS n    
    UNION    
    SELECT 5 AS n    
  ) x
WHERE x.n < JSON_LENGTH(@j);
Run Code Online (Sandbox Code Playgroud)

但这伤害了我的眼睛.而我的心.

我该怎么做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))
Run Code Online (Sandbox Code Playgroud)

...并将它与数组中的值和JSON数组本身连接在一起?

我想我在这里寻找的是某种JSON_SPLIT:

SET …
Run Code Online (Sandbox Code Playgroud)

mysql json database-normalization

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

表中有多少字段"太多"?

我有一个同事正在计划一个新应用程序的数据库,该应用程序将包含多个表,每个表包含30多个字段.这太过分吗?也许我只是不够了解企业.

编辑:此外,很多字段都是选项类型的东西(比如在请求表单上,你希望你的小部件是黄色还是绿色,他有一个带有枚举的'color'字段).随着时间的推移,很可能会添加或删除这些内容.我没有真正完成数据库设计,并试图远离它自己,所以也许我是完全愚蠢的,但肯定有更好的方法这样做?

database database-design database-normalization

20
推荐指数
5
解决办法
2万
查看次数

规范化需要多长时间?

我有这些表:

Projects(projectID, CreatedByID)
Employees(empID,depID)
Departments(depID,OfficeID)
Offices(officeID)
Run Code Online (Sandbox Code Playgroud)

CreatedByID是一个外键Employees.我有一个几乎每个页面加载运行的查询.

添加冗余OfficeIDProjects以消除三个连接是不好的做法吗?或者我应该做以下事情:

SELECT * 
FROM Projects P
JOIN Employees E   ON P.CreatedBY = E.EmpID
JOIN Departments D ON E.DepID = D.DepID
JOIN Offices O     ON D.officeID = O.officeID
WHERE O.officeID = @SomeOfficeID
Run Code Online (Sandbox Code Playgroud)

在应用程序编程中,我"首先编写最佳实践并在之后进行优化",但数据库管理员始终警告连接的成本.

sql database-design database-normalization

20
推荐指数
5
解决办法
6182
查看次数

是否值得将地址信息分成单独的数据库表?

我有一个名为"Person"的表,其中包含以下字段

  • Id(主键)
  • 名字
  • 出生日期
  • 国家

是应该将City,State或Country等标准化并分解到自己的表中,然后此表包含CityId和StateId列.我们正在讨论这是一个好的还是坏的决定.

要添加,我确实有一个City和一个State表(由于与此person表无关的其他原因).无论是否有这个额外的事实,我都很好奇.

database database-design database-normalization

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