我正在BBC 上阅读这篇文章。它讲述了一个名叫 Jenifer Null 的人的故事,以及她在使用在线数据库(如预订机票、网上银行等)时如何面对日常问题。
我不精通数据库,也不经常使用它。我在做学习网站的时候,服务器端表单验证使用了正则表达式。据我所知,它很乐意接受“Null”这个名字。我还没有尝试过。
有人可以解释这种情况发生时的技术细节吗?表单验证只是在string == NULL做某事吗?即使这样我也不认为NULL is same as "NULL"。
例如,有一个类似这样的表:
create table foo(bar int identity, chk char(1) check (chk in('Y', 'N')));
Run Code Online (Sandbox Code Playgroud)
标志是否实现为 a char(1)、 abit或其他无关紧要。我只是希望能够强制执行它只能在单行上设置的约束。
使用数据库时的一个常见需求是按顺序访问记录。例如,如果我有一个博客,我希望能够以任意顺序重新排列我的博客文章。这些条目通常有很多关系,因此关系数据库似乎很有意义。
我见过的常见解决方案是添加一个整数列order:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
Run Code Online (Sandbox Code Playgroud)
然后,我们可以对行进行排序order以使它们按正确的顺序排列。
然而,这似乎很笨拙:
很容易想象这样的情况:
orderorder记录之间有间隙由于多种原因,这些可能很容易发生。
这是 Joomla 等应用程序采用的方法:

你可能会争辩说这里的界面很糟糕,他们应该使用箭头或拖放而不是人类直接编辑数字——你可能是对的。但在幕后,同样的事情正在发生。
有些人建议使用小数来存储订单,这样你就可以使用“2.5”在订单 2 和 3 的记录之间插入一条记录。虽然这有点帮助,但可以说它更混乱,因为你最终可能会得到奇怪的小数(你在哪里停?2.75?2.875?2.8125?)
有没有更好的方法将订单存储在表中?
database-design order-by database-agnostic relational-theory
请注意,此问题与供应商/版本无关
在我看来,作为英语演讲者(打字员、作家),期望单词的大小写正确但不一定具有正确方向的正确口音是合理的:
当我在香榭丽舍大街餐厅的酒店领班克洛伊 (Chloe the maitre d'hotel) 的茶会上沉思时,一边等着 garcon 拿来我炒过的墨西哥胡椒酱……
你明白了。
所以今天我想我想要一个搜索条件来使用区分大小写但不区分重音的排序规则,但找不到。这是否有充分的理由,或者我的只是一个罕见的用例?
这是我正在查看的一些文档的示例(尽管认为供应商/版本不可知):
我想知道这个问题还没有被问过。谷歌对我来说只有很少的结果没有显示高质量的工具
有哪些用于数据仓库的开源(也可以免费)解决方案,更具体地说是商业智能工具?你和他们有什么经历。我在我的硕士课程中有过一门课程,我们使用 MS 商业智能和 MSSQL 作为数据仓库存储。现在我想通过“开放”的工具深入探讨这个话题。
是否有任何可比较的商业智能工具(主要是独立于数据库的),您是否有使用它们的经验?
编辑玛丽安对斯蒂芬妮的回答的评论,我发现我把这个问题表述错了。我知道 DWH 只是“报告优化”数据库,斯蒂芬妮对此的解释非常清楚。我更感兴趣的是如何使用什么类型的 BI 软件/工具/其他技术将数据转换为这种优化的形式。
tools data-warehouse database-agnostic business-intelligence
我的问题是关于索引的使用。
我应该从一开始还是在出现性能问题时开始索引?
我们还可以在执行查询时创建临时索引。这种技术的优缺点是什么?
最近的一个项目要求报告资源何时被完全消耗。除了用尽日历日期,我还被要求以类似英语的格式显示剩余时间,比如“1 年零 3 个月”。
内置DATEDIFF函数
返回在指定开始日期和结束日期之间跨越的指定日期部分边界的计数 ...。
如果按原样使用,可能会产生误导或混淆的结果。例如,使用 YEAR 间隔将显示 1999-12-31 (YYYY-MM-DD) 和 2000-01-01 相隔一年,而常识会说这些日期仅相隔 1 天。相反,使用 DAY 1999-12-31 和 2010-12-31 间隔 4,018 天,而大多数人会认为“11 年”是更好的描述。
从天数开始计算月和年,很容易出现闰年和月份大小的错误。
我想知道如何在各种 SQL 方言中实现这一点?示例输出包括:
create table TestData(
FromDate date not null,
ToDate date not null,
ExpectedResult varchar(100) not null); -- exact formatting is unimportant
insert TestData (FromDate, ToDate, ExpectedResult)
values ('1999-12-31', '1999-12-31', '0 days'),
('1999-12-31', '2000-01-01', '1 day'),
('2000-01-01', '2000-02-01', '1 month'),
('2000-02-01', '2000-03-01', '1 month'), -- month length not important
('2000-01-28', '2000-02-29', …Run Code Online (Sandbox Code Playgroud) 我必须承认这个问题非常广泛,所以我会尝试缩小范围。在我们公司,我们有 3-4 名开发人员,并且有一些基于 SQL Server 的安装在我们客户的站点上运行(数据库大小高达 100GB,多达 100 个并发用户,Intranet 应用程序)。我们中没有人在运行/维护/管理(任何)数据库方面有真正的好经验。客户甚至没有那么多。到目前为止它运行良好,但我不能确定是因为我们做的一切都正确,还是我们只是没有触及我们不擅长的领域/情况。
因此,我正在寻找从 DBA 的角度运行数据库时您需要了解的基本内容。您知道确凿的事实,并且知道在您的日常工作中什么最重要。
我应该在哪些科目中收集更深入的知识,我应该听说过哪些知识,哪些是在我第一次面对它之前我可以不关心的?
我知道问题Software Engineers and DBA,但这并不是我想要的。周围也有很多书,但我想听听有实践经验的人的意见。
哪些数据库使用真正的多维索引?oracle 是否曾经使用多个索引从表中获取数据,还是总是使用似乎具有最高选择性的索引?其他dbms怎么样?
index ×2
collation ×1
constraint ×1
date-format ×1
ddl ×1
null ×1
order-by ×1
performance ×1
rollback ×1
tools ×1