Questions tagged «database»

该标签用于一般数据库问题。如果您对SQL有疑问,请改用该标记。

7
您如何从桌面应用程序处理数据库安全性?
大约十年来,我一直在使用SQL Server数据存储来处理各种内部桌面客户端应用程序。我很少启动这些项目-大多数是接管工作。 似乎到处都是的一件事是,该应用程序使用了一个单一的全局SQL Server用户帐户,该帐户向普通数据库授予了该帐户的权限,是的,在某些幼稚的情况下,它使用了该sa用户帐户,我通常尝试在可能的情况下进行修复。 您不能真正有效地隐藏应用程序用来访问数据库的用户名和密码。它们通常存储在ini或config文件中,或者可能烘焙到可执行文件本身中。在所有情况下,如果进行一点挖掘,它们对于用户都是可见的。在一种情况下,我们实际上使用了一个config文件但对其进行了加密,但是当然加密密钥必须存储在可执行文件中(我们并非天真地限制了它的局限性,但是它确实有效地阻止了人们回避那些精明的人查看config文件)。 所有这些系统都在应用程序中内置了一个用户身份验证系统,但是当然它们都是通过应用程序本身进行管理的,这意味着用户信息存储在数据库中。该应用程序根据访问级别限制了您可以执行的操作,但是如果您仅可以连接到数据库并运行即席查询,那就太麻烦了。 我很想知道其他系统可以解决这个问题。这是我所知道的选项: 使用SQL Server的安全性机制维护用户和角色列表,并使桌面应用程序通过T-SQL查询添加和删除用户。 创建直接在服务器上运行的某种Web服务并将身份验证逻辑放在其中,而不是直接连接到数据库。使每个请求都进行安全验证。 第一个选项有些丑陋,因为您要将用户与数据库分开,因此用户不再是一流的实体,并且不能使用外键关系等来引用它们。 第二个似乎是一个主要的性能问题,需要大量额外的工作,而且您不能像NHibernate(我认为)那样容易地使用ORM映射器。 这个事情谁有经验?最佳做法? 编辑 再想想,SQL Server身份验证能否真正解决此问题?例如,如果您的用户必须能够插入和更新时间表记录,以便您可以编辑时间表,则SQL Server无法禁止访问时间表明细表中的其他行,这意味着您也可以读写其他人的时间表。

5
索引数据库
我对数据库不是很熟悉,现在我正在尝试了解索引机制。 据我所知,在RDBMS中,对列进行索引可以使按该列进行搜索的速度更快。对于三元组存储库也是如此,只有那里的索引假定您(例如)主要按主题搜索,然后按对象搜索,依此类推。 我不确定RDBMS,但是在三重存储中,您可以定义多个索引,让存储为每个查询选择最佳索引(希望我理解正确)。自然地,出现以下问题: 为什么我不应该将所有可能的索引添加到三元组存储中,并扩展到RDBMS,为什么不在每列上都建立索引(假设我不太懒惰)?
12 database 


5
项目开始时的敏捷方法和数据库
敏捷的新手,我不确定如何开始。这个想法是在sprint中创建项目的一小部分。但是,我正在处理的项目需要一个数据库,并且该数据库必须具有几乎可以正常运行的功能才能对该项目执行任何操作。 那么,敏捷项目如何处理这个问题,首先要创建数据库吗? 您将如何操作,例如,如果使用Scrum,您将如何处理用户故事并测试数据库。 您是否愿意在还需要代码的故事中做数据库的一部分。 假设您有一个故事“作为用户,您必须能够注册...”,您是否会在数据库中创建user表作为该故事的一部分? 敏捷如何帮助您设计数据库?

8
在关系数据库中建模单例的最佳方法
在为Web应用程序设计关系数据库架构时,经常会遇到一种情况,最终我创建了一个表,仅包含一行和一行。感觉那是设计它的错误方法,但是我无法提出任何明显更好的方法,或者那显然是“正确的方法”。 最近的示例是一个站点,该站点使用户可以手动控制主页上的内容。好吧,只有一个主页。我创建了一个表,其中包含构建主页的所有必要字段,例如包含描述性文本的区域的文本字段。一个用于存储大图像文件名称的字段。一些外键指向将在首页上显示的文章,等等。它虽然有效,但是只有一行的表感觉不对。 过去,我尝试了许多其他设计,例如允许主页表中包含多行并随机选择一个。我尝试添加一个名为“ active”的布尔字段,并随机选择一个活动主页。在应用程序逻辑中,我尝试在任何给定时间仅强制一行处于活动状态。我什至尝试不制作主页表,也不让所有其他项(例如文章)具有名称为featured_on_homepage之类的布尔字段。 在大多数情况下,我可以在设置文件中使用一堆常量来构建主页。设置文件的主要问题在于它在开发人员的控制之下。因为像主页内容这样的东西是用户要编辑的东西,所以它必须进入数据库。 在许多站点上,我没有这个问题,因为我可以通过查询来构建诸如首页之类的内容,例如选择五篇最新文章。但是,当我有严格要求的手动页面时,在数据库中对其建模就变得很棘手。但是想象一下,您有一张照片桌子和一张物品桌子。要求是首页要显示精确的五张照片,精确的三篇文章和两块由用户手动控制的任意文本。您如何在数据库中正确建模呢? 另外,除了首页以外,我在许多其他情况下都遇到了建模问题。这只是我能想到的最简单,最适用的示例。

4
您如何看待不是真正的ORM的新Java持久性工具?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 Java的持久性 在过去的几年中,我使用EJB 2.0,Hibernate,JPA和自家的概念,在Java持久性抽象领域积累了经验。在我看来,他们的学习曲线陡峭且复杂。另外,作为SQL的忠实拥护者,我还认为许多抽象模型都提供了过多的SQL抽象,从而创建了诸如“标准”,“谓词”,“限制”之类的概念,这些概念是非常好的概念,但对SQL却不是。 Java中的持久性抽象的一般思想似乎是基于对象关系模型的,其中RDBMS以某种方式与OO世界相匹配。ORM辩论一直以来都是一种激动人心的辩论,因为似乎没有一个适合所有人的解决方案-甚至可以存在这样一种解决方案。 OO 我个人对避免ORM相关问题的偏爱是坚持关系世界。现在,数据模型范式的选择不应成为讨论的话题,因为它是个人喜好,或者是哪种数据模型最适合具体问题。我想开始的讨论围绕着我自己的持久性工具jOOQ进行。我设计了jOOQ,以提供现代持久性工具具有的大多数优势: 基于SQL的领域特定语言 源代码生成将基础数据库模式映射到Java 支持许多RDBMS 添加一些现代持久性工具所没有的功能(如果我错了,请纠正我): 支持复杂的SQL-联合,嵌套选择,自联接,别名,case子句,算术表达式 支持非标准SQL-存储过程,UDT,ENUMS,本机函数,分析函数 请查看文档页面以获取更多详细信息:http : //www.jooq.org/learn.php。您将看到在Linq中为C#实现了非常相似的方法,尽管Linq并非专门为SQL设计的。 问题 现在,说了我是SQL的忠实拥护者,我想知道是否其他开发人员也会分享我对jOOQ(或Linq)的热情。这种持久性抽象方法是否可行?您可能会看到哪些优点/缺点?我如何改善jOOQ,您认为有什么缺失?从概念上或实践上我哪里出了问题? 批判但建设性的答案表示赞赏 我知道这场辩论是一场感性的辩论。有许多很棒的工具已经在做类似的事情。根据您自己的经验或您可能已阅读的文章,我感兴趣的是至关重要但具有建设性的反馈。
12 java  orm  database  linq 

2
如果其中一项失败,您如何设计更新多个微服务的软件?
我是否可以使用设计模式或实践来帮助出现故障或停机的服务,而其他服务却保持稳定? 如果我有三个微服务,其中两个很好,又在POST中间死了怎么办?有两个将获得POST,而一个则不会。我认为我无法进行交易,因为我正在将请求发送给服务。 我该如何设计?我不想在各种数据库中孤立数据。

3
在ORM层上创建一个抽象层
我相信,如果您的存储库使用的是ORM,那么它已经足够从数据库中提取出来了。 但是,在我现在工作的地方,有人认为我们应该有一个抽象ORM的层,以防我们以后要更改ORM。 创建一个可以在许多ORM上使用的层真的必要吗? 编辑 只是为了提供更多细节: 我们有与AutoMapper映射的POCO类和实体类。实体类由存储库层使用。然后,存储库层使用附加的抽象层与Entity Framework进行通信。 业务层决不能直接访问实体框架。即使在ORM上没有附加的抽象层,这一层也需要使用使用存储层的服务层。在这两种情况下,业务层都与ORM完全分开。 主要论据是将来能够更改ORM。因为对我来说,它确实是本地化的,所以它已经很好地分离了,我不明白为什么要使用一个附加的抽象层才能具有“质量”代码。
12 database  orm 

4
数据访问层中的业务对象
因此,我一直在通过TDD创建数据访问层,并且有些担心。我宁愿不走错误的道路,所以我想让你们看看我的想法是否符合干净的体系结构。 我的数据访问层(简称DAL)中的方法非常简单。它们与数据库中的存储过程一致(没有其他方法可以使数据库保持干净),并且它们包含与存储过程相同的参数。然后,他们仅连接到数据库,并返回查询结果。这是一个例子: public int DeleteRecord(int recordId) { recordId.RequireThat("recordId").NotZeroOrLess(); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId}); return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray()); } 这对于这种类型的方法非常有效,因为我对结果集没有做任何有意义的事情。我只想确保命令有效,所以我将返回非查询的结果,该查询只是受影响的行,并且我可以使用该数字来验证逻辑。 但是,在另一种DAL方法中,我想加载一条记录。我的加载过程将selects针对一堆表执行并返回a DataSet,但是我正在努力解决DAL是否应该使用来在方法内创建Business Objects的问题DataSet,或者我的Business Objects本身是否应该具有Load()获取该方法的方法的问题。DataSet然后从DAL开始,然后基本完成 通过DAL进行操作会导致业务对象中的逻辑更少(即使这只是选择逻辑,仍然是逻辑),但是会使DAL有点拥挤,使人感觉它确实在做它不应该做的事情。做。 你们有什么感想?

4
长字符串数据库的最佳方法
我需要将问题和答案存储在数据库中。问题将是一到两个句子,但答案会很长,至少一个段落,甚至可能更多。 我现在知道要做的唯一方法是SQL数据库。但是,我觉得这不是一个好的解决方案,因为据我所知,这些数据库并未用于这种类型或大小的数据。这是正确的方法还是有更好的方法来存储此数据?有没有比存储原始字符串更好的方法?



8
统一编程和数据库查询
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 考虑一下面向对象的编程语言(如C ++或Java)的通用教程:创建一个简单的订单处理系统,其中的对象代表帐户,订单,项目等(或多或少的等效对象)。完全具有直觉意义,但餐桌上的大象认为它不是真实的,因为它们是内存中的对象。在实际系统中,帐目,订单等实际上并没有真正存在于内存中,而是存在于数据库中,而内存表示只是它们的短暂镜像。 您可以自己编写很多代码来读取和写入数据库,但这是如此乏味且容易出错,实际上没有人这样做。 每个人最终都使用ORM,但是它们本身就存在问题,以至于著名的论文称它们为“我们行业的越南”。 我认为这不是对象和关系之间的不匹配,而是编程语言和数据库之间的不匹配,因为它们是彼此不了解的独立事物。猜想:解决方案是使用一种既是编程语言又是数据库查询语言的语言,这又将要求语言运行时也是数据库,而JIT编译器也必须是查询优化器。 这就是我所看到的问题的摘要。我的问题是,有没有人, 实际上建立了这样一个统一的系统 尝试过但未能建立这样的统一系统 关于如何构建这样的主题,或者为什么或为什么不这样做,写了很多实质性的文章 提出解决问题的替代方法?

5
如何防止两个用户同时使用相同的用户名注册?
我们无法序列化注册,因为有数百万人同时注册。需要并行注册。 假设数据库不包含用户名“ user1”。当两个用户尝试同时使用“ user1”注册时,它将接受它。但是以后会引起问题。这不应该发生。 我正在寻找一个合理的解决方案。没有什么特别的。解决这个问题的一个想法。

5
数据库连接-应该将它们作为参数传递吗?
我们有一个系统,通过该系统,可以使用通用方法获得一次数据库连接,并在整个要使用的相关类中传递数据库连接。有人怀疑将数据库连接作为参数传递给不同的类会导致问题,因此我在这里检查是否确实可行,并且还有更好的模式吗? 我知道有一些ORM工具可以实现持久性,但我们还不能介绍。 欢迎任何反馈,谢谢。

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.