我重读了这本书和网上的一些文章,并创建了一个简短的步骤列表,以便设计一个像样的数据库(当然,您需要先了解数据库设计的基础知识),下面将更详细地描述步骤:
(书中描述了很多步骤:Database Systems - Design, Implementation and Management (9th Edition)
这也是页码所指的内容,但我会在这里尽可能多地描述,并将在接下来的几天内编辑这个答案以使其更加完整)
- 创建组织对运营的描述的详细叙述。
- 根据操作描述识别业务规则。
- 从业务规则中识别主要实体和关系。
- 将实体/关系转换为 EER 模型
- 检查命名约定
- 将 ERR 模型映射到逻辑模型(第 400 页)*
- 规范化逻辑模型(第 179 页)
- 改进数据库设计(第 187 页)
- 验证逻辑模型完整性约束(第 402 页)(如长度等)
- 根据用户需求验证逻辑模型
- 将表转换为 mySQL 代码(在工作台中,使用导出函数将 EER 转换为 SQL 文件,然后转换为 mySQL)
*如果您使用工作台和您在那里设计的 ER 模型的工作,您可以跳过此步骤。
1.详细描述运作公司。如果您正在创建个人项目,请详细描述它如果您正在与公司合作,要求提供描述其公司的文件以及与员工面谈以获取信息(面谈可能会产生不一致的信息,请务必与主管核实哪些信息对设计更重要)
2.查看收集到的信息并开始从中生成规则,确保填补您知识中的任何信息空白。在继续之前与公司的主管确认。
3.从业务规则中识别主要实体和关系。请记住,在设计过程中,数据库设计人员不仅仅依靠访谈来帮助定义实体、属性和关系。通过检查组织在日常运营中使用的业务表格和报告,可以收集到数量惊人的信息。(第 123 页)
4.如果数据库很复杂,您可以将 ERD 设计分解为以下子步骤
i) 创建外部模型 (pg 46)
ii) 组合外部模型以形成概念模型 (pg 48)
Follow the following recursive steps for the design (or for each substep)
I. Develop the initial ERD.
II. Identify the attributes and primary keys that adequately describe the entities.
III. Revise and review the ERD.
IV. Repeat steps until satisfactory output
You may also use entity clustering to further simplify your design process.
通过 ERD 描述数据库:使用实线连接弱实体(弱实体是那些没有父实体就不能存在并且在其 PK 中包含父 PK 的实体)。使用虚线连接强实体(强实体是可以独立于任何其他实体存在的实体)
5.检查您的姓名是否符合您的命名约定。我曾经在这里对命名约定提出建议,但人们并不真正喜欢它们。我建议遵循您自己的标准或在线查找一些命名约定。如果您发现一些非常有用的命名约定,请发表评论。
6.
逻辑设计通常涉及将 ER 模型转换为一组关系(表)、列和约束定义。
使用以下步骤将 ER 转换为逻辑模型:
- 映射强实体(不需要其他实体存在的实体)
- 映射超类型/子类型关系
- 映射弱实体
- 映射二元关系
- 映射更高程度的关系
7.规范化逻辑模型。您还可以对逻辑模型进行非规范化以获得一些所需的特性。(比如提高性能)
8.
Refine Attribute Atomicity - 注意原子性要求通常是一种很好的做法。原子属性是不能进一步细分的属性。据说这样的属性显示了原子性。通过提高原子性程度,您还可以获得查询的灵活性。
根据数据粒度的要求细化主键 - 粒度是指由存储在表行中的值表示的详细程度。如前所述,以最低粒度存储的数据称为原子数据。例如,假设 ASSIGN_HOURS 属性表示给定员工在给定项目上的工作时间。但是,这些值是否记录在它们的最低粒度级别?换句话说,ASSIGN_HOURS 是代表每小时总计、每天总计、每周总计、每月总计还是每年总计?显然,ASSIGN_HOURS 需要更仔细的定义。在这种情况下,相关问题如下:您要在什么时间范围内(小时、日、周、月等)记录 ASSIGN_HOURS 数据?例如,假设 EMP_NUM 和 PROJ_NUM 的组合是 ASSIGNMENT 表中可接受的(复合)主键。该主键仅用于表示员工自项目开始以来在项目上工作的总小时数。使用诸如 ASSIGN_NUM 之类的代理主键可提供更低的粒度并产生更大的灵活性。例如,假设 EMP_NUM 和 PROJ_NUM 组合用作主键,然后员工在 ASSIGNMENT 表中创建了两个“工作小时数”条目。该行为违反了实体完整性要求。即使您将 ASSIGN_DATE 添加为复合 PK 的一部分,如果任何员工在同一天为同一项目输入两个或多个条目,仍会生成实体完整性违规。
尝试回答以下问题:“谁将被允许使用这些表格以及表格的哪些部分可供哪些用户使用?” 等等。
请随时在下面的评论中留下更好的描述的建议或链接,我会将其添加到我的答案中