Questions tagged «database»

数据库是有组织的数据集合。它是模式,表,查询,报告,视图和其他对象的集合。数据通常以支持需要信息的流程的方式来组织,以对现实的各个方面进行建模。如果对设计数据库有疑问,请使用此标记。如果它与特定的数据库管理系统(例如MySQL)有关,请改用该标记。

30
为什么我们需要实体对象?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我确实需要就当前接受的企业应用程序设计范例的优点进行一些诚实,周到的辩论。 我不认为实体对象应该存在。 实体对象是指我们倾向于为应用程序构建的典型事物,例如“人”,“帐户”,“订单”等。 我当前的设计理念是: 所有数据库访问都必须通过存储过程来完成。 每当需要数据时,调用存储过程并遍历SqlDataReader或DataTable中的行 (注意:我还使用Java EE构建了企业应用程序,Java人士请用等价的.NET示例代替) 我不是反OO。我为不同目的编写了很多类,而不仅仅是实体。我将承认我编写的大部分类都是静态帮助器类。 我不是在造玩具。我说的是跨多台机器部署的大批量交易应用程序。Web应用程序,Windows服务,Web服务,B2B交互,您可以为其命名。 我曾经使用过OR Mappers。我写了一些。我已经使用了Java EE堆栈,CSLA和其他一些等效项。我不仅使用了它们,而且还在生产环境中积极开发和维护了这些应用程序。 我已经走到了实战检验的结论,即实体对象在我们的方式取得,和我们的生活会如此没有他们容易得多。 考虑一个简单的示例:您会收到有关应用程序中某个页面无法正常工作的支持电话,可能其中一个字段没有得到应有的保留。使用我的模型,分配来查找问题的开发人员仅打开了3个文件。一个带有存储过程的ASPX,ASPX.CS和SQL文件。该问题可能是存储过程调用中缺少的参数,需要几分钟才能解决。但是对于任何实体模型,您将始终启动调试器,开始逐步执​​行代码,最终可能会在Visual Studio中打开15-20个文件。到栈底时,您已经忘记了从哪里开始。我们一次只能记住这么多事情。无需添加任何不必要的层,软件非常复杂。 开发的复杂性和故障排除只是我苦恼的一方面。 现在让我们谈谈可伸缩性。 开发人员是否意识到他们每次编写或修改与数据库交互的任何代码时都需要对对数据库的确切影响进行彻底的分析?不仅仅是开发副本,我的意思是模仿生产,因此您可以看到,您对象现在需要的附加列使当前查询计划无效,并且在1秒内运行的报告现在将需要2分钟,因为您在选择列表中添加了单列?事实证明,您现在需要的索引是如此之大,以至于DBA不得不修改文件的物理布局? 如果您通过抽象让人们离物理数据存储区太远,他们将对需要扩展的应用程序造成破坏。 我不是狂热者。我可以确信,如果我错了,也许我错了,因为对Linq到SQL,ADO.NET EF,Hibernate,Java EE等的大力推动。请仔细考虑您的回答,如果我遗漏了一些我我真的很想知道它是什么,以及为什么我应该改变自己的想法。 [编辑] 看来这个问题突然又活跃起来了,所以现在有了新的评论功能,我已经直接对几个答案发表了评论。感谢您的答复,我认为这是一个健康的讨论。 我可能在讲企业应用程序时应该更加清楚。例如,我真的无法评论在某人的台式机或移动应用程序上运行的游戏。 对于几个相似的答案,我不得不在顶部提出一件事:正交性和关注点分离经常被引用为采用实体/ ORM的原因。对我而言,存储过程是我能想到的分离关注点的最佳示例。如果不允许除通过存储过程之外的所有其他对数据库的访问,则只要您维护存储过程的输入和输出,理论上就可以重新设计整个数据模型并且不破坏任何代码。它们是按合同编程的完美示例(只要您避免“选择*”并记录结果集)。 问一个已经从事该行业很长时间并且使用了长期应用程序的人:在数据库运行期间,有多少个应用程序和UI层来去去了?当有4到5个不同的持久层生成SQL来获取数据时,调整和重构数据库有多难?你什么都不能改变!ORM或生成SQL的任何代码将您的数据库牢牢锁定。
139 sql  database  orm  entities 

14
如果主服务器和从服务器具有不同的数据库(如果进行Mysql复制),如何重新同步Mysql DB?
Mysql Server1以MASTER运行。 Mysql Server2作为SLAVE运行。 现在,数据库复制正在从MASTER到SLAVE进行。 Server2从网络中删除,并在1天后重新连接。此后,主服务器和从服务器中的数据库不匹配。 将数据库从主服务器还原到从服务器后,如何再次重新同步数据库也不能解决问题?

7
Postgres:在从bash脚本重新创建/重新填充之前,清除整个数据库
我正在写一个shell脚本(将成为cronjob),它将: 1:转储我的生产数据库 2:将转储导入我的开发数据库 在步骤1和2之间,我需要清除开发数据库(删除所有表?)。如何通过shell脚本最好地完成此工作?到目前为止,它看起来像这样: #!/bin/bash time=`date '+%Y'-'%m'-'%d'` # 1. export(dump) the current production database pg_dump -U production_db_name > /backup/dir/backup-${time}.sql # missing step: drop all tables from development database so it can be re-populated # 2. load the backup into the development database psql -U development_db_name < backup/dir/backup-${time}.sql


20
可视化数据库架构的好工具?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有什么好的工具可以可视化现有数据库模式?如果有问题,我正在使用MySQL。 我当前正在使用MySQL Workbench来处理SQL创建脚本转储,但是它笨重,缓慢并且需要手动操作来拖移所有表(如果不是那么慢的话就可以了)。

11
Sequelize.js:如何使用迁移和同步
我即将准备好启动我的项目。在启动后,我有很大的计划,数据库结构也将发生变化-现有表中的新列以及新表,以及与现有模型和新模型的新关联。 我还没有接触过Sequelize中的迁移,因为我只有测试数据,所以我不介意在每次数据库更改时都清除掉这些数据。 为此sync force: true,如果我更改了模型定义,则目前我正在运行我的应用程序。这将删除所有表并使它们从头开始。我可以忽略force使它仅创建新表的选项。但是,如果现有的更改,这将无用。 因此,一旦添加迁移,事情如何工作?显然,我不希望删除现有表(其中包含数据),所以这sync force: true是不可能的。在我帮助开发的其他应用程序(Laravel和其他框架)中,作为该应用程序部署过程的一部分,我们运行migration命令来运行所有待处理的迁移。但是在这些应用程序中,第一个迁移具有框架数据库,该数据库处于开发尚处于初期状态的状态-首次发布Alpha版本或其他内容。因此,即使是晚到派对的应用程序实例,也可以通过依次运行所有迁移,一口气掌握速度。 如何在Sequelize中生成这样的“首次迁移”?如果我没有,则该应用程序的新实例可能会没有骨架数据库来运行迁移,或者它将在开始时运行同步,并使所有数据库都处于新状态新表等,但是当它尝试运行迁移时,它们将变得毫无意义,因为它们是在原始数据库的基础上编写的,并且考虑到了每个连续的迭代。 我的思考过程:在每个阶段,初始数据库加上依次进行的每次迁移都应等于(正负数据)数据库, sync force: true运行。这是因为代码中的模型描述描述了数据库结构。因此,也许即使没有迁移表,我们也可以运行同步并将所有迁移标记为完成,即使它们没有运行。这是我需要做的(如何?),还是应该由Sequelize自己做,还是我吠错了树?如果我在正确的区域,那么肯定会存在一种自动生成大部分迁移的好方法,考虑到旧模型(通过提交哈希?甚至每个迁移都可以与提交相关联?),我承认我在想在不可移植的以git为中心的世界中)和新模型。它可以改变结构并生成将数据库从旧版本转换为新版本所需的命令,然后再返回,然后开发人员可以进行必要的调整(删除/转换特定数据等)。 当我使用--init命令运行sequelize二进制文件时,它给了我一个空的迁移目录。然后,当我运行sequelize --migrate它时,我得到一个SequelizeMeta表,里面没有任何东西,没有其他表。显然不是,因为该二进制文件不知道如何引导我的应用程序和加载模型。 我肯定错过了什么。 TLDR:如何设置我的应用程序及其迁移,以便可以更新实时应用程序的各种实例,以及没有旧启动数据库的全新应用程序?

24
我应如何命名将两个表映射在一起的表?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 假设我有两个表: Table: Color Columns: Id, ColorName, ColorCode Table: Shape Columns: Id, ShapeName, VertexList 我该如何称呼将颜色映射为形状的表? Table: ??? Columns: ColorId, ShapeId

2
什么是MDF文件?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 8年前关闭。 改善这个问题 这就像是一个“嵌入式”数据库吗?包含内置数据库的文件?
137 mdf  sql-server  database  file 

7
如何在SQL Server数据库中查找最大的对象?
我将如何查找SQL Server数据库中最大的对象?首先,通过确定哪些表(和相关索引)最大,然后确定特定表中的哪些行最大(我们将二进制数据存储在BLOB中)? 是否有任何工具可以帮助进行这种数据库分析?还是有一些我可以针对系统表运行的简单查询?

10
实体属性值数据库与严格的关系模型电子商务
可以肯定地说,EAV / CR数据库模型是错误的。那就是 问题:应该使用哪种数据库模型,技术或模式来处理描述可以在运行时更改的电子商务产品的属性“类”? 在一个良好的电子商务数据库中,您将存储选项的类别(例如电视分辨率,然后为每个电视都具有一个分辨率,但是下一个产品可能不是电视,并且没有“电视分辨率”)。您如何存储它们,有效搜索以及允许用户使用描述其产品的可变字段来设置产品类型?如果搜索引擎发现客户通常根据控制台深度搜索电视,则可以将控制台深度添加到字段中,然后在运行时为每种电视产品类型添加一个深度。 优秀的电子商务应用程序中有一个很好的通用功能,它们可以显示一组产品,然后具有“向下钻取”侧边菜单,您可以在其中看到“电视分辨率”作为标题,以及最常见的前五种电视分辨率。找到集。您单击一个,它仅显示该分辨率的电视,从而允许您通过在侧面菜单上选择其他类别来进一步向下钻取。这些选项将是在运行时添加的动态产品属性。 进一步讨论: 长话短说,互联网上是否有任何链接或模型描述可以“学术地”修复以下设置? 我感谢诺埃尔·肯尼迪(Noel Kennedy)提出了类别表,但需求可能更大。我在下面以另一种方式描述它,以强调其重要性。我可能需要进行视点校正以解决该问题,或者我可能需要更深入地研究EAV / CR。 喜欢对EAV / CR模型的积极回应。我的所有开发人员都说以下是Jeffrey Kemp谈到的内容:“新实体必须由专业人员建模和设计”(出于上下文考虑,请在下面阅读他的回答)。问题是: 实体每周添加和删除属性 (搜索关键字决定将来的属性) 新实体每周到达 (产品由零件组装) 旧实体每周消失一次 (存档,不受欢迎,季节性) 客户要为产品添加属性有两个原因: 部门/关键字搜索/同类产品之间的比较表 结帐前的消费类产品配置 这些属性必须具有重要性,而不仅仅是关键字搜索。如果他们想比较所有具有“奶油糖霜”的蛋糕,则可以单击蛋糕,单击生日主题,单击“奶油糖霜”,然后检查所有有趣的蛋糕(知道它们都带有奶油糖霜)。这不仅仅针对蛋糕,仅是示例。

20
跟踪数据库架构更改的机制
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 跟踪和/或自动执行数据库架构更改的最佳方法是什么?我们的团队使用Subversion进行版本控制,并且我们已经能够以这种方式自动执行某些任务(将构建推送到登台服务器,将经过测试的代码部署到生产服务器),但是我们仍在手动进行数据库更新。我想找到或创建一个解决方案,使我们能够在具有不同环境的服务器之间高效地工作,同时继续使用Subversion作为后端,通过该后端代码和数据库更新被推送到各种服务器。 许多流行的软件包都包括自动更新脚本,该脚本可检测数据库版本并应用必要的更改。这是在更大范围内(跨多个项目,有时跨多种环境和语言)执行此操作的最佳方法吗?如果是这样,是否有任何现有代码可以简化流程,或者最好只是推出我们自己的解决方案?之前有没有人实现过类似的东西并将其集成到Subversion提交后钩子中,还是一个坏主意? 尽管支持多个平台的解决方案是更可取的,但是我们绝对需要支持Linux / Apache / MySQL / PHP堆栈,因为我们的大部分工作都在该平台上。
135 php  mysql  database  svn  migration 

5
'COLLATE SQL_Latin1_General_CP1_CI_AS'是做什么的?
我有一个SQL查询可以在SQLServer中创建数据库,如下所示: create database yourdb on ( name = 'yourdb_dat', filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf', size = 25mb, maxsize = 1500mb, filegrowth = 10mb ) log on ( name = 'yourdb_log', filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdblog.ldf', size = 7mb, maxsize = 375mb, filegrowth = 10mb ) COLLATE SQL_Latin1_General_CP1_CI_AS; go …

7
暴露数据库ID-安全风险?
我听说公开数据库ID(例如,在URL中)存在安全风险,但是我很难理解原因。 是否对为什么有风险有任何意见或链接? 编辑:当然,访问范围是有限的,例如,如果您看不到资源foo?id=123,则会看到错误页面。否则,URL本身应该是秘密的。 编辑:如果URL是机密的,则它可能包含一个生成的令牌,该令牌的寿命有限,例如,有效期为1小时,只能使用一次。 编辑(几个月后):我目前的首选做法是使用UUIDS作为ID并公开它们。如果我使用序号(通常是为了提高某些DB的性能)作为ID,则喜欢为每个条目生成一个UUID令牌作为备用键,并公开它。
133 database  security 


11
如何在两个Django应用之间移动模型(Django 1.7)
因此,大约一年前,我开始了一个项目,像所有新开发人员一样,我并没有真正专注于结构,但是现在我与Django一起走得更远,它开始似乎表明我的项目布局主要是我的模型在结构上很糟糕。 我的模型主要保存在单个应用程序中,实际上这些模型中的大多数应该放在自己的单个应用程序中,我确实尝试解决了此问题并将其向南移动,但是由于外键等原因,我发现它很棘手,而且确实很困难。 但是,由于Django 1.7并内置了对迁移的支持,现在有更好的方法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.