相关疑难解决方法(0)

在关系数据库中存储分层数据有哪些选项?

好的概述

一般来说,您要在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间做出决定.通常,您最终会得到最适合您需求的以下选项组合.以下提供了一些深入阅读:

选项

我知道和一般的功能:

  1. 邻接清单:
    • 列:ID,ParentID
    • 易于实施.
    • 便宜节点移动,插入和删除.
    • 昂贵的找到水平,血统和后代,路径
    • 在支持它们的数据库中通过公用表表达式避免使用N + 1
  2. 嵌套集(又名修改的预订树遍历)
    • 列:左,右
    • 便宜的血统,后代
    • 非常昂贵的O(n/2)移动,插入,由于易失性编码而删除
  3. 桥表(又名闭包表/ w触发器)
    • 使用单独的连接表:祖先,后代,深度(可选)
    • 廉价的血统和后代
    • 写入O(log n)插入,更新,删除的成本(子树的大小)
    • 规范化编码:适用于连接中的RDBMS统计信息和查询规划器
    • 每个节点需要多行
  4. 谱系列(又名物化路径,路径枚举)
    • 专栏:血统(例如/父母/孩子/孙子/等......)
    • 廉价后代通过前缀查询(例如LEFT(lineage, #) = '/enumerated/path')
    • 写入O(log n)插入,更新,删除的成本(子树的大小)
    • 非关系型:依赖于Array数据类型或序列化字符串格式
  5. 嵌套间隔
    • 像嵌套集一样,但是使用实数/浮点数/小数,这样编码就不易变(廉价的移动/插入/删除)
    • 有实/浮/十进制表示/精度问题
    • 矩阵编码变体为"自由"添加了祖先编码(物化路径),但增加了线性代数的诡计.
  6. 平表
    • 修改的Adjacency List,为每条记录添加Level和Rank(例如排序)列.
    • 便宜迭代/分页
    • 昂贵的移动和删除
    • 好用:线程讨论 - 论坛/博客评论
  7. 多个谱系列
    • 列:每个谱系级别一个,指向根目录的所有父级,从项目级别向下的级别设置为NULL
    • 便宜的祖先,后代,水平
    • 便宜的插入,删除,移动的叶子 …

sql database tree relational-database hierarchical-data

1281
推荐指数
7
解决办法
23万
查看次数

SQL Server上INSERT或UPDATE的解决方案

假设一个表结构MyTable(KEY, datafield1, datafield2...).

通常我想要更新现有记录,或者如果新记录不存在则插入新记录.

实质上:

IF (key exists)
  run update command
ELSE
  run insert command
Run Code Online (Sandbox Code Playgroud)

写这个的最佳表现方式是什么?

sql database sql-server insert upsert

564
推荐指数
11
解决办法
60万
查看次数

数据库模式

有谁知道论文/书籍等.那个文件模式的数据库?例如,一个常见的经验法则是每个表都应该有一个主键,并且键应该没有信息内容.所以我想知道是否有人写过关于设计关系数据库的设计模式的书或发表论文?


@Gaius,

这是数据库设计师需要权衡的问题 - 数据库结构的可能稳定性是什么?鉴于足够长的时间范围,没有什么是稳定的.或者说反过来,只要有足够长的视野,一切都会发生变化.代理键(理论上)永远不应该改变它的含义,因为它从来没有意义.

我想在那个特定的设计场景中要考虑的另一件事是谁会看到主键?如果主键是最终用户实际需要引用的东西,那么将它变成可以理解的东西是有意义的.但我想不出最终用户需要看到主键的许多情况; 通常存在主键以允许DB引擎加速某些操作.

我最初想到的问题是找到数据库设计的设计模式,这些设计模式由比我更有经验的数据库设计者编写,以便有希望避免一些容易避免的错误.如果有人编写过数据库设计反模式,那将会很有趣.

database-design design-patterns

24
推荐指数
2
解决办法
5093
查看次数

数据/数据库设计模式?

我想更多地研究完整的数据设计模式.具体而言,存储,处理,缓存和检索数据的不同技术组合.换句话说,看看在facebook等大型系统中使用了多少组件.

据我所知,我们有数据库类别的RBMSNoSQL风格.但是,许多其他技术(永久数据存储之外)对数据的实际使用至关重要 - 例如memcached.然而,我无法找到应该用于充分利用所有架构的总体设计模式.

有没有人有关于整个包装设计模式的文章的链接,这些模式可以用不同的数据库系统组件混合来完成?

这不是数据库规范化数据库特定最佳实践的问题.关于如何最好地使用某种技术也不是一个问题.

可以使用哪些设计模式正确地混合奇怪的技术,以利用每个优势来设计完整,高效的系统?从缓存,到CRUD,到扩展,再到数据完整性.

例如,在小型共享主机上,我可以运行像SQLite这样的博客,因为几乎所有读取都没有写入.另一方面,有些项目是低端VPS,我可以使用MySQL + APC缓存(毕竟只有一台服务器),在高读/写时具有惊人的性能.有超过一个VPS memcached是冠军!

我也是MongoDB和PostgreSQL的粉丝.但是,MongoDB不使用任何形式的RAM限制,因此您应该拥有一个单独的服务器.然而,在MongoDB中存储大型对象并将剩余的重要数据留在PostgreSQL上是双赢的.

但是,这些都是非常基本的设计选择.大规模应用程序设计具有更多抽象,以促进扩展和减少故障点.

database design-patterns

10
推荐指数
1
解决办法
1677
查看次数

有用的库存SQL数据模型?

与我关于有用库存SQL数据集的问题并行,我想知道是否有人遇到过库/网页/维基/等.包含库存SQL数据模型.例如,无数开发人员面临着维护登录凭据表的问题.您是否了解提供此表的最佳实践实施的数据模型?其他用例怎么样?我正在考虑库存控制,销售报告,应用程序事件(登录,注销,查看给定页面或项目等).我在databaseanswers.org上遇到了一个很好的资源,但是想知道是否还有其他资源我应该看看.

正如我对数据集的问题一样,我正在寻找可以很容易地整合到应用程序中的东西,满足许多开发人员的一般需求,以及不是针对单个行业或业务部门的东西.地址簿,登录凭证表,消息等都属于我正在考虑的标准.

有什么想法吗?

sql database dataset datamodel

7
推荐指数
1
解决办法
1958
查看次数

两个相同关系数据库完全同步的设计模式

有没有人知道一种解决同步两个相同关系数据库的复杂性的设计模式?我一直在各种项目中遇到这个挑战,无法找到一个深入处理它的合适模式.我面临的具体挑战是:

  • 对彼此依赖的表和记录进行排序,特别是在有两个表的情况下,每个表都有一个外键相互引用
  • 确保两个模型一致
  • 并发,其中一个模型的用户正在写入正忙于由同步会话更新的模型
  • 最大限度地减少变更知识的开销,并且在执行更新时,数据没有变化
  • 行版本控制,从前一点开始,使用rowversion或timestamp列的行版本控制在更新期间更新行版本,即使没有数据已更改.
  • 在同步会话期间从异常回滚

如果有人知道解决这些挑战的模式,甚至是堆栈,我很乐意听到你的想法.我尝试过使用MS Sync Framework,虽然它确实解决了数据同步中涉及的许多问题,但就上面列出的挑战而言,它并不是一个完整的解决方案.

concurrency synchronization design-patterns atomic relational-database

5
推荐指数
1
解决办法
1835
查看次数

具有多个值的数据库单元?

我正在设计一个应用程序,我想根据症状搜索疾病.我正在尝试使用MySql设计数据库,但作为初学者,我遇到了一些设计理念的麻烦.

基本上疾病会有多种症状,所以在disease桌子上我想要这些列:

disease_id, disease_name, disease_description, **disease_symptoms** 
Run Code Online (Sandbox Code Playgroud)

问题是,一种疾病不会只有一种症状,并且在一个单元格中放置多个值与我在网上发现的数据库设计理念背道而驰.

于是,我找到了最好的解决办法,到目前为止是使一表多列,1对疾病的id,然后像10列,分别为:symptom_0,symptom_1,symptom_2,等.因此,当我进行SQL查询时,它可以返回所有具有特定症状的疾病.

我只是想知道是否有更有效的方法来做到这一点.

mysql database algorithm

1
推荐指数
1
解决办法
6301
查看次数