Questions tagged «database»

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

6
在数据库配置方面,应该在UTF-8上使用Latin-1吗?
我们在我工作的公司中使用MySQL,并使用Ruby on Rails构建面向客户端和内部的应用程序。 当我开始在这里工作时,遇到了一个以前从未遇到过的问题。生产服务器上的数据库设置为Latin-1,这意味着只要有用户输入,用户在其中复制和粘贴UTF-8字符,MySQL gem就会引发异常。 我的老板称这些为“坏字符”,因为它们大多数是不可打印的字符,并说我们需要将它们去除。我找到了几种方法来完成此操作,但是最终我们遇到了需要UTF-8字符的情况。另外,这有点麻烦,特别是因为似乎我所读过的唯一解决方案是将数据库设置为UTF-8(对我来说很有意义)。 我听到的坚持使用Latin-1的唯一论点是,允许不可打印的UTF-8字符可能会使MySQL中的文本/全文搜索混乱。这是真的吗? 还有其他原因使人应该在UTF-8上使用Latin-1吗?据我了解,它是卓越的,并且变得越来越普遍。

8
创建我自己的数据库系统
我需要学习数据库如何工作才能更有效地使用它们,而我的学习方式就是这样做。 我想创建自己的数据库系统。我并不是指创建一个使用查询来解析文件的伪数据库;这只是带有查询语言的文件系统接口。我说的是数据库引擎的实际结构。而且由于我的想法既不是关系型的也不是面向文档的(如果存在的话,它就是“面向节点的”),所以我需要任何资源尽可能抽象和高级。 那么我将如何去创建它呢?我可以阅读哪些资源/教程/书籍以了解? 语言一点都不重要。理想情况下,该代码应为伪代码以说明该概念,而不是与特定语言绑定,而是可以执行任何操作。我无法在Google上找到关于此事的任何信息(因为我对这个问题非常不了解,也许我只是没有输入正确的搜索字词)。 如果没有这样的资源,那么我想关于如何创建客户端的事情至少是朝正确方向迈出的一步。

15
同事重命名了我所有的查询[关闭]
我不知道我是否应该很生气或什么。我单手为大型数据库构建了300多个查询,并制定了命名约定,以便以后找到它们。我办公室里没有其他人甚至不知道如何建立查询,但是昨天我来找他们都被重命名了。我现在很难找到事情,并且试图弄清楚该怎么做。 我和负责人交谈,她只是轻描淡写了整个事情。她说她重命名了它们,以便可以更轻松地找到它们。不幸的是,我是唯一一个知道如何构建,编辑和维护它们的人,而她找到它们的唯一原因就是测试查询。新的命名约定根本没有意义,我觉得我们在开发过程中倒退了一步。 我想找出的是: 1)我反应过度了吗? 2)处理此问题的最佳方法是什么?我不愿意向老板提起这件事,但是在昨天与同事交谈之后,我已经可以告诉她感觉自己做错了什么。
63 database  sql  access 

15
有什么理由不直接从客户端Javascript转到数据库吗?
可能重复: 编写Web“服务器少”应用程序 因此,假设我要构建一个Stack Exchange克隆,然后决定使用CouchDB之类的东西作为我的后端存储。如果我使用它们的内置身份验证和数据库级别授权,是否有任何理由不允许客户端Javascript直接写入可公开使用的CouchDB服务器?因为这基本上是一个CRUD应用程序,并且业务逻辑由“只有作者才能编辑他们的帖子”组成,所以我认为在客户端内容和数据库之间没有一层的必要性很高。我只是在CouchDB端使用验证,以确保没有人放入垃圾数据,并确保正确设置权限,以便用户只能读取自己的_user数据。渲染将通过类似于AngularJS的客户端完成。从本质上讲,您可能只拥有一个CouchDB服务器和一堆“静态”页面,因此一切顺利。您不需要任何类型的服务器端处理,而只需要一些可以处理HTML页面的内容即可。 向世界开放我的数据库似乎是错误的,但是在这种情况下,只要正确设置权限,我就无法想到为什么。这违背了我作为Web开发人员的本能,但我想不出一个很好的理由。那么,为什么这是个坏主意呢? 编辑:看起来这里有一个类似的讨论:编写Web“服务器少”应用程序 编辑:到目前为止,很棒的讨论,我感谢大家的反馈!我觉得我应该添加一些通用假设,而不是专门调用CouchDB和AngularJS。因此,我们假设: 数据库可以直接从其隐藏存储对用户进行身份验证 所有数据库通信都将通过SSL进行 数据验证可以(但不应这样做)由数据库处理 除了管理员功能外,我们关心的唯一授权是仅允许某人编辑自己的帖子 每个人都可以读取所有数据(除了可能包含密码哈希的用户记录之外),我们非常满意 管理功能将受到数据库授权的限制 没有人可以将自己添加为管理员角色 数据库相对容易扩展 真正的商业逻辑几乎没有,甚至没有。这是一个基本的CRUD应用

7
为什么数据库的关系模型很重要?
我正在处理一个项目,在那里我将不得不与老板一起实现数据库。我们是一家很小的初创公司,因此工作环境非常个人化。 他以前曾给我提供过公司数据库之一,它完全违背了我在学校为RDBMS所教(和读到的)的知识。例如,这里有整个数据库由一个表组成(每个独立数据库)。这些表之一是20+列长,对于上下文,这是一个表中的一些列名: lngStoreID | vrStoreName | lngCompanyID | vrCompanyName | lngProductID | vrProductName 关键是,在他应该拥有保存实体数据(名称,大小,购买日期等)的单个表的情况下,他将所有数据都推入了每个数据库的一个大表中。 我想改进此设计,但是我不确定为什么正确归一化和分段的数据模型实际上可以改进此产品。虽然我熟悉大学的数据库设计并且知道如何进行设计,但是我不确定为什么它实际上可以改善数据库。 为什么好的关系模式可以改善数据库?

10
添加数据库索引是否过早优化?
今天,我的一位同事建议我们仔细检查应用程序中的所有查询并相应地添加索引。 我觉得这是过早的优化,因为我们的应用程序尚未发布。我建议我们上线后监视慢速查询,然后相应地添加索引。 在设计数据库时,一般的共识是什么?每次编写新查询时都应添加匹配的索引吗?还是只监视并查看进展情况更好?

6
这是构建数据库架构的一种荒谬方法,还是我完全缺少了什么?
我已经对关系数据库做了很多工作,并且认为我对良好模式设计的基本概念非常了解。我最近的任务是接管一个由高薪顾问设计数据库的项目。请让我知道我的直觉是否是“ WTF ??!?” -是必要的,还是这个人真是个天才,以至于他超出了我的领域? 有问题的数据库是一个内部应用程序,用于输入员工的请求。仅查看其中的一小部分,您就可以获得有关用户的信息以及有关所提出的请求的信息。我会这样设计: 用户表: UserID (primary Key, indexed, no dupes) FirstName LastName Department 要求表 RequestID (primary Key, indexed, no dupes) <...> various data fields containing request details UserID -- foreign key associated with User table 简单吧? 顾问是这样设计的(带有示例数据): 用户表 UserID FirstName LastName 234 John Doe 516 Jane Doe 123 …
61 database  sql  schema 

11
数据库源代码控制
数据库文件(脚本等)应该在源代码控制中吗?如果是这样,保留它并在那里更新的最佳方法是什么? 甚至需要数据库文件进行源代码控制,因为我们可以将其放在开发服务器上,每个人都可以使用它,并在需要时对其进行更改。但是,如果有人把它弄乱了,我们就无法取回它。 哪种方法最适合源代码控制数据库?

4
在Git中备份MySQL数据库是一个好主意吗?
我正在尝试改善应用程序的备份情况。我有一个Django应用程序和MySQL数据库。我读了一篇文章,建议在Git中备份数据库。 一方面,我喜欢它,因为它将使数据和代码的副本保持同步。 但是Git是为代码而不是数据而设计的。因此,它会做很多额外的工作来使MySQL每次提交都转储,这并不是必须的。如果我在存储文件之前先对其进行压缩,那么git还会对文件进行区分吗? (转储文件当前未压缩为100MB,压缩后为5.7MB。) 编辑:代码和数据库模式定义已经在Git中了,它确实是我现在担心备份的数据。
57 database  git  mysql  django 


8
在数据库中存储可重新排序的列表
我正在开发一个愿望清单系统,该系统中用户可以将商品添加到他们的各种愿望清单中,并且我打算允许用户稍后重新订购这些商品。我不确定如何将其存储在数据库中同时保持快速且不会陷入混乱的最佳方法(此应用程序将由相当大的用户群使用,所以我不希望它崩溃清理东西)。 我最初尝试了一个position列,但是当您移动其他每个项目的位置值时,似乎效率很低。 我见过人们使用自引用来引用上一个(或下一个)值,但是同样,您似乎必须更新列表中的许多其他项。 我见过的另一种解决方案是使用十进制数字,并且仅将项目粘贴在它们之间的间隙中,这似乎是迄今为止最好的解决方案,但我敢肯定必须有更好的方法。 我要说的是,一个典型的列表最多可以包含20个左右的项目,并且我可能会将其限制为50个。重新排序将使用拖放操作,并且可能会分批进行以防止出现竞争情况,例如ajax请求。如果有关系,我正在使用postgres(在heroku上)。 有人有什么想法吗? 为任何帮助加油!

13
是否需要创建一个尽可能少的表的数据库
我们是否应该创建具有最少表数的数据库结构? 应该以一种将所有内容都放在一个地方的方式进行设计,还是可以有更多的桌子? 反正会影响什么吗? 我问这个问题是因为我的一个朋友修改了mediaWiki中的某些数据库结构。最后,他只用了8张桌子而不是20张桌子,花了8个月的时间才完成(这是他的大学任务)。 编辑 我得出的结论是:在特殊情况下,表的大小并不重要;在这种情况下,非规范化可能会有所帮助。 感谢大家的答案。

8
对于需要按内容搜索的大型数据集,使用NoSQL数据库是否不切实际?
我已经学习NoSQL数据库已有一个星期了。 我真的了解NoSQL数据库的优势以及它们非常适合的许多用例。 但是人们通常会在撰写文章时就好像NoSQL可以代替关系数据库一样。还有一点我无法理解: NoSQL数据库是(通常)键值存储。 当然,可以将所有内容存储到键值存储中(通过将数据编码为JSON,XML等),但是我看到的问题是,在许多情况下,您需要获取一些与特定条件匹配的数据用例。在NoSQL数据库中,只有一个可以有效搜索的条件-密钥。关系数据库经过优化,可以有效地搜索数据行中的任何值。 因此,NoSQL数据库并不是持久存储需要按其内容搜索的数据的真正选择。还是我误会了什么? 一个例子: 您需要存储网上商店的用户数据。 在关系数据库中,您将每个用户存储为users表中的一行,并带有ID,名称,他的国家等。 在NoSQL数据库中,您将以ID为密钥存储每个用户,并将其所有数据(以JSON等编码)存储为值。 因此,如果您需要从某个特定国家/地区获取所有用户(出于某种原因,营销人员需要了解他们的某些信息),那么在Relational Database中这样做很容易,但是在NoSQL Database中却不是很有效,因为您必须获取每个用户,解析所有数据并进行过滤。 我并不是说这是不可能的,但是它变得更加棘手,如果您要搜索NoSQL条目的数据,我想那不是那么有效。 您可以为每个国家/地区创建一个密钥,以存储该国家/地区中每个用户的密钥,并通过获取存放在该国家/地区的密钥中的所有密钥来获取特定国家/地区的用户。但是我认为这种技术使复杂的数据集变得更加复杂-难以实现且不如查询SQL数据库有效。因此,我认为这不是您在生产中使用的方式。还是? 我不确定我是否会误解或忽略了一些概念或最佳实践来处理此类用例。也许您可以纠正我的陈述并回答我的问题。

6
在微服务中,每个服务是单个数据库还是单个数据库实例?
我了解微服务架构中的每个服务都应具有自己的数据库。但是,拥有自己的数据库,实际上是在同一个数据库实例中简单地拥有另一个数据库,还是在字面上拥有另一个数据库实例? 这样,我并不是说共享数据库,这是不对的,而是数据库实例。 例如,如果我使用的是AWS并具有3个服务,那么我是否要在单个RDS实例上为每个服务创建3个数据库,还是要创建3个RDS实例,每个实例都包含一个数据库,供3个服务分别使用? 如果在单个RDS实例上使用多个数据库是一个更好的主意,那么它会否决拥有独立服务的目的,因为: RDS实例的资源将在服务之间共享。在特定时间可能大量使用数据库的服务A是否会影响使用不同数据库但在同一RDS实例上的服务B? 所有服务将取决于该RDS实例上的数据库版本。

12
为什么关系数据库不支持以嵌套格式返回信息?
假设我正在建立一个博客,希望发布和发表评论。因此,我创建了两个表,一个具有自动递增整数“ id”列的“ posts”表,以及一个具有外键“ post_id”的“ comments”表。 然后,我想运行可能是我最常见的查询,即检索帖子及其所有评论。对于关系数据库而言,它是相当新的东西,对我而言,最明显的方法是编写看起来像这样的查询: SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments FROM posts WHERE id = 7 这会给我我想要的帖子的ID和内容,以及所有相关的注释行,它们整齐地打包在一个数组中(嵌套表示形式,就像您在JSON中使用的一样)。当然,SQL和关系数据库不是这样工作的,它们可以得到的最接近的结果是在“帖子”和“注释”之间进行联接,这将返回很多不必要的数据重复(重复相同的帖子信息)在每一行中),这意味着要花费大量的时间在数据库上以将它们放在一起,也需要花费我的ORM来解析和撤消所有内容。 即使我指示我的ORM急切地加载帖子的评论,最好的办法是调度一个对该帖子的查询,然后进行第二个查询以检索所有评论,然后将它们放到客户端,效率也不高。 我知道关系数据库是经过验证的技术(地狱,它们比我还旧),并且在过去的几十年中,对它们进行了大量研究,我敢肯定,它们(以及SQL标准)旨在按其功能运行,但我不确定为什么上面概述的方法不可行。在我看来,这是实现记录之间最基本关系之一的最简单,最明显的方法。为什么关系数据库不提供这样的功能? (免责声明:我主要使用Rails和NoSQL数据存储来编写Web应用程序,但是最近我一直在尝试Postgres,我实际上非常喜欢它。我并不是要攻击关系数据库,只是感到困惑。) 我不是在问如何优化Rails应用程序,或如何在特定数据库中解决此问题。我在问为什么SQL标准在我看来违反直觉和浪费时会以这种方式工作。SQL的原始设计者希望他们的结果看起来像这样有一定的历史原因。
46 database  sql  rdbms  query 

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.