草庐IT

mysql - 设计组织良好且规范化的关系数据库的步骤

coder 2023-06-12 原文

我刚开始为我的网站制作数据库,所以我正在重新阅读数据库系统 - 设计、实现和管理(第 9 版),但我注意到其中没有描述任何一步一步的过程本书创建了一个组织良好且规范化的数据库。这本书似乎有点杂乱无章,虽然规范化过程都在一个地方,但导致它的步骤却不是。

我认为将所有步骤都放在一个列表中非常有用,但我无法在网上或其他任何地方找到类似的东西。我意识到解释所有步骤的回答者将是一个相当广泛的步骤,但我将不胜感激我能在这个主题上得到的任何东西;包括规范化之前的指令顺序和带有建议的链接。

虽然我对这个过程不太熟悉,但我从设计任何数据库中休息了很长时间(大约 1 年),所以我希望详细描述所有内容。

我特别感兴趣:

  • 开始对数据库建模的好方法是什么(或者如何列出业务规则以免混淆)

我想使用 ER 或 EER(扩展实体关系模型)并且我想知道

  • 如何使用 EER(不相交和重叠)正确建模子类型和父类(super class)型(以及写下它的业务规则,以便您知道它是一个子类型,如果有任何通用的方法的话)

(我已经熟悉规范化过程,但答案也可以包括相关提示)

仍然需要帮助:

  • 写下业务规则(包括 EER 中子类型和父类(super class)型的业务规则)
  • 如何在 EER 中正确使用子类型和父类(super class)型(如何建模)

任何其他建议将不胜感激。

最佳答案

我会向您推荐这个关于 E/R 建模的视频(大约 9 个)

http://www.youtube.com/watch?v=q1GaaGHHAqM

编辑:

“这个模型的图表必须有多广泛?它们必须包括所有实体和属性吗??”

是的,实际上你有 ER 建模和扩展 ER 建模,

想法是进行扩展 ER 建模,因为在那里您不仅指定实体,还指定 PK 和 FK 以及基数。看看这个 link(查看图形和两种模型之间的区别)。

建模有两种方式,一种是真实场景,一种是DB真实结构,即:

当您创建 E-ER 建模时,您甚至可以为所有实体创建关系和基数,但是当您要创建数据库时,没有必要创建基数为 1:N 的关系(基数为 N 的表创建一个FK from table with card.1,你不需要在数据库中创建关系表)或者当你有一个 1:1 的基数时,你知道你的一个实体可以吸收另一个实体。

看这个 Graphic ,只创建了 N:M 个关系实体(当你看到 2 个或更多 FK 时,那是一个关系表)

但请记住,这些只是“规则”,如果您的设计需要,为了性能、安全等,您可以打破它。

关于工具,有很多,但我推荐 workbench ,因为你可以用它连接到你的数据库(如果你在 mysql 中)并创 build 计 E/R 建模,带有属性,他会自动-创建关系表 N:M。

编辑 2:

我在这里放了一些链接,可以更好地解释这一点,这将需要很多行,并且在这里和我自己解释起来会比较困难,请查看这些链接,如果您有任何问题,请告诉我:

类型和子类型:

业务规则(完整性约束)

关于mysql - 设计组织良好且规范化的关系数据库的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10731333/

有关mysql - 设计组织良好且规范化的关系数据库的步骤的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby - Rails 关联 - 同一个类的多个 has_one 关系 - 2

    我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下

  4. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  5. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  6. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  7. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  8. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  9. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  10. ruby - Rails -- :id attribute? 所需的数据库索引 - 2

    因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration

随机推荐