好的概述
一般来说,您要在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间做出决定.通常,您最终会得到最适合您需求的以下选项组合.以下提供了一些深入阅读:
选项
我知道和一般的功能:
O(n/2)移动,插入,由于易失性编码而删除O(log n)插入,更新,删除的成本(子树的大小)LEFT(lineage, #) = '/enumerated/path')O(log n)插入,更新,删除的成本(子树的大小)假设一个表结构MyTable(KEY, datafield1, datafield2...).
通常我想要更新现有记录,或者如果新记录不存在则插入新记录.
实质上:
IF (key exists)
run update command
ELSE
run insert command
Run Code Online (Sandbox Code Playgroud)
写这个的最佳表现方式是什么?
有谁知道论文/书籍等.那个文件模式的数据库?例如,一个常见的经验法则是每个表都应该有一个主键,并且键应该没有信息内容.所以我想知道是否有人写过关于设计关系数据库的设计模式的书或发表论文?
@Gaius,
这是数据库设计师需要权衡的问题 - 数据库结构的可能稳定性是什么?鉴于足够长的时间范围,没有什么是稳定的.或者说反过来,只要有足够长的视野,一切都会发生变化.代理键(理论上)永远不应该改变它的含义,因为它从来没有意义.
我想在那个特定的设计场景中要考虑的另一件事是谁会看到主键?如果主键是最终用户实际需要引用的东西,那么将它变成可以理解的东西是有意义的.但我想不出最终用户需要看到主键的许多情况; 通常存在主键以允许DB引擎加速某些操作.
我最初想到的问题是找到数据库设计的设计模式,这些设计模式由比我更有经验的数据库设计者编写,以便有希望避免一些容易避免的错误.如果有人编写过数据库设计反模式,那将会很有趣.
我想更多地研究完整的数据设计模式.具体而言,存储,处理,缓存和检索数据的不同技术组合.换句话说,看看在facebook等大型系统中使用了多少组件.
据我所知,我们有数据库类别的RBMS和NoSQL风格.但是,许多其他技术(永久数据存储之外)对数据的实际使用至关重要 - 例如memcached.然而,我无法找到应该用于充分利用所有架构的总体设计模式.
有没有人有关于整个包装设计模式的文章的链接,这些模式可以用不同的数据库系统组件混合来完成?
这不是数据库规范化等数据库特定最佳实践的问题.关于如何最好地使用某种技术也不是一个问题.
可以使用哪些设计模式正确地混合奇怪的技术,以利用每个优势来设计完整,高效的系统?从缓存,到CRUD,到扩展,再到数据完整性.
例如,在小型共享主机上,我可以运行像SQLite这样的博客,因为几乎所有读取都没有写入.另一方面,有些项目是低端VPS,我可以使用MySQL + APC缓存(毕竟只有一台服务器),在高读/写时具有惊人的性能.有超过一个VPS memcached是冠军!
我也是MongoDB和PostgreSQL的粉丝.但是,MongoDB不使用任何形式的RAM限制,因此您应该拥有一个单独的服务器.然而,在MongoDB中存储大型对象并将剩余的重要数据留在PostgreSQL上是双赢的.
但是,这些都是非常基本的设计选择.大规模应用程序设计具有更多抽象,以促进扩展和减少故障点.
与我关于有用库存SQL数据集的问题并行,我想知道是否有人遇到过库/网页/维基/等.包含库存SQL数据模型.例如,无数开发人员面临着维护登录凭据表的问题.您是否了解提供此表的最佳实践实施的数据模型?其他用例怎么样?我正在考虑库存控制,销售报告,应用程序事件(登录,注销,查看给定页面或项目等).我在databaseanswers.org上遇到了一个很好的资源,但是想知道是否还有其他资源我应该看看.
正如我对数据集的问题一样,我正在寻找可以很容易地整合到应用程序中的东西,满足许多开发人员的一般需求,以及不是针对单个行业或业务部门的东西.地址簿,登录凭证表,消息等都属于我正在考虑的标准.
有什么想法吗?
有没有人知道一种解决同步两个相同关系数据库的复杂性的设计模式?我一直在各种项目中遇到这个挑战,无法找到一个深入处理它的合适模式.我面临的具体挑战是:
如果有人知道解决这些挑战的模式,甚至是堆栈,我很乐意听到你的想法.我尝试过使用MS Sync Framework,虽然它确实解决了数据同步中涉及的许多问题,但就上面列出的挑战而言,它并不是一个完整的解决方案.
concurrency synchronization design-patterns atomic relational-database
我正在设计一个应用程序,我想根据症状搜索疾病.我正在尝试使用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查询时,它可以返回所有具有特定症状的疾病.
我只是想知道是否有更有效的方法来做到这一点.