database - 数据库规范化步骤
问题描述
我开始学习数据库和规范化。我目前正在处理的练习有一个未标准化的表格,我必须概述从未标准化到 1FN、2FN、3FN 的步骤。
这是我到目前为止所做的:
1FN(根据定义 1FN 应该消除重复组 - 所以我添加了行以消除一个字段中的多个值)
StudentAssoc (StudentID(PK), LastName, FirstName, DOB, Assoc-Name(PK), MaxMem, DateJoined)
2FN(根据定义,2FN 应该消除部分依赖关系——所以我创建了两个单独的表——一个用于学生实体,一个用于关联实体)
学生(StudentID-PK、LastName、FirstName、DOB、Assoc-Name-FK)
关联(Assoc-Name-PK、MaxMem、DateJoined、StudentID-FK)
我的疑问是,如果我在两个实体中都有 FK,我是否消除了部分依赖关系?
解决方案
你有一个选择:
1:使用称为“功能依赖分析”(FDA)的复杂“方法”
2:使用对象角色建模方法将您的表转换为一组正式的事实类型(+任何约束)。(ORM)
例如:
学生(.id)有姓()
Student(.id) 有 FirstName()
Student(.id) 出生于 Date()
等等....
对象角色模型是一个正式模型,因此您可以使用数学变换“自动”从您的模型生成完全规范化的模式。
有些人似乎认为 FDA 是“做”正常化的唯一途径。他们错了!
参考文献:信息建模和关系数据库,第二版,Halpin & Morgan
2008。Terry Halpin 博士的网站。
推荐阅读
- python - 在light gbm中使用f1 score作为评价指标
- laravel - 在 Laravel 中访问图像文件夹的问题
- r - 带有 RenderUI 的 selectInput 不显示所有选择
- c# - Webview 未从第二页加载
- postgresql - PL/pgSQL - 如何使用变量在 PostgresQL 中动态设置列大小?
- reactjs - 没有在反应中使用 Axios 获取图像
- javascript - 我无法将输入值从 html 传递到视图
- tkinter - Tkinter 窗口标题显示无效(??????)字符
- angular - Angular迭代并创建新行
- firebase-realtime-database - Can I check that a path contains a value FIrebase RealtimeDatabase Rules