问题标签 [database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
16426 浏览

mysql - 从 MySQL 迁移到 PostgreSQL

我们目前正在将 MySQL 用于我们正在构建的产品,并且渴望尽快迁移到 PostgreSQL,主要是出于许可原因。

有没有其他人做过这样的举动?我们的数据库是应用程序的命脉,最终将存储 TB 的数据,所以我很想听听性能改进/损失的经验,转换 SQL 和存储过程的主要障碍等。

编辑:只是为了向那些询问我们为什么不喜欢 MySQL 许可的人澄清一下。我们正在开发一种商业产品,该产品(目前)依赖于 MySQL 作为数据库后端。他们的许可证规定我们需要向他们支付每次安装标价的一定百分比,而不是固定费用。作为一家初创公司,这并不吸引人。

0 投票
3 回答
2572 浏览

database - RDF存储与传统数据库的性能对比

有人尝试过像Sesame这样的 RDF 存储解决方案吗?与传统的数据库解决方案相比,我正在寻找这种解决方案的性能评估。

0 投票
2 回答
1848 浏览

database - 如何在 WinForms 1.1 app.config 中加密连接字符串?

只是在这里寻找第一步的基本解决方案,让诚实的人远离。

谢谢,迈克

0 投票
9 回答
12723 浏览

sql - 学习 SQL Server 的最佳方式

所以我得到了一份使用数据库的新工作(准确地说是 Microsoft SQL Server)。我对 SQL 一无所知,更不用说 SQL Server。他们说他们会训练我,但我想采取一些主动性的方式自己学习以取得领先。最好的起点是哪里(教程、书籍等)?我想了解更多关于 SQL 语言的知识,而不是任何花哨的点击内容。

0 投票
41 回答
15299 浏览

sql - 为什么我们需要实体对象?

我真的需要看到一些关于当前接受的企业应用程序设计范式优点的诚实、深思熟虑的辩论。

我不相信实体对象应该存在。

我所说的实体对象是指我们倾向于为我们的应用程序构建的典型事物,例如“Person”、“Account”、“Order”等。

我目前的设计理念是这样的:

  • 所有数据库访问都必须通过存储过程完成。
  • 每当您需要数据时,调用存储过程并遍历 SqlDataReader 或 DataTable 中的行

(注意:我还使用 Java EE 构建了企业应用程序,Java 人员请用等价物代替我的 .NET 示例)

我不反对OO。我为不同的目的编写了很多类,而不是实体。我承认我写的大部分类都是静态辅助类。

我不是在制造玩具。我说的是跨多台机器部署的大型、大容量事务应用程序。Web 应用程序、Windows 服务、Web 服务、b2b 交互,应有尽有。

我用过 OR 映射器。我已经写了几篇了。我使用了 Java EE 堆栈、CSLA 和其他一些等价物。我不仅使用过它们,而且还在生产环境中积极开发和维护这些应用程序。

我得出了久经考验的结论,实体对象正在阻碍我们,我们的生活将如此得多。

考虑这个简单的例子:你接到一个关于你的应用程序中某个页面不能正常工作的支持电话,也许其中一个字段没有像它应该的那样被持久化。使用我的模型,分配来查找问题的开发人员恰好打开了 3 个文件。一个 ASPX、一个 ASPX.CS 和一个带有存储过程的 SQL 文件。该问题可能是存储过程调用中缺少参数,需要几分钟才能解决。但是对于任何实体模型,您总是会启动调试器,开始单步执行代码,最终您可能会在 Visual Studio 中打开 15-20 个文件。当你走到栈底时,你已经忘记了从哪里开始。我们一次只能在脑海中保留这么多东西。软件非常复杂,无需添加任何不必要的层。

开发复杂性和故障排除只是我抱怨的一方面。

现在让我们谈谈可扩展性。

开发人员是否意识到,每次编写或修改与数据库交互的任何代码时,他们都需要彻底分析对数据库的确切影响?不仅仅是开发副本,我的意思是模拟生产,所以您可以看到您现在为您的对象需要的附加列刚刚使当前查询计划无效,并且在 1 秒内运行的报告现在需要 2 分钟,只是因为您在选择列表中添加了一列?事实证明,您现在需要的索引太大以至于 DBA 将不得不修改文件的物理布局?

如果你让人们通过抽象离物理数据存储太远,他们将对需要扩展的应用程序造成严重破坏。

我不是狂热者。如果我错了,我可以确信,也许我错了,因为对 Linq to Sql、ADO.NET EF、Hibernate、Java EE 等的推动力如此之大。请仔细考虑你的回答,如果我遗漏了什么我真的很想知道它是什么,以及为什么我应该改变我的想法。

[编辑]

看起来这个问题突然又活跃起来了,所以现在我们有了新的评论功能,我已经直接评论了几个答案。感谢您的回复,我认为这是一个健康的讨论。

我可能应该更清楚我在谈论企业应用程序。我真的无法评论,比如说,在某人的桌面上运行的游戏或移动应用程序。

为了回应几个类似的答案,我必须把一件事放在首位:正交性和关注点分离经常被引用为使用实体/ORM 的理由。对我来说,存储过程是我能想到的关注点分离的最好例子。如果您不允许通过存储过程以外的所有其他方式访问数据库,那么理论上您可以重新设计整个数据模型并且不会破坏任何代码,只要您维护存储过程的输入和输出即可。它们是合同编程的完美示例(只要您避免“选择 *”并记录结果集)。

问一个在这个行业工作了很长时间并使用过长期应用程序的人:在数据库存在的情况下,有多少应用程序和 UI 层来了又去?当有 4 或 5 个不同的持久层生成 SQL 以获取数据时,调整和重构数据库有多难?你什么都改变不了!ORM 或任何生成 SQL 的代码都将您的数据库锁定在石头上

0 投票
24 回答
41258 浏览

database - 数据库设计中真的需要外键吗?

据我所知,外键(FK)用于帮助程序员以正确的方式操作数据。假设程序员实际上已经以正确的方式这样做了,那么我们真的需要外键的概念吗?

外键还有其他用途吗?我在这里错过了什么吗?

0 投票
29 回答
38680 浏览

sql - 最喜欢的性能调优技巧

当您有一个需要性能调整的查询或存储过程时,您首先尝试的是什么?

0 投票
4 回答
1184 浏览

database - SQL2005:将一个表链接到多个表并保持参考完整性?

这是我的数据库的简化:

然后我们有其他表分别与QuoteJob表相关。

我现在需要添加一个Message表,用户可以在其中记录客户留下的关于 Jobs 和 Quotes 的电话消息。

我可以创建两个相同的表(QuoteMessageJobMessage),但这违反了 DRY 原则并且看起来很混乱。

我可以创建一个消息表:

但这阻止了我使用约束来强制执行我的参照完整性。我还可以预见它会在以后使用 Linq to SQL 与开发方面产生问题。

这个问题是否有一个优雅的解决方案,或者我最终将不得不一起破解一些东西?

伯恩斯

0 投票
6 回答
1630 浏览

database - 版本跟踪,使用 django 自动更改数据库架构

我目前正在研究用于未来基于 db 的 Web 应用程序的 Python 框架 Django,以及当前用 PHP 编写的一些应用程序的端口。在我的最后几年中,最棘手的问题之一是跟踪数据库模式更改并将这些更改部署到生产系统。我也不敢要求能够撤消它们,但当然对于测试和调试来说,这将是一个很棒的功能。从这里的其他问题(例如this onethis one),我可以看出我并不孤单,这不是一个微不足道的问题。另外,我在那里的答案中找到了很多灵感。

现在,由于 Django 似乎非常强大,它是否有任何工具可以帮助解决上述问题?也许它甚至在他们的文档中,我错过了?

0 投票
25 回答
301582 浏览

mysql - MyISAM versus InnoDB

I'm working on a projects which involves a lot of database writes, I'd say (70% inserts and 30% reads). This ratio would also include updates which I consider to be one read and one write. The reads can be dirty (e.g. I don't need 100% accurate information at the time of read).
The task in question will be doing over 1 million database transactions an hour.

I've read a bunch of stuff on the web about the differences between MyISAM and InnoDB, and MyISAM seems like the obvious choice to me for the particular database/tables that I'll be using for this task. From what I seem to be reading, InnoDB is good if transactions are needed since row level locking is supported.

Does anybody have any experience with this type of load (or higher)? Is MyISAM the way to go?