数据库管理员

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

2
我是否违反了数据库设计中的任何NF规则?
我是创建数据库的新手...我需要为我的招聘Web应用程序创建数据库。 我的应用程序需要安排申请人的筛选,考试和面试,并将结果保存在数据库中。 我的数据库架构如下: 我的问题是我applicant_id在其他表格中包括...,例如考试,面试,考试类型。 我违反任何规范化规则吗?如果这样做,您建议如何改进我的设计?

4
批量数据导入建议
我们正在做一个项目,每天需要从Excel电子表格中导入数据。数据将从预定义模板以及我们的想法中导入,首先,我们将数据上传到临时表中并执行清理操作(删除不必要的信息,在父表中添加新行并获取其FK等)。 我需要知道是否有任何工具或实用程序可以减少我们的工作量。 从不同来源(主要是从Excel电子表格)插入大容量记录的最佳方法是什么?

3
有关大型SQL Server数据库设计的建议
我们正在MSSQL 2008 R2 Standard中创建一个数据库,该数据库将存储大量记录。我们每年在一张表中估计有2亿多条记录,而我们主要是在插入数据时很少进行UPDATE或DELETE操作。它是一个数据存档系统,我们每天都在其中插入历史记录。我们将根据用户要求在此历史记录上生成不同类型的报告,因此我们有些顾虑,需要技术投入和建议。 管理此类存档表和数据库的最佳方法是什么?


3
数据库设计建议
我正在为我们的销售团队设计一个数据库,以用作快速的工作报价工具。我想对设计的特定方面提供一些反馈。 报价基本上是通过选择预定义“装配”的列表来建立的,每个装配都有一个议定的价格。主窗体的简化视图如下所示: +------------ --- ---+ | Assembly options | +------------+------------+----------+------------+---+---+---+ --- +--+ | assembly ▼ | unit cost | quantity | total cost | 1 | 2 | 3 | |50| +------------+------------+----------+------------+---+---+---+ --- +--+ | VSD55 | £10'000 | 2 | £25'500 | 1 | 1 | | | | …

2
编辑数据库时来自MySQL的邮件警报
当root或其他人编辑或更新特定数据库时,如何从MySQL获取邮件?它应该触发发送邮件并记录编辑。 我已经尝试了触发器,但无法正常工作。 服务器规格: Ubuntu 10.04 64位 MySQL服务器5.1.41 我尝试过的脚本 #!/bin/sh tail -f /var/log/mysql/mysql.log | egrep 'INSERT|UPDATE|DELETE|root' | mail -s 'backend update' sushanth@example.com 但它不起作用
8 mysql 

1
MySQL是否仍以这种方式处理索引?
在MySQL中删除重复索引需要花费相当长的时间,因此在等待期间,我进行了搜索并找到了2006年以来的这篇文章,谈论MySQL如何处理ADD和建立DROP索引。 如果表T是具有四个索引(ndx1,ndx2,ndx3,ndx4)的MySQL表,并且您想“更改表T的删除索引ndx3;” 这正是幕后发生的事情: 1)MySQL将T.MYD复制到临时表,即S.MYD和零字节的S.MYI。2)MySQL确实在表S上添加了索引ndx1(...);3)MySQL确实在表S上添加了索引ndx2(...);4)MySQL确实在表S上添加了索引ndx4(...);5)MySQL删除T.MYD并删除T.MYI 6)MySQL将S.MYD重命名为T.MYD,并将S.MYI重命名为T.MYI 这仍然是真的吗?他的建议仍然有效吗? 给定具有四个索引(ndx1,ndx2,ndx3,ndx4)的同一MyISAM表T,并且您要“更改表T的删除索引ndx3;” 试试这个代替: 1)创建像T一样的表T1;这将创建一个具有索引ndx1,ndx2,ndx3和ndx4的空表T1。2)alter table T1丢弃索引ndx3; 这会将索引ndx3丢弃在空T1上,该索引应该是瞬时的。3)插入T1中,从T中选择*;这将填充表T并一次性加载T1的所有三(3)个索引。4)放表T表;5)将alter table T1重命名为T; 大家如何处理大表中的索引添加和删除?

2
对Sql Server 2005中的DBMail进行故障排除
在SQL Server 2005计算机上,我已设置DBMail并正确配置。我可以使用“通知操作员”和EXEC msdb.dbo.sp_send_dbmail将电子邮件排队。 但是问题是排队的邮件永远不会通过。查询时,我在队列中看到10封电子邮件 SELECT * FROM msdb.dbo.sysmail_unsentitems 但是,如果我重新启动 SQL Server服务,则所有邮件都会通过,并且我会在收件箱中收到电子邮件。 到目前为止,这是我唯一能找到的模式。 所以我的问题是:有没有办法对DBmail进行故障排除?我阅读了有关MSDN的一些步骤,但是它们并没有太大帮助。任何对文章有帮助的URL都将不胜感激。

1
SQL Server中的B树节点拆分策略可单调增加价值
考虑一个将始终单调增加的值的B树索引,例如IDENTITY类型的列。使用传统的B树实现,每当一个节点满时,它将被拆分50%/ 50%,最后我们得到一个B树,其中几乎所有节点都只有50%满。 我知道Oracle发现何时值会不断增加,在这种情况下,Oracle会执行90%/ 10%的拆分。这样,(几乎)所有节点都将充满90%的数据,对于这些非常常见的情况,页面利用率要高得多。 我无法在SQL Server中找到类似功能的文档。但是,我进行了两个实验,分别在索引中插入了N个随机整数和N个连续整数。前一种情况使用了更多的页面,而后者则使用了更多页面。 SQL Server是否提供类似的功能?如果是这样:您能指出我一些有关此功能的文档吗? 更新: 通过下面提供的实验,叶节点似乎保持未分裂状态,内部节点分裂了50%/ 50%。这使得递增键上的B树比随机键上的树更紧凑。但是,Oracle提出的90%/ 10%的方法甚至更好,我仍然在寻找一些官方文档来验证实验中看到的行为。

3
Postgres,MVCC和锁定
我有一系列类似于以下内容的SQL语句: BEGIN; SELECT counter FROM table WHERE id=X FOR UPDATE; REALLY COMPLEX QUERY; UPDATE table SET counter=Y WHERE id=X; END; 我想防止在重新计算计数器值时读取该计数器,但是根据Postgres的文档,“行级锁不影响数据查询;它们仅阻止写入同一行的写入器。” 问题: 如果不阻止读取,那么“排他性”行锁又有什么意义呢?只是为了防止其他事务获取共享锁吗? 如果我使用SELECT ... FOR SHARE读取该行,是否会达到与“排他”锁相同的效果? 是否可以为表/模式/数据库关闭MVCC并允许就地写入?

1
MySQL具有延迟的高可用性,故障转移和复制
我们正在实施在MySQL上运行的新CMS(Drupal 6.x)。我们有两个数据中心-主数据中心和辅助数据中心,它们之间的延迟已知。我们不确定我们将运行哪个MySQL版本...社区还是企业,但这是一个待定。看来我们将运行InnoDB引擎,操作系统将为RedHat EL 5.5。主服务器将处于活动状态,而辅助服务器将处于被动或热备用状态。 我想在两个数据中心的MySQL中实现复制,高可用性和自动故障转移。 故障转移到辅助服务器后,当我们故障回复到主服务器时,我们希望将数据从辅助数据库快速而完整地同步到主数据库,以便我们可以继续从主服务器提供内容。 我很想知道可以使用哪些技术/工具/最佳实践来解决/解决这些问题。同样,任何陷阱或啊哈时刻也将不胜感激。我已经阅读了有关MySQL复制,群集和Tungsten和Dolphinics等某些第三方工具的资料,但是我不确定什么是最佳方法。 感谢您的时间! KM

1
Oracle物化视图刷新计划
因为我看到可以指定像sysdate + 1这样的表达式,所以这是我的问题: 是否可以为oracle中的实例化视图指定确切的刷新时间? 是否有可能全部从凌晨2点开始,而没有人使用我的应用程序中的数据库?
8 oracle  view 

4
TSQL:查找查询分别导致过多的SQL编译和SQL重新编译
我想找出是什么导致性能监视器计数器中出现的高SQL编译(不是重新编译)。 这是我的看法:如果我看到许多SQl编译,则意味着由于以下原因,我们的系统上的查询未得到缓存: 许多特别查询 运行SQl不缓存的查询,例如: UPDATE table1 SET col1 ='字符串长于8000个字符...'WHERE key_column =一些整数 计划正在超时并从缓存中删除,原因如下:缓存空间不足或计划使用时间不够长。 捕获捕获到探查器中的缓存插入的唯一方法是存储过程-> SP:CacheInserts,但它仅负责存储过程缓存。 所以我尝试了以下方法来获取即席查询: SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache. , [cp].[usecounts] , [cp].[objtype] , st.[dbid] , st.[objectid] , st.[text] , [qp].[query_plan] FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st CROSS …

4
如何在MySQL中执行复杂的GROUP BY?
我有一个表,其中包含几个进入其他表的键(每个键由多个列组成)。我希望能够将具有相同键的行分组在一起,但是我不想将所有行分组在一起。这不是简单GROUP BY的键,而是我希望能够使分组的数量为10。因此,如果某个特定键出现50次,则当我进行分组时(5组,共10组),我将获得5个结果。我也希望该分组在密钥内随机发生。 我不知道直接执行此操作的方法,而且我想出的环形交叉路方法无法正常工作。我想到的回旋解决方案是为每个键创建一个新列,该键将是一个整数,以使值i表示该ith键的出现(但以随机顺序)。然后,我可以进行整数除法,以使键中的每n个(例如10个)行具有相同的值,并且可以GROUP BY对该值进行a运算。 有没有更直接的方法来完成我刚刚描述的内容?这很尴尬,在创建新的索引列时遇到了问题(正如我在此问题中所述)。 编辑:首先请注意,这是针对MySQL。如果我的目标不清楚,我将添加一个示例。MySQL文档显示了一种接近目标的方法: CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; 这将创建一个表,该表虽然不是我想要的,但会变得接近: +--------+----+---------+ | grp | id | …


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.