我已经阅读了引用: 数据取决于键[1NF],整个键[2NF],只有键[3NF].
但是,我无法理解3.5NF或BCNF.这是我的理解:
那么为什么有些3NF表不在BCNF中呢?我的意思是,3NF引用明确地说"除了密钥之外",意味着所有属性仅仅依赖于主键.毕竟,主键是候选键,直到它被选为我们的主键.
如果到目前为止我的理解有任何不妥之处,请纠正我并感谢您提供的任何帮助.
有人可以向我解释3NF和BCNF之间的区别吗?如果您还可以提供一些示例,那就太棒了.谢谢.
database-design relational-database 3nf database-normalization bcnf
我有这四个表:
PRODUCTS
---------
PRODUCT_ID
PRODUCT_TITLE
(other fields)
COLORS
---------
COLOR_ID
COLOR_NAME
MATERIALS
---------
MATERIAL_ID
MATERIAL_NAME
IMAGES
---------
IMAGE_ID
BIG
MED
SMALL
THUMB
SIZE
---------
SIZE_ID
SIZE_NAME
Run Code Online (Sandbox Code Playgroud)
并且:
PRODUCT_COLOR
---------
PRODUCT_ID
COLOR_ID
PRODUCT_MATERIAL
---------
PRODUCT_ID
MATERIAL_ID
PRODUCT_SIZE
---------
PRODUCT_ID
SIZE_ID
PRODUCT_IMAGE
---------
PRODUCT_ID
IMAGE_ID
COLOR_ID (can be null)
MATERIAL_ID (can be null)
Run Code Online (Sandbox Code Playgroud)
所有产品可以具有不同的颜色和/或材料.例如,我可以有一个产品有一个或多个材料选项但没有颜色关联,反之亦然.输出应该是这样的:
-----------------------------------------------------------------------------
| PRODUCT_ID | PRODUCT_NAME | COLOR_ID | MATERIAL_ID | IMAGE_ID | SIZE_ID |
-----------------------------------------------------------------------------
| 1 | T-SHIRT | 1 | null | 1 | 1 | …Run Code Online (Sandbox Code Playgroud) 假设我在数据库上有两个表,T 10和T 11,分别有10和11列,其中10列在两者上完全相同.
我违反了什么(如果有的话)规范化规则?
relational-database 3nf database-normalization functional-dependencies
我正在编写一个基于标签的ASP.net系统.使用以下db方案:
Topic <many-many> TagTopicMap <many-many> Tag
基本上,我从以下方面找到了3NF方法(toxi):http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html
这是我的代码片段:
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Topic>(t => t.TagTopicMaps);
options.LoadWith<TagTopicMap>(tt => tt.Tag);
var db = new lcDbDataContext();
db.LoadOptions = options;
db.Log = w;
var x = from topic in db.Topics
orderby topic.dateAdded descending
select topic;
ViewData["TopicList"] = x.Take(10);
Run Code Online (Sandbox Code Playgroud)
当我执行它时,结果很好,但它提供了11个单个SQL查询,一个用于获取前10个主题的列表:
SELECT TOP (10) [t0].[Id], [t0].[title], [t0].[dateAdded]
FROM [dbo].[Topics] AS [t0] ORDER BY [t0].[dateAdded] DESC
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
Run Code Online (Sandbox Code Playgroud)
其他10个用于单独获取标签的详细信息.
我试图打开和关闭两个loadwith语句,发现以下情况发生:
loadwith<topic> : no difference for on or off.
loadwith<tagtopicmap>: …Run Code Online (Sandbox Code Playgroud) 我一直在阅读许多关于如何区分3NF/BCNF关系的不同来源.到目前为止,这是我的理解......
我将以此关系为例......
R = {A, B, C, D, E}
和
F = {A -> B, B C - > E, E D -> A}.
首先,我们必须找到关系的关键.我用这个视频来帮助我做到这一点.我得到了
Keys = {ACD, BCD, CDE}
现在要确保R在BCNF中,我们必须确保每个功能依赖的左侧F是其中之一Keys.我们立即知道情况并非如此,因为第一个FD是A -> B并且A不是其中一个键.所以它不在BCNF.
现在要确保R在3NF中,我们必须确保每个函数依赖的左侧F是Keys OR中的每个函数依赖的右侧之一F是其中一个的子集Keys.如果你看看每个FD的右侧,它们就是B,E和A.这些都是a的子集Key,因此这意味着它在3NF中.
因此,这是一种罕见的情况(根据维基),其中存在关系3NF但不存在 …
database 3nf database-normalization functional-dependencies bcnf
我正在研究一个示例问题,其中我们试图确定以下哪个关系处于第三范式(3NF).以下是我们给出的关系:
R1(ABCD)
ACD - > B AC - > D D - > C AC - > B.
R2(ABCD)
AB - > C ABD - > C ABC - > D AC - > D.
R3(ABCD)
C - > B A - > B CD - > A BCD - > A.
R4(ABCD)
C - > B B - > A AC - > D AC - > B.
我知道答案是R1在3NF,但我很难理解确定违反3NF的步骤.对于每个关系,有人可以用简单的英语分解吗?如果您能够告诉我每个关系如何违反3NF规则之一,那将非常有帮助:
对于R1,我采取的第一步是将其分解为闭包:
ACD + = …
我正在存储有关棒球统计数据的数据,并希望使用三个表格来执行此操作:player,battingStats和pitchingStats.出于问题的目的,每个玩家将有击球统计数据或投球统计数据,但不是两者都有.
我如何在3NF中规范这种关系?
我有这个问题将关系模式分解为3NF中的一组模式.
我有这种关系模式:R =(A,B,C,D,E,F)
使用以下函数依赖关系集F:
A→ABCDEF
B→C
D→E
谁能帮我吗?
我在理解如何确定关系是否在 BCNF、3NF 中以及通常识别关系的候选键时遇到问题。
考虑R = (A, B, C, D)与函数依赖关系:
AB -> C
C -> D
D -> A
Run Code Online (Sandbox Code Playgroud)
问题包括:
一种。列出 R
b的候选键。确定 R 是否在 BCNF 或 3NF 中。
解决方案解决
一种。R 的 3 个候选键是 AB、BC 和 BD。
湾 R 属于 3NF,但不属于 BCNF。
我已经阅读了 3NF 和 BCNF 有什么区别?并且在引用数据库模式中的非任意词时可以理解 3NF 和 BCNF 之间的区别。正如问题中给出的那样,在尝试确定具有减少关系的关系时,我最终迷失了方向。
有人能解释一下上面的候选键是如何确定的,为什么 R 在 3NF 而不是 BCNF?
我目前在系统分析课程中,我想更好地理解规范化的使用.对于3NF,如果我正在处理包含学生ID,姓名,电话号码和专业的表格.我必须只使用学生证和学生证,因为学生姓名和电话号码都可以通过身份证找到.我明白了吗?
我试图找到一个递归的DTD和一个有效的XML数据文件.现有验证器是否能够验证递归DTD?我希望能够在该XML文件之后执行XQueries.