首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不推荐数据库使用外键?

1.潜在的数据完整性问题, 缺少外键明显问题是数据库不能强制进行引用完整性检查,如果在高一层没有正确处理,则可能会导致数据不一致(子行没有相应父行)。...然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。 这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...设计人员不想绑定到任何特定的平台,并将所有逻辑推送到应用程序层,尽可能清楚地离开数据库层。

1.8K20

数据库不推荐使用外键的 9 个理由

1.潜在的数据完整性问题, 缺少外键明显问题是数据库不能强制进行引用完整性检查,如果在高一层没有正确处理,则可能会导致数据不一致(子行没有相应父行)。...然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...设计人员不想绑定到任何特定的平台,并将所有逻辑推送到应用程序层,尽可能清楚地离开数据库层。

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

数据库不使用外键的 9 个理由

潜在的数据完整性问题, 缺少外键明显问题是数据库不能强制进行引用完整性检查,如果在高一层没有正确处理,则可能会导致数据不一致(子行没有相应父行)。 2....然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。 4....ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。 5....设计人员不想绑定到任何特定的平台,并将所有逻辑推送到应用程序层,尽可能清楚地离开数据库层。 7.

1.1K10

数据库不推荐使用外键的9个理由

1.潜在的数据完整性问题, 缺少外键明显问题是数据库不能强制进行引用完整性检查,如果在高一层没有正确处理,则可能会导致数据不一致(子行没有相应父行)。...然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...设计人员不想绑定到任何特定的平台,并将所有逻辑推送到应用程序层,尽可能清楚地离开数据库层。

2K10

不使用 Ruby 的十个理由

Ruby 缺少企业级的支持 恐怕你孤陋寡闻了吧?听说过 Engine Yard吗?没有?他们提供非常出色的企业级 Ruby 支持。...所谓的企业级支持是很久以前企业通过绑定用户销售昂贵的,可靠的,最新的技术来获得收入。但是你必须这么做吗?难道你是如此的无能,因为缺少所谓的“支持”就不去选择一项合适的技术?...当 Twitter 飞速发展的时候,他们必须修改 ActiveRecord 中深层次的代码以获得在 Rails 中支持多个 MySQL 数据库。不幸的是,人们混淆了 Ruby 和 Rails。...寻找有经验的 Ruby 程序员很困难 这倒是真的,但取决于你在世界的哪个地方。比如在 Israel,.NET 和 PHP 盛行,所以找到好的 Ruby 程序员是很困难的。但是你知道吗?...非要较真的话,我也可以说找到好的 PHP 程序员比 Ruby 更困难。因为 PHP 社区分散,用户生成的文档和不一致的 API 是的学习难度提高。

4K10

不要让框架控制你的项目,过度依赖框架会害了你

许多Web框架,比如Django、Rails、Spring、Gatsby 和 Symfony等的营销词中都提到了维护以及可维护性。 Symfony:加快创建和维护PHP Web应用程序的速度。...关于框架如何提供长期的支持,Rails 的官方立场是: 当某个版本系列不再受支持时,修复错误和安全问题的责任由您自行承担。我们会提供修补程序的向后移植并发布到git,但是不会发布新版本。...开发速度的提升部分来自样板代码的生成,但更多时候来自继承。框架生成代码就意味着创建新代码,但不负责维护这些代码。...例如,推特的“Fail-Whale”(失败鲸)事件就是因为Rails糟糕的性能引发的,后来推特宣布用Java重写了Rails代码库。此次事件证明,大多数框架都会显著增加性能开销。...每次我们在Rails中编写:belongs_to(:author),或者在Django中编写:models.ForeignKey("Band"),就会导致我们的项目与框架的绑定更加紧密。

75630

Rails框架流行在他的设计理念

2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic...2、O/R Mapping: NHibernate,IbatisNet等ORM架构都有至少有一个记录OR映射关系的配置文件,然而Rails框架没有,它使用Scaffold生成model,默认情况下就是英文复数的表名对应单数的...可参看通用日志 5、Mails: 对一个web应用,log是很常用的,Castle框架里面的支持很全面,从邮件模板到Mail发送的封装等 6、作业调度:对一个Web应用,用作业调度去完成一些系统维护和生成报表功能...,是不可缺少的,这也有一个通用的项目支持开源的作业调度框架 - Quartz.NET 7、IOC容器:微软也在搞IOC,名叫Unity ,园子里有兄弟介绍了,可参看依赖注入容器Unity Application...SubSonic 本身是一个功能非常强大的应用程序工具集;如与 ASP.NET MVC 配合使用,它将成为非常有用的应用程序框架。总之,贯穿RoR的设计理念,这点对我们用.NET开发是很好的借鉴。

1.9K50

MS MVC框架漩涡中的MonoRail未来

Castle的DataBinder和ActiveRecordDataBinder的协同工作 我想要实现但还未能做到的功能: 重用MonoRail的helpers:主要因为他们和MonoRail绑定的太紧了...如果MS MVC最终版不是那么完美,缺少了必须实现的功能,那么MonoRail 2.0可以复用MS MVC的基础架构,以提供一些有价值的扩展。...Eleutian Technology公司的工程总监Aaron Jensen同意Hamilton的观点,并建议说: 我想要看到的是MonoRail能变得真的像Rails。...我想看到一些在MS MVC之上的实现,它们更加遵循“惯例胜于配置”的理念——包括生成器以及更多的功能。我期望它能更进一步,成为.NET社区所期望的一个真正的C# Web平台。...DRY(别重复自己)——Routing引擎和URL生成的紧密绑定允许URL进行轻松和安全的重构; 测试——在MonoRail中测试Route需要端对端(End-to-End)的测试,如果Route

78450

如何在Ubuntu 14.04上使用Unicorn和Nginx部署Rails应用程序

如果您需要帮助,请参考腾讯云+社区中有关PostgreSQL with Rails的教程中的示例进行操作。 创建Rails应用程序 理想情况下,您已经拥有了要部署的Rails应用程序。...首先,生成密钥,用于验证签名cookie的完整性: cd ~/appname rake secret 复制生成的密钥,然后使用您喜欢的编辑器打开文件.rbenv-vars。...创建生产数据库 既然您的应用程序已配置为可以与PostgreSQL数据库通信,那么让我们创建生产数据库: RAILS_ENV=production rake db:create 生成控制器 如果您跟随示例...,我们将生成一个脚手架控制器,以便我们的应用程序可以查看它: rails generate scaffold Task title:string note:text 现在运行此命令以更新生产数据库: RAILS_ENV...为此,请运行以下命令: RAILS_ENV=production rake assets:precompile 测试应用 要测试您的应用程序是否有效,您可以运行生产环境,并将其绑定到服务器的公共IP地址

4.2K00

gitlab与ldap集成

#ldap端口(我是k8s中搭建的故不是默认的389) uid: 'cn' ###ldap登陆的用户名 bind_dn: 'cn=admin,dc=xxxx,dc=com' #绑定的用户的完整...DN password: 'xxxxxxxx' ##绑定用户的密码 encryption: 'plain' # "start_tls" or "simple_tls...vi /etc/gitlab/gitlab.rb 图片 当然了由于使用qq邮箱先登陆邮箱 设置-账户这里 图片 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 生成授权码...图片 恩成功了继续尝试一下用户的登陆 ldap用户登陆绑定邮箱 由于zhangpeng用户之前输入了820042728@qq.com邮箱了,这里只能刷新一下 点击mail下面的重新发送了!...continue就进入了gitlab控制台: 图片 尝试一下huozhonghao用户: 图片 gitlab登陆 图片 输入mail邮箱475602333@qq.com(邮箱不能与之前用户的重复,貌似一个邮箱只能绑定一个用户

1.8K30

如何在Ubuntu 14.04上使用Puma和Nginx部署Rails应用程序

创建Rails应用程序 理想情况下,您已经拥有了要部署的Rails应用程序。如果是这种情况,您可以跳过本节,并在跟随时进行适当的替换。...首先,生成密钥,用于验证签名cookie的完整性: cd ~/appname rake secret 复制生成的密钥,然使用您喜欢的编辑器打开该后.rbenv-vars文件。...创建生产数据库 既然您的应用程序已配置为与PostgreSQL数据库通信,那么让我们创建生产数据库: RAILS_ENV=production rake db:create 生成控制器 如果您跟随示例,...我们将生成一个脚手架控制器,以便我们的应用程序可以查看: rails generate scaffold Task title:string note:text 现在运行此命令以更新生产数据库: RAILS_ENV...,并将其绑定到服务器的公共IP地址(替换服务器的公共IP地址): RAILS_ENV=production rails server --binding=server_public_IP 现在,在Web

5.4K10

Groovy on Grails 交流活动

当然,在开发的过程你大可使用 Grails 绑定的 Jetty 容器,这样完全可以做到开发的零配置与无需容器重启的动态载入功能。 “我的经理是不会让我用 Grails 的,因为它不是 Java。”...“脚手架功能需要我在每次改变后生成。”“脚手架” 即是可以自动生成控制器和视图之增删改代码的样板控制器。对控制器和视图的显式重建通常毫无必要,除非你不愿应用动态脚手架的功能。...接下去,当然,如果你愿意的话,你可以生成个性化的控制器和视图代码。 “Grails 和其它框架一样,最终总有局限性。”...Groovy 会让你很快就获得短期回报的,它令你将代码写得更简捷,替你自动地完成某些任务,甚至生成一些特别的脚本帮助你日常程序员式生活。...在这期间,他萌发了一个想法:作为一个老练的 Java 程序员,他意识到几乎快成为他母语的 Java 实在是太缺少 Python 独具的活泼和有用的特性了,例如表达文法对普通类型的本地语言支持,还有一些动态行为

1.7K20

RadRails1.0降临——增加Profiler、CallGraph Analyzer和Rails Shell等新特性

作为一直以来流行的Rails开发工具,新版本的RadRails为Ruby和Ruby on Rails的开发者都新增了有用的特性。...另一个RadRails的特性是Rails Shell,它允许用户在Eclipse IDE内部使用Rails命令——可以使用自动补全及其他一些功能。...然后,当执行结束的 时候,我们通过解析输出并生成调用图表和着重点以供查看。这个目前对JRuby还不支持,因为对于用原生C代码写成的ruby-prof gem来说,Java目前还没有替代品。...gem使得它类似于ruby-debug的ruby-debug-ide gem那样工作——至少可以允许对于profiler的远程连接和实时地通过套接字来发送剖析相关的命令(这样我们便可得到快照,而非等到程序结束后再从...如 果大量用户开始尝试使用Rubinius并向我们告知缺少调试器,我们一定会使之集成进来。

1.9K80

如何在Ubuntu上使用Passenger安装Rails和nginx

介绍 Ruby on Rails为Web开发人员提供了一个快速创建各种Web应用程序的框架,而nginx是一个轻量级的高性能Web服务器软件。...但是,由于我们通过具有各种Ruby版本的程序访问它,因此我们需要告诉系统默认使用1.9.3。...如果您错过任何一个,Passenger将通过Ubuntu上的apt-get安装程序让您知道如何安装它们。 下载所有缺少的依赖项后,重新启动安装。...完成后,它将告诉您有关对nginx配置文件所做的更改以及如何在虚拟服务器上部署Ruby on Rails应用程序。 最后一步是启动nginx,因为它不会自动执行。.../public; } 创建新的rails项目,请按照下列步骤操作: 如果您还没有安装NodeJs: $ sudo apt-get install nodejs 在首选目录中创建新的rails应用程序

3.5K40

rails, django, phoenix,你们错了

典型的就是曾经大红大紫(现在也算是一线明星)的 rails:很多 rails 工程师最初只知 rails,写了 rails 后发现语言的短板才反过来学的 Ruby。...通过这些框架,工程师可以快速地创建一个 web 项目的脚手架,和数据库(一般是 RDBMS)绑定生成 model,controller 和 view,不消数日,一个可以运行部署的「网站」就攒出来了。...它们错在给 web app 开发者带来「人人都能写 web app」的希望的同时,又把诸多程序员的思维禁锢在那一方小小的 MVC 中。 假设我们要做一个 MOOC 软件。...我们看通常情况下一个 rails 程序员如何开始构建其后端: 设计数据库结构:User / Content / Bookmark / Review / ... rails new mooc rails...间有一张 enroll 的表作为用户注册哪个课程的凭证 一个 controller 可以跨越多个 model 获取数据,并提供给某个 view 把数据展现出来 有了这些假设,我们能够很快地搭建出应用程序

1.8K70

使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序

注意:如果第二个命令失败并显示消息“GPG签名验证失败”,则表示GPG密钥已更改,只需从错误输出中复制命令并运行它以下载签名。然后运行用于RVM安装的curl命令。...我们首先安装Rails gem,它将允许你的Rails应用程序运行,然后我们将安装bundler,它可以读取你的应用程序的Gemfile并自动安装所有必需的gem。...现在,为您的服务器生成SSH密钥(公钥/私钥对): deploy@droplet:~$ ssh-keygen -t rsa 将新创建的公钥(~/.ssh/id_rsa.pub)添加到存储库的部署密钥:...应用程序中添加部署配置 在本地计算机上,在Rails应用程序中为Nginx和Capistrano创建配置文件。...输入以下命令来捆绑您的Rails应用程序: $ bundle 捆绑后,运行以下命令配置Capistrano: $ cap install 这将创建: Capfile 在您的Rails应用程序的根目录中

5K40
领券