我是一名学生,作为我的学术界的一部分,我正在开发几个项目。
在为其中一个项目开发数据库时,我们遇到了一种情况,我们考虑是否需要 ERD。目前,并不是我们每个人都同意先开发 ERD,然后从它开发数据库。
大多数人更喜欢直接根据纸上要求的系统口头开发数据库。
现在,我严格遵循数据库原则。我认为数据库应该只从 ERD 开发。所以,我只想知道以下几点:
我遇到了 1 个查询,它是
Select * from R Natural Outer Join S
Run Code Online (Sandbox Code Playgroud)
哪里R=(A,B)
有元组{(1,2),(1,2),(3,4)}
和S=(B,C)
有元组{(2,5),(2,5),(4,6),(7,10)}
。
为了实现这一点,我创建了 2 个名为R
和 的关系S
。
create table R
(
A number(5),
B number(5)
)
create table S
(
B number(5),
C number(5)
)
Run Code Online (Sandbox Code Playgroud)
我在其中插入了提供的元组。
现在在实现这个时,我开始知道我使用的数据库工具(Oracle)不支持“自然外连接”,所以我使用了以下查询
select *
from R
natural full outer join S
Run Code Online (Sandbox Code Playgroud)
输出
2 1 5
2 1 5
2 1 5
2 1 5
4 3 6
7 10
Run Code Online (Sandbox Code Playgroud)
现在来回答我的问题
因为在任何表中都没有定义主键,所以我认为它应该进行交叉连接并显示 16 …
在学习 DBMS 作为一门学科之后,我想到了很多问题。规范化就是其中之一。当我了解到它有更多的困惑时,我发现无论我们在规范化过程中做什么,我们也可以通过一般常识来做到。即使在制作项目时,人们也不习惯遵循它。那么真的有必要吗?公司是否遵循它?我问这个问题是因为它可能会消耗更多的时间来规范化数据库。我们可以使用常识直接对其进行规范化,因此我认为没有必要遵循标准规范化程序。如果我错了,请纠正我。
我得到了一个事件管理案例研究,以开发实体关系图 (ERD),并基于它检查生成的关系模式是否满足不同的范式。现在,我已经基于我开发的 SRS 开发了我的 ERD。
我遇到的问题是:当我将 ERD 转换为关系模式时,我的表已经规范化了。由于 ERD,我在规范化过程中没有什么可完成的,所以我很困惑。
我脑海中出现的另一个问题是这是否是一种理想的情况,我的意思是当我从 ERD 本身让我的所有关系正常化时,为什么我需要进行正常化?
换句话说,如果我们从 ERD 中获得了 5NF 中的数据库,那么为什么我们需要考虑规范化?