如何确定功能依赖性

Shi*_*raz 12 database database-design functional-dependencies

我目前正在为一个大学项目工作,现在我对功能依赖项部分有点困惑.对于这个项目,我必须根据自己的项目规范创建逻辑数据模型,并确定功能依赖性.

例如,我给'User'表提供了以下属性.
R(user_id,用户名,regDate,类型,订阅)

主键: user_id
唯一键: username
外键:订阅

示例数据集可能类似于:

1,JohnS,01-01-2012,管理员,NULL
2,PeterB,02-01-2012,版主,电影
3,PeterA,02-01-2012,用户,电影
4,加里,03-01-2012,用户,Books
5,Irene,03-01-2012,用户,电影
6,Stan,03-01-2012,用户,电影
7,Isaac,04-01-2012,用户,书籍

我不明白的部分是我如何确定功能依赖性.我最初的感觉是有两个功能依赖,它们是:
user_id - > username,regDate,type,subscription
username - > user_id,regDate,type,subscription

但是,看一下演讲幻灯片中的其他例子,我怀疑这是否正确.

Mik*_*ll' 8

如果"username"既是唯一的又是必需的(唯一且非空),那么它就是候选键.在关系建模中,一个候选键与另一个候选键之间没有理论上的差异.更具体地说,在关系建模中,没有理论上的理由来选择一个候选键并将其标记为"主键".钥匙是钥匙.

所以你是对的.这里有两个功能依赖.(或者8,如果你分解右手侧成单独的列.user_id -> username,user_id -> regDate等)

  • @SahilBabbar:将复合函数依赖性分解为单个函数依赖关系与将关系分解为单个属性不同. (2认同)

Jor*_*mer 6

功能依赖性从理论角度定义如下(维基百科):

给定关系R,如果并且仅当每个X值恰好与一个Y值相关联时,R中的一组属性X被称为在功能上确定另一组属性Y,也在R中(写成X→Y); 然后据说R满足函数依赖性X→Y.

从技术角度来看,您正在尝试查找唯一标识其他属性的属性.作为快捷方式,确定候选键和依赖它们的属性.你的例子是正确的,因为username, regDate, type, and subscription一切都取决于的价值user_id.如果username是独特的不为空,这是一个候选键也标识属性集.

  • 我很抱歉投票不足,但是当你搜索功能依赖时,仅仅确定候选键是不够的.存在传递性FD存在的情况,因此行列式列集不是超级密钥,因此您的答案是不正确的. (3认同)