AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[design-pattern](dba)

Martin Hope
Sven M.
Asked: 2021-02-04 14:31:50 +0800 CST

清洁代码 - 将密钥放在哪一侧

  • 0

我目前正在建模数据库模式。其中,地址被多次使用,遵循固定的结构。在我们以前的系统中,地址关系被建模为地址包含外键,例如用户的外键。

推理:这样,一个地址只能附加到一个父级。然而,从我的角度来看,这绝对是一个混乱,因为有时地址关系中最多存在八个外键,因此必须注意只有一个被填充。

将密钥放在父节点上不是更有意义吗,这样通过非零约束可以确保每个父节点都有一个地址并且地址关系是干净的?父母也很少/从不从地址侧导航到。

还是我这样做违反了任何约定?在这种情况下,清洁不比“公约”更重要吗?如果需要,还可以另外使用触发器对先前的需求进行建模吗?

当前方法:约束以确保在地址上仅设置一个 FK。

我的方法: address_id 作为父母的 FK。

database-design design-pattern
  • 3 个回答
  • 128 Views
Martin Hope
user2402616
Asked: 2020-12-25 07:26:16 +0800 CST

存储作为同一表上其他字段子集的字段

  • 0

只是想知道我要建模的以下数据的最佳设计模式是什么。

我有一个表,用于存储客户已下订单的信息。

订单可以开票或开票。

目前,该表存储有关总订单信息的数据(所以...开票+未结)。

即totalAmount,totalCost等...

必须在代码中计算已开票和未结信息,然后按行更新。从技术上讲,这些信息可以在计算后仅存在于应用程序的内存中。但是..我认为...存储很便宜,将这些数据存储在表中以供以后使用可能会很有用。

但是,我觉得这有点尴尬,可能会导致大排。

即我会有

totalAmount, totalCost, openAmount, openCost, invoicedAmount, invoicedCost

有没有更好的方法来做到这一点?

谢谢!

mysql design-pattern
  • 1 个回答
  • 21 Views
Martin Hope
motoDrizzt
Asked: 2018-05-28 12:10:10 +0800 CST

关系表应该包含数据而不是逻辑——对吗?

  • 2

好吧,老实说,我找不到更好的标题了。

我最近来到了一个新的工作场所,有人要求我帮助处理数据库。我想尝试解释一个概念,但我不确定如何最好地表达它,也许这个概念已经有了更好的解释和名称。我不把自己标榜为 DB 专家,所以我想向他们展示一些比我自己的观点更正式的东西,无论我一生中设计了多少好的 DB。

我发现最有趣的一件事(但不是很好)是他们似乎是根据问题的逻辑而不是根据“这是一个数据库,它应该包含数据”来设计数据库,因此,例如要知道某个元素是否属于某个类别,查询将以这种方式进行(伪代码):

SELECT Column1, Column2...ColumnN 
FROM Invoices [LIST OF JOIN]
WHERE
Invoces.Field1 IN 
    (TableA WHERE TableA.Field NOT IN 
        (TableB WHERE TableB.Field IN ((TableC WHERE) OR (TableD WHERE)))
OR Invoces.Field1 NOT IN 
    (TableB WHERE TableB.Field IN ((TableC WHERE) AND (TableD WHERE))
OR TableB.Field IN 
    (TableC WHERE TableC.Field IN (TableC WHERE))
OR TableB.Field NOT IN 
    (TableC WHERE TableC.Field NOT IN (TableD WHERE))

依此类推其他二十个左右的条件。不,我不是在开玩笑。

发生这种情况是因为他们没有说“这是一张发票,它的类别是发票本身的一个属性”,而是一直说“这张发票是由那个用户在那天插入的,他本可以插入它进入某个部门或根本没有,如果是部门,那么该部门可能是某个结构的一部分……”等等。这甚至不是参照完整性的问题,在这种情况下根本没有 FKs ...

另一个实际示例是文档的最后编辑日期:它不是作为属性存储,而是通过一个函数计算得出,该函数按照以下方式进行:

如果那个文档与另一个文档相关,那么如果另一个文档是这种,那么如果第一个文档也与这个其他文档相关,那么最后编辑的日期就是管理员打印每日约会日历的日期”。 .

显然,每个 if 也有一堆其他的。而且,这不是因为存在某种依赖关系,只是因为存储了很多东西来反映它们的逻辑。

在某种程度上,我很想说“一次写入,多次读取”,意思是“一次写入该属性,然后根据需要多次免费读取它”,因为我们的写入频率很低,并且读取频率非常高,显然所有读取都必须每次都重新计算所有内容。但我有一种感觉,一定有一些原则表明你应该设计数据库来保存数据......

database-design design-pattern
  • 1 个回答
  • 71 Views
Martin Hope
JBentley
Asked: 2017-05-01 08:22:46 +0800 CST

如何建模与变量表的关系(多态性)?

  • 0

建模以下类型关系的最佳方法是什么?

假设我有代表两种类型实体的表:company和person. 我有一个customer带有entity_id字段的表,它应该引用 acompany或 a person。

如果我只是将 acompany_id或 a存储person_id在其中,entity_id那么我将不知道在哪个表中查找实体。我想到的第一个解决方案是有一个entity_type字段,customer其中将值“company”或“person”告诉我我的外键entity_id指的是哪个表。我不确定这是否是最好的方法。

这似乎应该是数据库设计中相当普遍的问题,所以我希望有一种我可以采用的设计模式。

我在更广泛的意义上在标题中使用了多态这个词,所以我不是指继承。在我的示例中,公司不是人(反之亦然),但它们仍然可以互换。我在 Stack Exchange 网站上发现的其他问题假设继承也是一项要求,所以我不确定是否有合适的副本。

database-design design-pattern
  • 2 个回答
  • 3168 Views
Martin Hope
J. Pichardo
Asked: 2017-03-07 13:55:04 +0800 CST

减少列数的设计模式

  • 0

我有一个包含 49 列的表,该表已被规范化。这似乎有点过分,但由于每个字段都是表单的一部分并且主要实体是表单,因此我无法重构以将列委托给另一个表的关系,因此我的问题是“是否有任何模式旨在减少表格中的列数?”

我曾尝试做类似问题 - 答案模式的事情,但由于答案值可以是许多不同的数据类型(枚举、字符串、数字),因此没有通用的方法来解析所有内容。

更新:

我没有考虑过,但数据最终将在 JSON 上序列化以从 WEBApi 提供服务,因此拥有大量嵌套字段可能意味着麻烦。

database-design design-pattern
  • 4 个回答
  • 438 Views
Martin Hope
jzacharuk
Asked: 2015-04-22 14:37:16 +0800 CST

INFORMATION_SCHEMA 模式

  • -1

INFORMATION_SCHEMA 视图是大多数主要 DBMS 提供的一组标准视图。这种设计模式的名称是什么?

例如,假设超市有十几个源数据库(Safeway、Superstore 等),您希望能够使用一个通用查询来查询所有数据库。这些源数据库中的每一个都将实现一组标准视图的模式(或范例等)是否有名称?

请注意,这纯粹是一个虚构的例子,我并不是在寻找与使用 ETL 工具或数据仓库等相比是否有意义的意见。

design-pattern
  • 1 个回答
  • 44 Views
Martin Hope
starlocke
Asked: 2014-02-06 12:00:53 +0800 CST

这种“穷人的参考完整性”模式设计模式是否有一个众所周知的名称?

  • 5

以下数据库模式设计/模式是否有名称?我的最终目标是找到更多关于该主题的文献。今天粗略的网络搜索充满了通用词,无法确定此类事物的术语(如果存在的话):

Fruit (id, farm)

Apple (fruit_id, color)
    [fruit_id => Fruit.id]

Banana (fruit_id, length)
    [fruit_id => Fruit.id]

Orange (fruit_id, is_seedless)
    [fruit_id => Fruit.id]

FruitPack (id, destination)

FruitPackFruits (fruitpack_id, fruit_id, fruit_type)
    [fruit_id => Fruit.id, fruit_type => VARCHAR]

其中fruit_type将是一个 varchar 列,其中填充了诸如“Apple、Banana、Orange、Cherry”之类的值。这是某种“穷人的参照完整性”。显然,这种设计的失败之一是能够插入无法解析为有用连接的值(即:这里没有樱桃可言)。

下面是这种模式的另一个例子:一个单独的“log (id, table_name, record_id, timestamp)”表,它充当了各种其他表中修改时间的一种跟踪器。严格来说,它没有引用完整性,但是 (table_name, record_id) 部分应该引用另一个表中的某些记录,需要连接才能实际获取完整数据。

我将理所当然地认为该模式是对这里的人们的某种项目组集合的充分讽刺。

问题是:这种“穷人的参照完整性”叫什么?

我不是要了解参照完整性。我想确定这个糟糕的设计的名称,并进一步研究与这种常见的模式灾难有关的“让我们设计一个数据库模式”方面(例如:优点、缺点、意见、教导等)。

database-design design-pattern
  • 2 个回答
  • 390 Views
Martin Hope
anotheruser1488182
Asked: 2013-09-18 03:42:24 +0800 CST

将记录指定为*当前*记录的正确方法是什么?

  • 3

我想到的两个选项是在表中添加一个名为 Current 的布尔列;但我敢肯定,由于可以将多个记录设置为当前记录,这会违反某种程度的规范化。

或者有另一个表指定当前记录的 ID,但这似乎也不是一个很好的方法。

有没有更好的方法或约定来实现这种事情?

编辑: 我可能应该说只能有一个当前记录,所以当它被更改时,以前的当前记录需要删除它的“当前”状态。该系统还没有复杂到需要担心并发性或类似问题的程度。这个问题的主要原因是,如果有的话,我想以正确/传统的方式做事。

我相信最好的方法是有一个设置表来保存当前记录的 ID。

database-design design-pattern
  • 2 个回答
  • 507 Views
Martin Hope
Κύριε ἐλέησον
Asked: 2012-02-29 14:07:48 +0800 CST

敏捷软件开发方法是否适用于 SQL?

  • 8
锁定。这个问题及其答案被锁定,因为这个问题是题外话但具有历史意义。它目前不接受新的答案或互动。

我想了解敏捷软件开发方法/原则/模式是否也适用于 SQL 编程。如果是,从哪里开始学习它是个好地方?是否有任何针对 SQL 上下文中的敏捷开发的文章或书籍?

database-agnostic design-pattern
  • 2 个回答
  • 1371 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve