问题标签 [database-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
369064 浏览

mysql - 自动生成数据库图 MySQL

我厌倦了在每个项目开始时打开 Dia 并创建数据库图。有没有一种工具可以让我选择特定的表,然后基于 MySQL 数据库为我创建一个数据库图?最好它允许我在之后编辑图表,因为没有设置任何外键......

这是我在图表上描绘的(请原谅可怕的数据设计,我没有设计它。让我们关注图表概念,而不是它代表的实际数据;)):

图表 见全尺寸图

0 投票
23 回答
624022 浏览

database - 数据库、表和列的命名约定?

每当我设计数据库时,我总是想知道是否有最好的方法来命名我的数据库中的项目。我经常问自己以下问题:

  1. 表名应该是复数吗?
  2. 列名应该是单数吗?
  3. 我应该为表或列添加前缀吗?
  4. 我应该在命名项目时使用任何大小写吗?

是否有任何推荐的准则来命名数据库中的项目?

0 投票
3 回答
3303 浏览

sql - 动态搜索多个 sql 表的需要模式

我正在寻找一种在多个表上执行动态搜索的模式。

我无法控制遗留(且设计不佳)的数据库表结构。

考虑类似于简历搜索的场景,其中用户可能希望对简历中的任何数据执行搜索,并获取与其搜索条件匹配的简历列表。任何字段都可以随时与一个或多个其他字段组合进行搜索。

实际的 sql 查询是根据搜索的字段动态创建的。我发现的大多数解决方案都涉及复杂的 if 块,但我不禁认为必须有一个更优雅的解决方案,因为现在这必须是一个已解决的问题。


是的,所以我开始了在代码中动态构建 sql 的路径。看起来很可怕。如果我真的尝试支持查询任何表中任何字段的任何组合的请求能力,这将是一组 MASSIVE 语句。 颤抖


我相信我读到 COALESCE 仅在您的数据不包含 NULL 时才有效。那是对的吗?如果是这样,那就不行,因为我到处都有 NULL 值。

0 投票
8 回答
19026 浏览

database - 为每个客户使用单一数据库有什么优势?

在为多个客户端设计的以数据库为中心的应用程序中,我一直认为为所有客户端使用单个数据库“更好” - 将记录与适当的索引和键相关联。在收听 Stack Overflow 播客时,我听到 Joel 提到 FogBugz 每个客户端使用一个数据库(因此,如果有 1000 个客户端,则将有 1000 个数据库)。使用这种架构有什么好处?

我知道对于某些项目,客户需要直接访问他们的所有数据——在这样的应用程序中,很明显每个客户都需要自己的数据库。但是,对于客户端不需要直接访问数据库的项目,每个客户端使用一个数据库有什么好处吗?似乎就灵活性而言,使用具有单个表副本的单个数据库要简单得多。添加新功能更容易,创建报告更容易,并且更易于管理。

在我听到 Joel(一位经验丰富的开发人员)提到他的软件使用不同的方法之前,我对“所有客户的一个数据库”方法非常有信心——我对他的决定有点困惑......

我听说有人提到数据库会因大量记录而变慢,但任何具有某些优点的关系数据库都不会出现这个问题——尤其是在使用适当的索引和键的情况下。

非常感谢任何输入!

0 投票
12 回答
5807 浏览

sql-server - 数据库触发器

在过去,我从来不喜欢在数据库表上使用触发器。对我来说,它们总是代表着一些将在数据库端发生的“魔法”,远离我的应用程序代码的控制。我还想限制数据库必须做的工作量,因为它通常是共享资源,我一直认为触发器在高负载情况下可能会变得很昂贵。

也就是说,我发现了几个使用触发器有意义的实例(至少在我看来它们是有意义的)。不过最近,我发现自己有时可能需要“绕过”触发器。我对不得不寻找方法来做到这一点感到非常内疚,我仍然认为更好的数据库设计会减少这种绕过的需要。不幸的是,这个数据库被多个应用程序使用,其中一些是由一个非常不合作的开发团队维护的,他们会对模式更改大喊大叫,所以我被卡住了。

关于触发器的一般共识是什么?爱他们?讨厌他们?认为它们在某些情况下是有目的的?是否认为需要绕过触发器意味着您“做错了”?

0 投票
4 回答
287 浏览

database-design - 什么时候文件只是一个文件?

因此,您正在编写一个 Web 应用程序,并且您有几个网站区域可供用户上传文件。我的基本工作方法是将实际文件存储在服务器上,并有一个数据库表将存储的文件名连接到它所关联的记录。

我的问题是:每种“类型”的文件是否应该有一个不同的表?此外,文件应该存储在服务器上与上下文相关的位置,还是一起存储?

一些示例:用户个人资料照片、求职简历、CMS 页面上的相关文档等。

0 投票
5 回答
884 浏览

sql - 查询以字段为列的联合表

我不太确定这是否可能,或者是否属于数据透视表的类别,但我想我会去找专业人士看看。

我有三个基本表:Card、Property 和 CardProperty。由于卡片没有相同的属性,而且同一属性通常有多个值,因此我决定使用联合表方法来存储数据,而不是在卡片表中使用非常大的列结构。

属性表是一个基本的关键字/值类型表。所以你有关键字 ATK 和分配给它的值。还有另一个名为 SpecialType 的属性,一张卡片可以有多个值,例如“Sycnro”和“DARK”

我想做的是创建一个视图或存储过程,它为我提供卡 ID、卡名称和所有分配给卡的属性关键字,作为指定卡的 ResultSet 中的列和它们的值。所以理想情况下,我会有一个结果集,如:

我可以这样计算我的结果。

我想甚至更巧妙的是根据关键字将属性简单地连接在一起,所以我可以生成一个 ResultSet ,如:

..但我不知道这是否可行。

帮我stackoverflow Kenobi!你是我唯一的希望。

0 投票
5 回答
721 浏览

database-design - 保留大型数据集的最佳策略是什么?

我正在领导一个项目,我们将记录指标数据。我想保留数据多年。但是,我还想防止主表因数据而变得臃肿,这些数据虽然对于长期趋势是必要的,但对于短期报告来说却不是必需的。

处理这种情况的最佳策略是什么?只是将旧数据归档到另一个表?还是通过对数据本身进行一些整合来“汇总”(然后将其存储到不同的表中)?还是完全不同的东西?

附加信息:我们使用的是 SQL Server 2005。

0 投票
11 回答
1677 浏览

performance - 一个数据库还是多个?

我正在开发一个网站,将管理多个实体的数据。实体之间不共享数据,但它们可能属于同一客户。客户可能希望从单个“仪表板”管理他们的所有实体。那么我应该为所有事情都建立一个数据库,还是将数据分开到单独的数据库中?有最佳实践吗?有什么积极/消极的:

  • 整个网站的数据库(实体有一个“customerID”,数据有“entityID”)
  • 每个客户的数据库(数据有“entityID”)
  • 每个实体的数据库(数据库与客户的关系在数据库之外)

多个数据库似乎会有更好的性能(更少的行和连接),但最终可能成为维护的噩梦。

0 投票
6 回答
115894 浏览

sql - 推荐的用于标记或标记的 SQL 数据库设计

我听说过几种实现标记的方法;使用 TagID 和 ItemID 之间的映射表(对我来说很有意义,但它可以扩展吗?),向 ItemID 添加固定数量的可能 TagID 列(似乎是个坏主意),将标签保留在逗号分隔的文本列中(听起来疯狂但可以工作)。我什至听说有人推荐一个稀疏矩阵,但是标签名称如何优雅地增长?

我错过了标签的最佳实践吗?