数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
这是设计数据库的标准方法吗?
我最近了解了如何在工作中的数据库中定义关系,并且想知道这是否是标准做法。 假设我们有两个流程:流程A和流程B。流程B取决于流程A的结果,因此需要在流程B运行和流程A运行之间定义一种关系。关系的定义方式如下: TableProcessA: Id 和 TableProcessB: Id ProcessAId 现在,到目前为止,事情对我来说还是有意义的,但是后来事情对我和我对表格设计的理解变得有些奇怪。每当在TableProcessA或TableProcessB中创建一行时,都会调用一个函数,该函数为每个函数创建一个全局唯一的ID。因此,基本上,TableProcessA和TableProcessB中的所有Id字段都将不包含任何匹配项,因为Id不仅是其表唯一的,而且对于整个数据库都是唯一的。 我的问题是,这是什么标准?我想到了一个想法,即每个表都应该仅具有一个自动递增的ID,该ID仅对表而不对整个数据库唯一。

6
围绕唯一索引最大16列的任何方式
根据CREATE INDEX文档: 单个组合索引键最多可以组合16列。 我们有一个约18列的表格,需要形成一个唯一的组合。该表对性能不敏感-我们很少更新值/插入记录。我们只需要确保避免重复记录即可...并认为我们可以施加一个简单的唯一性约束。 有任何想法吗?如果有更好的方法,我愿意完全避免使用唯一的索引/约束。

2
MySQL Auto_increment由2乘2
前几天,我安装了MySQL Workbench,访问了公司的数据库,并为自己创建了一个可使用的表。到目前为止,一切都很好。问题是,我注意到我的auto_increment由2递增2。例如: ID NAME 1 Paul 3 Jack 5 Louis 7 John ... 当我这样做时SHOW VARIABLES LIKE 'auto_inc%': 'auto_increment_increment', '2' 'auto_increment_offset', '1' 所以我尝试通过以下方式设置auto_increment_increment为1: SET @@auto_increment_increment=1 并再次验证后,SHOW VARIABLES LIKE 'auto_inc%'我确认结果“有效”: 'auto_increment_increment', '1' 'auto_increment_offset', '1' 但是我的ID 仍以2乘2递增。 第一次这样做,它运行良好,然后我关闭了MySQL Workbench,意识到再次打开它时,它又auto_increment_increment被设置为2。现在,我尝试再次执行此操作,但是它似乎不再起作用。 有人可以帮我吗? 谢谢你们。

3
删除所有重复项
我正在尝试删除所有重复项,但仅保留单个记录(较短的ID)。以下查询会删除重复项,但要进行大量迭代才能删除所有副本并保留原始副本。 DELETE FROM emailTable WHERE id IN ( SELECT * FROM ( SELECT id FROM emailTable GROUP BY email HAVING ( COUNT(email) > 1 ) ) AS q ) 它的MySQL。 编辑#1 DDL CREATE TABLE `emailTable` ( `id` mediumint(9) NOT NULL auto_increment, `email` varchar(200) NOT NULL default '', PRIMARY KEY (`id`) …
8 mysql  query  delete 

1
是什么使Oracle应用产品DBA与Oracle DBA不同?
所有Oracle数据库都支持Oracle DBA需要了解的某种类型的应用程序。是什么使Oracle应用产品数据库管理员与众不同?该术语是否意味着它们支持Oracle应用产品而不支持数据库,或者它既包含Oracle应用产品又包含数据库的责任。如果是后者,那么这样做似乎与可以在Oracle后端上运行的所有其他类型的应用程序不同。例如,您看不到Oracle .NET DBA。有人可以消除我对此主题的有限理解吗? 更新:从到目前为止的两个答案看来,我似乎对这个问题的措辞不够清楚。我的上下文不是开发人员DBA与生产人员DBA的应用程序DBA。我在问“ Oracle应用数据库管理员”或“ Oracle应用数据库管理员”的特定职位。搜索短语,您将得到如下结果: http://becomeappsdba.blogspot.com/ http://appsdba.info/ http://teachmeoracle.com/interview.html 等。 到目前为止,我发现的最佳漏洞来自http://www.club-oracle.com/articles/what-is-oracle-applications-259/,其中说: Oracle产品管理系统是一种企业资源计划软件,由大型行业运行,以控制其行业范围内的运营。该软件涉及称为独立业务流程模块的独立部分。每个模块基本上都是表单的集合(其中一些数据显示报告),在业务过程的每个阶段都需要输入数据。这些表格对数据输入和流程执行了行业最佳实践控制。
8 oracle 


3
从星期四或一周中的任何一天开始,如何改善每周语句的SQL语句?
我是一个新手,我找不到在任何地方执行此操作的好方法。我有一个数据库表,其中包含一周中不同时间记录的统计信息。报告周从星期四开始。该表包含一个datestamp列(日期),该列存储记录数据的时间。 我需要提取给定一周的数据(报告周从星期四开始)。我写了以下查询: SELECT * FROM `table` WHERE 1 = CASE WHEN WEEKDAY(NOW()) = 0 THEN DATEDIFF(NOW(),`date`) BETWEEN -2 AND 4 WHEN WEEKDAY(NOW()) = 1 THEN DATEDIFF(NOW(),`date`) BETWEEN -1 AND 5 WHEN WEEKDAY(NOW()) = 2 THEN DATEDIFF(NOW(),`date`) BETWEEN -0 AND 6 WHEN WEEKDAY(NOW()) = 3 THEN DATEDIFF(NOW(),`date`) BETWEEN -6 AND 0 …
8 mysql  mariadb 

2
SQL磁盘安装建议-TempDB,Log DB,数据文件放置问题
我们有一个非常活跃的数据库服务器,上面运行着各种应用程序。最繁忙的两个是Laserfiche数据库,该数据库全天进行文档扫描和工作流处理(平均大约每秒2800个批处理请求),还有一个黑莓服务器应用程序可路由电子邮件。还有大约25个其他小型应用程序数据库。 我们是政府机构,因此仅获得单个DB服务器许可证的预算。 最近,我们获得了SAN,以解决磁盘争用问题。 因此,当前,我们在其自己的磁盘(raid 1镜像对)上运行了TempDB,并且已将事务日志和数据文件移至SAN。事务日志放在一个逻辑位置,数据文件放在另一个逻辑位置。从物理上讲,它是相同的阵列,但它是由RAID 1 + 0配置中的总共14个主轴(磁盘)组成的阵列。 一个非常强大的SAN-并且运行情况要好得多。队列长度减半。 就在今天,我们还获得了另一种选择。如果我们当前在文件服务器上需要它,我们也可以有一个4磁盘阵列。我知道通常建议在两个单独的阵列上使用MDF和LDF,但是在我们这种情况下,唯一的方法是将数据或事务日志从SAN移到配置为Raid 5的4磁盘阵列上。请记住,它们是当前位于单独的逻辑卷中,但共享相同的物理阵列。 从臀部射击我觉得将MDF和LDF组合在一起放在14主轴突袭1 + 0阵列上可能和将它们与4主轴突袭5阵列中的一个分开一样好。但是,我不会在这里问我是否是磁盘逻辑专家。两种选择都使用基本相同的15k SAS磁盘-即每个主轴基本相同。 因此,本质上,问题是。通过将数据或日志移动到它自己的4轴raid 5阵列上,在配置为raid 1 + 0的单个14主轴阵列上具有MDF / LDF是否会得到任何显着的改善(或根本没有改善)? 有什么想法吗? 更新信息: 我还将注意到,当前“日志”卷上的平均队列长度始终保持在0.55左右。数据量的平均队列长度很少超过0.01(通常为0.00) sys.dm_io_virtual_file_stats查询结果: <table> <tr> <td>database id</td> <td>Volume</td> <td>io_stall_read_ms</td> <td>num_of_reads</td> <td>avg_read_stall_ms</td> <td>io_stall_write_ms</td> <td>num_of_writes</td> <td>avg_write_stall_ms</td> <td>io_stalls</td> <td>total_io</td> <td>avg_io_stall_ms</td> </tr> <tr> <td>25</td> <td>h</td> <td>175086</td> <td>1411</td> <td>124</td> <td>69</td> <td>41</td> <td>1.6</td> …


1
了解SQL Server权限
我针对我的SQL Server 2008 R2 Express Edition实例在SQL Server Management Studio中扎根。我正在尝试了解权限的工作方式。 我可以看到的是(通过许多这些实体的属性) 我的服务器登录名可以链接到数据库用户 我的数据库用户可以具有一个或多个数据库角色 数据库角色之一是拥有模式db_datawriter的db_datawriter 但是到那时,这条路变得很冷。模式db_datawriter在其属性下具有一个权限页面,该页面为空白。 究竟是什么定义了db_datawriter模式的权限?

2
有什么方法可以有效地在MongoDB中执行等效于DENSE_RANK的操作吗?
SQL Server和Oracle都具有DENSE_RANK函数。有没有办法在MongoDB中做类似的事情而不必求助于MapReduce?换句话说,假设您有一个像这样的T-SQL select子句: SELECT DENSE_RANK() OVER(ORDER BY SomeField DESC) SomeRank 在MongoDB中执行相同操作的最佳方法是什么? (注意:这是MongoDB问题的转贴。我希望能从DBA获得更多反馈...)

2
PostgreSQL:使用其他表的模式和表名吗?
考虑一下我所有的模式名称都放在一个表中而我的所有表名称都放在另一个表中的情况。 是否可以执行以下操作(伪代码)? SELECT value FROM (SELECT schema_name FROM schemas).(SELECT table_name FROM tables) 还是我必须将查询分为三个SELECT?

2
没有参数的EXEC()和sp_executesql之间的区别?
我刚刚了解了新的sp_executesql存储过程。我喜欢这样一种事实,那就是可以在SQL Server中执行参数化的代码。 但是,我想知道没有任何参数时使用sp_executesql存储过程与直接调用EXEC之间有什么区别。另外,有性能暗示吗? exec('select * from line_segment') exec sp_executesql N'select * from line_segment' 此外,2005年和2008年之间是否有区别?还是它们处理这些问题相同?

3
什么时候绝对需要程序查询?
我知道我们倾向于不惜一切代价避免SQL Server中的游标和循环,但是在某些情况下您绝对需要过程查询,而基于集合的查询却不会为您提供结果? 我了解两者之间的区别,只是我从未遇到过需要使用游标的情况。我想知道是否有这种情况。

1
InnoDB死锁是INSERT / UPDATE / DELETE专有的吗?
我正在解决MySQL错误“尝试获取锁时发现死锁;尝试重新启动事务”。 我将不得不更新程序以允许死锁。该SELECT语句是否可能产生死锁错误?我知道这只是一个读锁,因此多个选择不会有问题,但是如果存在INSERT,UPDATE或DELETE语句(对于联接可能有子查询)和SELECT语句(对于联接或子查询可能)怎么办? 有没有可能是错误将在被抛出SELECT,而不是INSERT,UPDATE或DELETE。 如果您好奇的话,这里就是故事。

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.