database-design相关内容

SELECT 查询是否总是以相同的顺序返回行?带有聚集索引的表

我的 select * 查询是否总是以相同的顺序返回我的数据库表中的行? 我的表的一列有一个“聚集索引".这会改变答案吗? 解决方案 返回的行的顺序将不始终相同,除非您使用 ORDER BY 子句.所以,没有. 没有;仅仅因为您的 1000 个查询返回了相同的顺序,它不能保证第 1001 个查询的顺序相同. ..
发布时间:2021-12-26 21:14:36 数据库

多个但互斥的外键 - 这是要走的路吗?

我有三个表:用户、公司和网站.用户和公司都有网站,因此每个用户记录在网站表中都有一个外键.此外,每条公司记录都有一个指向网站表的外键. 现在我想将网站表中的外键包含回它们各自的“父"记录中.我怎么做?每个网站记录中是否应该有两个外键,其中一个始终为 NULL?或者还有别的方法吗? 解决方案 如果我们查看这里的模型,我们将看到以下内容: 一个用户只与一个网站相关 一家公司只与一 ..
发布时间:2021-12-26 21:14:14 数据库

外键与完整性检查约束

我正在构建一个系统,它是一个中央存储库,用于存储来自许多其他系统的数据.当其他系统数据更新时,需要同步过程来更新中央存储库.将有一个 sync_action 表来标识中央存储库需要与哪个系统同步以及所需的同步类型.有一组不太可能改变的已定义操作.下面是一个精简的系统. 在我看来,我可以通过两种方式来解决这个问题: 选项 1) 有一个 Action 表,其中包含 3 个可用的操作.有一个 ..
发布时间:2021-12-26 21:14:05 其他开发

在 PostgreSQL 中每行只执行一次延迟触发器

我在表上有一个延迟的 AFTER UPDATE 触发器,设置为在更新某个列时触发.这是我用作计数器的整数类型. 我不是 100% 确定,但看起来如果我在事务期间将该特定列增加 100 次,触发器会在事务结束时排队并执行 100 次. 无论我将该列增加多少次,我都希望触发器每行只安排一次. 我能以某种方式做到这一点吗?或者,如果触发的触发器无论是否重复都必须排队,我可以在触发器的第 ..
发布时间:2021-12-26 21:13:59 其他开发

候选键有什么意义?

我对数据库管理还很陌生,这个问题似乎永远不会超过一句话回答.所有其他 SO 答案都说“候选键是最小的超级键."这对我来说毫无意义. 候选键应该指定数据库记录的唯一性,对吗?主键是候选键.如果主键已经指定了唯一性,那么添加更多候选键有什么意义? 我看到过如下示例记录: 员工(ID、姓名、电话号码) 其中 ID 是主键,PhoneNumber 是候选键.据我所知,ID足以指定员 ..

您应该将自引用表列设为外键吗?

例如,要创建类别层次结构,您可以使用“parent_id"列,该列指向同一表中的另一个类别. 这应该是外键吗?缺点/优点是什么? 解决方案 是的.确保您没有孤儿(没有父项的条目),并且根据使用情况,如果您定义级联删除,则当删除父项时,其所有子项也将被删除. 缺点是像任何其他外键一样轻微的性能损失. ..
发布时间:2021-12-26 21:13:34 其他开发

PostgreSQL - 根据另一个单元格值设置默认单元格值

如果我有一列说 column a 的任何给定值,并且我希望另一列 column b 有一个 default value 根据到列a 的值 换句话说: if column a = 'peter' then column b 默认值 = 'doctor'. 解决方案 使用简单的 DEFAULT 值不可能,例如 手册明确指出: 该值是任何无变量表达式(子查询和不允许交叉引用当前表中的 ..

为主键选择数据类型时应该考虑什么?

当我创建一个新的数据库表时,选择主键的数据类型时应该考虑哪些因素? 解决方案 很抱歉这样做,但我发现我给相关问题的答案(您可以查看 this 和 this) 可以适用于这个.我对它们进行了一些改造... 您会发现很多帖子都涉及这个问题,您做出的每个选择都有其优点和缺点.这些参数通常参考关系数据库理论和数据库性能. 在这个问题上,我的观点很简单:代理主键总是有效,而自然键可能并不 ..
发布时间:2021-12-26 21:13:23 其他开发

“每张表"上自动递增键的优缺点

我们公司正在讨论是否要在我们数据库的每个表上放置一个自动增量键. 我可以理解把一个放在有 FK 引用的桌子上,但我有点不喜欢把这样的键放在我们的每一张桌子上,即使这些键永远不会被使用. 除了占用额外空间和稍微减慢一切(我们有一些包含数亿条记录的表)之外,请帮助解决将自动增量键放在每个表上的利弊. 谢谢 解决方案 我假设几乎所有的表都会有一个主键——这只是一个问题,该键是由 ..
发布时间:2021-12-26 21:13:14 其他开发

在关系数据库中维护子类的完整性

假设我有一个代表超类的表,学生.然后我有 N 个表来表示该对象的子类(运动员、音乐家 等).我如何表达一个约束,使得学生必须在一个(不是更多,不是更少)子类中建模? 关于评论的说明: 这是手动维护的,而不是通过 ORM 包. 与此相关的项目位于 SQL Server 之上(但很高兴看到通用解决方案) 这可能不是最好的例子.关于子类化,我们可以考虑几种情况,而我恰好发明了这个学生/运 ..
发布时间:2021-12-26 21:13:02 数据库

自然键与代理键 innodb 外键

一个问题: 我有两张桌子: 产品身份证号码名称 VARCHAR(64)一些文字其他 INT完全布尔 和 成分身份证号码名称 VARCHAR(64)描述文本 现在我也有一个链接表 Products_Ingredientsproduct_id INT成分_id INT 对于我的多对多关系. 现在,产品和成分都将拥有独特的名称.所以我可以使用名称作为自然键……但这会是一个好主意吗 ..

为什么主键的外键部分是标识关系?

我试图理解一个概念,而不是修复一段不起作用的代码. 我将举一个表单(父表)和一个表单域(子表)的一般示例.逻辑上,这将是一种识别关系,因为没有表单就不能存在表单字段. 这会让我觉得为了将逻辑关系转化为技术关系,form_id字段的一个简单的NOT NULL在 form_field 表中就足够了.(见上面截图的左侧部分.) 但是,当我使用 MySQL Workbench 添加识别关 ..
发布时间:2021-12-26 21:12:38 其他开发

数据库设计:一张大表还是单独的表?

目前我正在设计一个供我们公司使用的数据库.我们使用的是 SQL Server 2008.该数据库将保存从多个客户那里收集的数据.该数据库的目标是获取多个客户的汇总基准数据. 最近,我特别担心一张桌子会变得非常大.每个客户大约有 20.000.000 行数据,数据库中很快就会有 30 个客户(如果不是更多的话).很多查询都会在这个表上完成.我已经注意到性能问题和用户被暂时锁定. 我的问题 ..

如果不存在,如何创建序列

我尝试使用 检查 Postgres (plpgsql) 中是否存在序列. 如果序列不存在,则创建序列.运行此代码两次导致异常: 序列...已经存在. 如果序列不存在,如何创建序列? 如果序列不存在,则不应写入任何消息,也不应发生错误,因此我无法在此问题的另一个答案中使用存储过程,因为如果序列存在,它每次都会将消息写入日志文件. 做$$开始SET search_path = ..
发布时间:2021-12-26 21:12:24 其他开发

将 MySQL EAV 结果作为关系表检索的最佳性能是什么

我想从 EAV(实体-属性-值)表中提取结果,或者更具体地说是实体-元数据表(像 wordpress wp_posts 和 wp_postmeta)作为“格式良好的关系表",为了进行一些排序和/或过滤. 我找到了一些关于如何在查询中格式化结果的示例(而不是编写 2 个查询并在代码中加入结果),但我想知道这样做的“最有效"方法,尤其是用于更大的结果集. 当我说“最有效"时,我的意思是类似 ..

如果满足条件则阻止插入

我有一个像这样的表Content: id |文字 |日期 |idUser → 用户 |内容类型 还有另一个表格Answer: idAnswer → 内容 |idQuestion → 内容 |被接受 我想确保 Answer 的日期大于 Question 的日期.问题是带有 contentType = 'QUESTION' 的 Content. 我尝试使用以下触发器解决此问题,但是当我尝 ..
发布时间:2021-12-26 21:12:07 其他开发

为什么单主键比复合键好?

为什么拒绝复合键而支持使用名为 id 的单个主键的所有表?因为一般所有的 ORM 都遵循这个. 编辑 我刚开始在 Rails 上学习 ruby​​,在 pragmatic 的敏捷开发书中有一句话:---除非每个表都有一个数字主键,否则 Rails 真的不能很好地工作.对列的名称不那么挑剔.我在学习 Doctrine 时读过的同样的台词. EDIT2也请检查此链接.我对这件事越来越 ..
发布时间:2021-12-26 21:11:57 其他开发

链接表是否需要无意义的主键字段?

我正在研究几个链接表,我开始思考(Danger Will Robinson,Danger)链接表的可能结构是什么,它们的优缺点是什么. 我为链接表提出了一些可能的限制: 传统的 3 列模型 id - 自动编号的 PRIMARY table1fk - 外键 table2fk - 外键 这是经典,在大多数书中,'nuff 说. 索引 3 列模型 id - 自动编 ..
发布时间:2021-12-26 21:11:51 其他开发