Questions tagged «sql»

结构化查询语言(SQL)是一种用于在关系数据库管理系统中管理数据的语言。该标签用于一般的SQL编程问题。它不适用于Microsoft SQL Server(为此,请使用sql-server标记),也不能单独引用SQL的特定方言。

4
为什么许多设计会忽略RDBMS中的规范化?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我看到很多设计都认为标准化不是决策阶段的首要考虑。 在许多情况下,这些设计包括超过30列,主要方法是“将所有内容放置在同一位置” 根据我记得,归一化是最重要的第一件事,那么为什么有时它这么容易掉下来? 编辑: 好的建筑师和专家选择非规范化的设计,而没有经验的开发人员选择相反的设计,这是真的吗?反对着手规范化设计的观点是什么?

2
SQL IN()与OR
我正在处理我今天编写的查询,必须将WHERE子句中的代码更改为使用IN(东西列表)过滤器,而不是使用类似 item_desc = 'item 1' OR item_desc = 'item 2' OR item_desc = 'item 3' OR item_desc = 'item 4' 上面的内容运行了15分钟,什么也没有返回,但是下面的内容在1.5分钟内给了我我的结果 item_desc IN ( 'item 1' ,'item 2' ,'item 3' ,'item 4' ) 我在SQL中执行此操作,并且想知道为什么IN(项列表)执行的速度比OR语句快得多。 -编辑-SQL Server 2008,我很抱歉没有将这些信息放在第一位。 这是使用OR语句的全部查询: DECLARE @SD DATETIME DECLARE @ED DATETIME SET @SD = '2013-06-01'; SET @ED …
23 sql  speed 

11
我的同事创建了一个96列的SQL表
在这里,我们是2010年,具有4年或5年或经验的软件工程师,仍然在设计带有96个压裂柱的工作台。 我告诉他这将是一场噩梦。 我向他展示了我们必须使用普通语言将MySQL与C#接口。 我解释说,列多于行的表有很大的味道。 不过,我得到“这样会更简单”。 我该怎么办? 编辑* 该表包含来自传感器的数据。 我们有带 Dynamic_D1X的传感器1 Dynamic_D1Y [...] Dynamic_D6X Dynamic_D6Y [...] 编辑2 * 好吧,我终于离开了那份工作。这是另一个程序员在几个月后昏昏欲睡的一个信号,是管理层没有意识到这是一个问题的另一个信号。
23 sql  code-smell 

4
为什么不让非参数化查询返回错误呢?
SQL注入是一个非常严重的安全性问题,很大程度上是因为它很容易弄错:显而易见的,直观的方法来构建包含用户输入的查询,这使您容易受到攻击,而减轻它的正确方法则需要您了解参数化查询和SQL注入优先。 在我看来,解决此问题的显而易见的方法是关闭一个显而易见的(但错误的)选项:修复数据库引擎,以便接收到的所有在其WHERE子句中使用硬编码值而不是参数的查询都返回一个漂亮的,描述性的错误消息,指示您改为使用参数。显然,这需要有一个退出选项,这样管理工具中的临时查询之类的东西仍然可以轻松运行,但是默认情况下应启用它。 这样做将关闭SQL注入冷服务,几乎在一夜之间,但是据我所知,实际上没有RDBMS这样做。有什么理由不这样做吗?
22 security  sql  rdbms 

2
具有两个python进程访问它的SQLite:一次阅读,一次写作
我正在开发一个包含两个组件的小型系统:一个从互联网资源中轮询数据,然后将其转换为sql数据以将其持久化在本地;第二个从本地实例读取该sql数据,并通过json和一个平稳的api提供服务。 我本来打算使用postgresql保留数据,但是由于应用程序将要存储的数据量非常小,无法提供服务,因此我认为这太过分了。SQLite是否可以胜任?我喜欢占用空间小的想法,并且不需要为此任务维护另一台sql服务器,但是我担心并发性。 似乎在启用预写日志记录的情况下,可以在不将任何进程锁定在数据库之外的情况下同时进行SQLite数据库的读写。 如果只有一个SQLite实例读取并且另一个写入,则单个SQLite实例能否维持两个并发进程对其进行访问?我开始编写代码,但想知道这是否是SQLite的错误应用。

2
SQL是声明性的吗?
我之所以问,是因为我在SQL中看到的许多问题总计为:“这很慢。如何加快速度”?还是教程说明“以这种方式而不是以这种方式这样做,因为它更快”。 在我看来,SQL的很大一部分是知道如何执行表达式,并从中选择性能更好的表达式样式。这与声明性编程的一个方面不符-只是让系统决定要如何最好地执行计算,而只需指定计算应产生的内容。 SQL引擎不应该不在乎您是否使用过它in,exists或者join它是否确实是声明性的,是否应该仅在合理的时间内通过三种方法中的任何一种为您提供正确的答案?最近的帖子提示了最后一个示例,该帖子是我在开始段落中提到的类型。 指标 我想我可以使用的最简单的示例涉及为表创建索引。w3schools.com上的 “ gumph” 甚至试图将其解释为用户出于性能原因看不到的某种东西。它们的描述似乎将SQL索引置于非声明式阵营中,并且出于纯性能的原因,通常将它们手工添加。 是不是他们的某个地方是理想的SQL DB,它比其余所有声明性都强得多,但是因为那是一个好人却没有听说的SQL DB?

4
维护移动客户端和服务器之间的参照完整性
所以我有一个相对简单的系统。一个移动客户端在sqlite数据库中创建我想同步到远程SQL服务器(与其他移动客户端共享)的记录。因此,当我在电话的sqlite表中创建新记录时,我随后通过RESTful API将更改推送到远程服务。我遇到的问题是如何排序主键,以便数据中没有冲突(即电话中的记录具有与服务器上完全不同的记录相同的主键)。在客户端上引用记录并在服务器上引用相同记录的最佳实践是什么?
21 sql  web-services 

9
是否将业务逻辑放入存储过程中?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 关于“-是否将业务逻辑放入存储过程?”这一主题一直存在争议。如果我们决定不使用ORM工具并且不将业务逻辑放入存储过程中,那么我们将业务逻辑放在哪里? 在以前的应用程序中,我始终倾向于仅将所有业务逻辑放入存储过程中。然后从.NET代码中,我使用数据访问应用程序块调用这些存储过程。SQLHelper等。但这并非一直都是这种情况。所以我做了一些谷歌搜索,但最终陷入了混乱。 有什么建议...吗?
21 c#  .net  sql 

5
为什么选择RIGHT JOIN而不是LEFT JOIN
如果我理解正确,每个RIGHT JOIN: SELECT Persons.*, Orders.* FROM Orders RIGHT JOIN Persons ON Orders.PersonID = Persons.ID 可以表示为LEFT JOIN: SELECT Persons.*, Orders.* FROM Persons LEFT JOIN Orders ON Persons.ID = Orders.PersonID 我个人认为该声明的意图是: 首先得到 Persons 然后Persons根据需要展开/重复,以匹配Orders 最好用的顺序来表示,而Persons LEFT JOIN Orders不是用相反的顺序来表示Orders RIGHT JOIN Persons(因此我从不使用RIGHT JOIN)。 有什么情况下RIGHT JOIN首选a?或者,是否有任何用例RIGHT JOIN可以做一些不能做的事情LEFT JOIN?

8
您将如何设计具有自定义字段的用户数据库
这个问题是关于我应该如何设计一个数据库,它可以是关系型/ nosql数据库,这取决于什么是更好的解决方案 根据要求,您需要创建一个系统,该系统将包含一个跟踪“公司”和“用户”的数据库。一个用户总是只属于一个公司 用户只能属于一个公司 一个公司可以有很多用户 “公司”表的设计非常简单。公司将具有以下属性/列:(让我们保持简单) ID, COMPANY_NAME, CREATED_ON 第一种情况 简单明了,用户都具有相同的属性,因此可以通过关系样式,用户表轻松完成此操作: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CREATED_ON 第二种情况 如果不同的公司想要为其用户存储不同的配置文件属性,会发生什么情况。每个公司将具有一组定义的属性,这些属性将应用于该公司的所有用户。 例如: 公司A要存储:LIKE_MOVIE(布尔值),LIKE_MUSIC(布尔值) 公司B要存储:FAV_CUISINE(字符串) 公司C要存储:OWN_DOG(布尔值),DOG_COUNT(整数) 方法1 暴力方式是为用户提供一个单一的架构,并在不属于公司的情况下让其为空: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, LIKE_MOVIE, LIKE_MUSIC, FAV_CUISINE, OWN_DOG, DOG_COUNT, CREATED_ON 这有点麻烦,因为您最终会得到很多NULL,并且用户行的列与它们不相关(即,属于公司A的所有用户的FAV_CUISINE,OWN_DOG,DOG_COUNT的值为NULL) 方法2 第二种方法是拥有“自由格式字段”: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CREATED_ON 由于您不知道什么是自定义字段,因此这本身就很麻烦,数据类型将无法反映所存储的值(例如,我们将int值存储为VARCHAR)。 方法3 …

6
使用多个数据库/服务器与数据进行交互
到目前为止,我必须处理的所有项目都只需要在单个服务器上使用一个数据库。我有兴趣了解更多有关需要扩展的项目如何迁移到多个数据库和/或服务器以帮助管理负载的信息。我知道High Scalability,但是我对一些代码示例或其他资源特别感兴趣,可以从中阅读更多有关该主题的信息。 例如: 如何在多个数据库的两个表之间构造联接?(这里的代码示例会有所帮助)。 是否有用于跟踪哪个数据库中的表的特殊策略? 应用程序代码是否需要知道一个或多个数据库分布在多个服务器上?如果不是,则在什么级别过滤请求? 什么时候可以超越1数据库/ 1服务器设置?需要这样做有多普遍?
18 php  sql 

2
F#是否提供对数据库驱动的Web开发特别有用的功能?
我的组织终于在今年升级到了MS Visual Studio 2010。Visual Studio 2010提供的一项重大新功能是F#编程语言。 我了解F#提供了类似于Lisp的功能编程范例。但是与Lisp不同,F#被编译为.net框架的托管代码。 现在,我从事数据库驱动的Web应用程序开发。现在,我正在使用后端是SQL代码的N层应用程序,前端是C#.net AJAX Web应用程序。我想知道F#是否提供对此类开发特别有用的任何东西。

4
数据库抽象-是否过高?
在接触了众多数据库抽象层之后,我开始怀疑每个库发明自己的不同范例来访问数据的意义何在。选择一种新的DAL感觉就像是在重新学习一种新的语言,通常我要做的只是说服该层输出我已经写在脑海中的SQL查询。 事实上,这甚至没有涉及可读性: # Exhibit A: A typical DAL rows = db(db.ips_x_users.ip_addr == '127.0.0.1') .inner_join(db.ips_x_users.user_id == db.users.id) .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10) # Exhibit B: Another typical DAL rows = db.ips_x_users .join(db.users, on=db.ips_x_users.user_id == db.users.id) .filter(db.ips_x_users.ip_addr == '127.0.0.1') .select(sort=~db.ips_x_users, limit=10) # Exhibit C: A hypothetical DAL based on standard SQL syntax rows = …
18 database  sql  api-design  dsl 

2
实施过滤搜索的最佳方法
我想问您,关于实施过滤后的搜索表单的意见。让我们想象以下情况: 1个有很多列的大表 可能很重要的一点是,此SQL Server 您需要实现一个表单来搜索此表中的数据,并且在此表单中,您将具有几个复选框,可用于汇总此搜索。 现在,我的问题是,以下哪一项应该是实现搜索的最佳方法? 创建一个内部带有查询的存储过程。此存储过程将检查应用程序是否提供了参数,如果未提供参数,则将在查询中放入通配符。 创建一个动态查询,该查询将根据应用程序给出的内容进行构建。 我之所以这样问,是因为我知道SQL Server在创建存储过程时会创建执行计划,以优化其性能,但是通过在存储过程内部创建动态查询,我们会牺牲执行计划获得的优化吗? 请告诉我,您认为最好的方法是什么。

7
使用SQL查询构建器有哪些优势?
使用查询生成器而不是使用原始SQL有什么好处吗? 例如 $q->select('*') ->from('posts') ->innerJoin('terms', 'post_id') ->where(...) vs: SELECT * FROM posts WHERE ... 我看到许多框架都使用这些抽象层,但是我无法理解其好处。
17 php  sql  frameworks 

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.