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
但是,看一下演讲幻灯片中的其他例子,我怀疑这是否正确.
如果"username"既是唯一的又是必需的(唯一且非空),那么它就是候选键.在关系建模中,一个候选键与另一个候选键之间没有理论上的差异.更具体地说,在关系建模中,没有理论上的理由来选择一个候选键并将其标记为"主键".钥匙是钥匙.
所以你是对的.这里有两个功能依赖.(或者8,如果你分解右手侧成单独的列.user_id -> username,user_id -> regDate等)
功能依赖性从理论角度定义如下(维基百科):
给定关系R,如果并且仅当每个X值恰好与一个Y值相关联时,R中的一组属性X被称为在功能上确定另一组属性Y,也在R中(写成X→Y); 然后据说R满足函数依赖性X→Y.
从技术角度来看,您正在尝试查找唯一标识其他属性的属性.作为快捷方式,确定候选键和依赖它们的属性.你的例子是正确的,因为username, regDate, type, and subscription一切都取决于的价值user_id.如果username是独特的和不为空,这是一个候选键也标识属性集.