小编Eva*_*oll的帖子

二进制文件应该存储在数据库中吗?

存储与数据库中数据相关的二进制文件的最佳位置是什么?你应该:

  1. 使用 blob 存储在数据库中
  2. 使用数据库中的链接存储在文件系统上
  3. 存储在文件系统中但重命名为内容的散列并将散列存储在数据库中
  4. 我没有想到的东西

(1) 的优点是(除其他外)事务的原子性得以保留。代价是您可能会显着增加存储(和相关的流/备份)要求

(3) 的目标是在某种程度上保留原子性 - 如果您可以强制您正在写入的文件系统不允许更改或删除文件,并且始终具有正确的哈希作为文件名。这个想法是在允许引用哈希的插入/更新之前将文件写入文件系统 - 如果此事务在文件系统写入之后但在数据库 DML 之前失败,那很好,因为文件系统“假装”是所有的存储库可能的文件和哈希值 - 是否有一些文件没有被指向并不重要(如果你小心的话,你可以定期清理它们)

编辑:

看起来一些 RDBMS 以各自的方式涵盖了这一点 - 我很想知道其他人是如何做到的 - 特别是在 postgres 的解决方案中

database-design blob

147
推荐指数
10
解决办法
9万
查看次数

将“tbl”前缀添加到表名真的是个问题吗?

我正在观看一些 Brent Ozar 视频(例如这个视频),他建议不要在表格前加上‘tbl’‘TBL’

在网上我发现一些博客说它没有增加文档,而且“阅读它需要更长的时间”。

问题和考虑

  • 这真的有问题吗?因为自从我的第一份 dba 工作(高级 DBA 告诉我为组织这样做)以来,我就在表前加上了 'tbl' 前缀。
  • 这是我需要摆脱的东西吗?我做了一些测试,复制了一个非常大的表并给它加上了 'tbl' 前缀,同时保持另一个没有它,我没有注意到任何性能问题。

sql-server best-practices naming-convention

101
推荐指数
13
解决办法
3万
查看次数

在 PostgreSQL 中使用索引

我有几个关于在 PostgreSQL 中使用索引的问题。我有一个Friends带有以下索引的表:

   Friends ( user_id1 ,user_id2) 
Run Code Online (Sandbox Code Playgroud)

user_id1并且user_id2user表的外键

  1. 这些是等价的吗?如果不是,那为什么?

    Index(user_id1,user_id2) and Index(user_id2,user_id1)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我创建主键(user_id1,user_id2),它会自动为它创建索引吗?

    如果第一个问题中的索引不相等,那么在上面的主键命令上创建了哪个索引?

postgresql index primary-key

85
推荐指数
5
解决办法
3万
查看次数

mysql 中 On Delete Cascade 和 On Update Cascade 的区别

我在 MySQL 数据库中有两个表 - parent, child. 我正在尝试根据父表向我的子表添加外键引用。有没有之间的任何显著差异ON UPDATE CASCADEON DELETE CASCADE

我的父表

CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)

我的问题是:以下 sql 查询有什么区别。

  1. ON DELETE CASCADE

    CREATE TABLE child (
        id INT, 
        parent_id INT,
        INDEX par_ind (parent_id),
        FOREIGN KEY (parent_id) 
            REFERENCES parent(id)
            ON DELETE CASCADE
    ) ENGINE=INNODB;
    
    Run Code Online (Sandbox Code Playgroud)
  2. ON UPDATE CASCADE

    CREATE TABLE child (
        id INT, 
        parent_id INT,
        INDEX par_ind (parent_id),
        FOREIGN KEY (parent_id) 
            REFERENCES parent(id)
            ON UPDATE CASCADE
    ) …
    Run Code Online (Sandbox Code Playgroud)

mysql innodb foreign-key mysql-5.5

85
推荐指数
3
解决办法
19万
查看次数

这个键值的数据库模式有名称吗?

我们处理来自客户的常规数据馈送,该客户刚刚将其数据库从一种看起来很熟悉的表单(每个实体一行,每个属性一列)重构为一个我似乎不熟悉的表单(每个实体每个属性一行):

之前:每个属性一列

ID   Ht_cm   wt_kg   Age_yr  ... 
1      190      82     43    ...
2      170      60     22    ...
3      205      90     51    ...
Run Code Online (Sandbox Code Playgroud)

之后:所有属性的一列

ID    Metric   Value
 1     Ht_cm     190
 1     Wt_kg     82
 1     Age_yr    43
 1      ...
 2     Ht_cm     170
 2     Wt_kg     60
 2     Age_yr    22
 2     ...
 3     Ht_cm     205
 3     Wt_kg     90
 3     Age_yr    51
 3     ...
Run Code Online (Sandbox Code Playgroud)

这个数据库结构有名字吗?有哪些相对优势?旧方法似乎更容易对特定属性(非空、非负等)设置有效性约束,并且更容易计算平均值。但是我可以看到在不重构数据库的情况下添加新属性可能会更容易。这是构建数据的标准/首选方式吗?

schema database-design ontology eav

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

功能表现

来自 MySQL 背景,其中存储过程性能(旧文章)可用性值得怀疑,我正在评估 PostgreSQL 为我公司的新产品。

我想做的一件事是将一些应用程序逻辑移到存储过程中,所以我在这里询问有关在 PostgreSQL (9.0) 中使用函数的 DO 和 DON'T(最佳实践),特别是关于性能陷阱。

postgresql best-practices plpgsql

63
推荐指数
4
解决办法
4万
查看次数

在 PostgreSQL 中存储电子邮件地址的最佳方法是什么?

在 PostgreSQL 中存储电子邮件地址的正确数据类型是什么?

我可以使用varchar(甚至text),但我想知道电子​​邮件是否有更具体的数据类型。

postgresql database-design datatypes

59
推荐指数
4
解决办法
4万
查看次数

将 Postgres 表导出为 json

有没有办法将 postgres 表数据作为 json 导出到文件?我需要逐行输出,例如:

{'id':1,'name':'David'}
{'id':2,'name':'James'}
...
Run Code Online (Sandbox Code Playgroud)

编辑:postgres 版本:9.3.4

postgresql export dump postgresql-9.3 json

54
推荐指数
5
解决办法
8万
查看次数

如何在 pgAdmin III 中查看数据

我不敢相信他们让事情变得如此困难。我不知道如何查看我的数据库中的数据。

有没有一种简单的方法可以使用 pgAdmin III 查看我的表中的数据?或者,是否有我可以使用的程序不烂?

postgresql pgadmin-3

50
推荐指数
2
解决办法
9万
查看次数

如何设计用于存储排序列表的数据库?

我希望在数据库中存储一个排序列表。我想有效地执行以下操作。

  1. Insert(x) - 将记录 x 插入表中
  2. Delete(x) - 从表中删除记录 x
  3. Before(x,n) - 返回排序列表中记录 x 之前的“n”条记录。
  4. After(x,n) - 返回排序列表中记录 x 之后的“n”条记录。
  5. First(n) - 从排序列表中返回前 'n' 条记录。
  6. Last(n) - 返回排序列表中的最后 'n' 条记录。
  7. Compare(x,y) - 给定表中的两条记录 x 和 y,查找是否 x > y。

我能想到的简单方法是在表中存储某种“等级”属性,并通过对该属性进行排序来进行查询。但是在这种方法中,插入/修改具有等级的记录成为一项代价高昂的操作。有没有更好的方法?

具体来说,我希望使用 Amazon 的 SimpleDB 来实现该表。但是关系数据库的一般答案也应该有帮助。

负载配置文件更新:

由于我正在为 Web 应用程序规划此功能,因此这取决于使用该应用程序的用户数量。

如果有 100k 活跃用户(超级乐观:P),那么我每天非常近似的估计是

500k 次选择,100k 次插入和删除,500k 次更新

我希望该表总共增长到 500k。

我希望优化更新、插入和比较操作。项目的排名会不断变化,我需要保持表格更新。

database-design

47
推荐指数
3
解决办法
5万
查看次数