我目前正在为一个项目重新设计一些数据库。特别是有一个数据库让我有点头疼。这个想法是,对于每个 client_id 和日期(client_id + date 将是 Pri. Key),每一列都将包含我们提供的每种产品的使用情况(大约 12 种产品,并且对于每个需要存储的 Cost、Margin、Total )。我想做这样的事情:
+-----------+------------+--------------+-------------+-------------+------+--------------+
| client_id | date | prod_1_Total | prod_1_Cost | prod_1_Paid | .... | prod_14_Paid |
+-----------+------------+--------------+-------------+-------------+------+--------------+
| aa1 | 2014-01-01 | 245 | 54.97 | 50.58 | ... | 431.23 |
| ... | ... | ... | ... | ... | ... | ... |
+-----------+------------+--------------+-------------+-------------+------+--------------+
Run Code Online (Sandbox Code Playgroud)
我们必须注意,要存在client_id必须在给定日期进行某些活动的记录,换句话说,给定 aclient_id和 a date,其余的列不能是 all NULL,否则该记录将不会出现桌子。
在我看来,将所有这些产品合并到一个像上面这样的表中似乎是一种不好的做法,特别是当对于给定的client_id并且date其中许多将是NULL.
但是我想到的替代方案,为每个产品创建单独的表,提出了一个问题,例如计算某个日期的 …
该文章描述了DBMS作为在应用层,这就是为什么他们经常使用直接IO绕过文件缓存缓存数据。
我的问题是:DBMS在应用层缓存信息有什么好处?当 DBMS 位于远离应用程序的服务器上时,这些优势会受到怎样的影响?
我正在寻找关于在不同实体之间共享的实体的特定“最佳实践”或“模式”,这些实体与众多实体中的一个有关系。
例如,可能有通用实体“地址”,它可用于存储客户、供应商、员工等的公共地址字段......
经验丰富的 DBA 会采取这种方式,还是宁愿将字段添加到相应的实体中?我也在考虑可维护性,可能(将来)会因实体而异的约束,诸如此类。
我很想得到有关该主题的任何权威或既定作品的参考。
Postgres 文档说:
使用索引来强制唯一约束可以被视为不应直接访问的实现细节。但是,应该注意没有必要在唯一的列上手动创建索引;这样做只会复制自动创建的索引。
基于此,如果我想要一个列上的表达式索引并且还希望该列是唯一的,那么case 2下面会更好,因为它可以使用单个索引完成上述操作。而case 1由于唯一约束而自动创建一个索引,而另一个因为我需要小写索引而自动创建?
正如@Colin'tHart 指出的那样,这两种情况不一样。我应该在不使用lower()表达式的情况下发布这个问题。在那种情况下,我的理解是 aCREATE UNIQUE INDEX比唯一约束和简单索引更好。
基于此,如果我想要text_pattern_ops在列上使用运算符类(例如)的索引并且还希望该列是唯一的,那么case 2下面会更好,因为它可以使用单个索引完成上述操作。而case 1会因为唯一约束而自动创建一个索引,而另一个因为我需要不同的运算符类而自动创建?
情况1:
CREATE TABLE book (
id SERIAL PRIMARY KEY,
name text NOT NULL,
CONSTRAINT book_name_key UNIQUE (name)
);
CREATE INDEX book_name_like ON book (name text_pattern_ops);
Run Code Online (Sandbox Code Playgroud)
案例2:
CREATE TABLE book (
id SERIAL PRIMARY KEY,
name text NOT NULL
);
CREATE UNIQUE INDEX book_name_like ON book (name text_pattern_ops);
Run Code Online (Sandbox Code Playgroud) 我有一个表“地点”(id_place,名称,地址,coor_x,coor_y)
我想在一个地方添加他们的“facebook 页面”“twitter 页面”“wesbite”和电话
我的第一个想法是创建一个表,假设 social_contact 包含这些字段,并在地点表 (social_contact_id) 中添加一个额外的列,该列将是 1 到 0..1 的关系(这 4 个字段是可选的,可以为空)
这是好的做法吗?还是我最好将这 4 个新文件直接放入地点表中?
谢谢你!
我是一名大学生,与三位同事一起为一个项目构建 Web 应用程序,我拿了数据库部分。
我们的站点基本上是一个链接共享站点并支持标签,在Mysql数据库中存储标签的有效方法是什么?我想到了这些方法:
1-标签表:链接和标签之间的关系是多对多的,所以我必须用一个中间表打破它,我想不出一个SQL语句来获取带有特定标签的链接示例:用户可能会搜索链接标记为 (php , mysql ) 或 (hardware-issues , gigabyte)。
此外,即使我这样做了,它也需要 join ,我们正在使站点全球化,这意味着有一天数据库将非常庞大,我认为我们无法加入。
2-将标签作为一个数组放在链接表中:我可以放置一个字符串数组,这意味着只有一个选择语句(我认为比 join 更好)但是操作数组会很困难,链接的发布者可能会编辑他/她的链接,我可以想出一种方法来解决这个问题,但我不确定这是否是最有效的方法,当然它没有标准化,数据库会增长得更快,但我认为在服务器上,速度比尺寸。
那么有没有更好的方法呢?
几年前我读到软删除会提高删除的性能,因为它不会实际删除项目并影响聚集(和所有其他)索引,它只会改变一个值。
我最近尝试了这个,但我的表现非常令人失望。
所以我在网上搜索了一个很好的软删除实现,我最终阅读的第一件事是文章/博客说“软删除是不好的”。
显然,当桌子变大时,它弊大于利......
我不认为我所做的会使表格变得更大,因为每晚(每天)的维护都会删除(真正的)所有标记为删除的行。
那么,软删除真的不利于性能吗?真正的删除是否会导致整个聚簇表完全重新排序(这将是很多磁盘操作!!!)?
performance database-design sql-server delete sql-server-2008-r2
如果这是问这个问题的错误地方,我很抱歉。
我的任务是实现一个系统,允许管理员对数据库中的数据进行更改,并将这些更改保存到“状态”或“计划”中。状态需要是可比较的,最终状态被选择成为“主要状态”并用于所有未来的查询。
通常这种情况我会复制数据库并在那里进行更改,但是我所委托的数据库非常大,无法快速复制。我正在使用 MS SQL Server,并与 .NET 中的实体框架接口。
这些工具中的任何一个是否为这个问题提供了包容性的解决方案?这怎么能现实地做到呢?一位同事建议进行版本控制,这听起来很有希望,但我想知道是否有更好的方法。
我有几个表将代表一个可以评论的对象。我想将所有评论存储在一张表中。为了将其他表与评论相关联,我想为每个表添加一个 CommentParentId 列。该列需要在与评论表相关的所有表中都是唯一的,所以我正在考虑创建一个表,CommentParents,它只有一个 Id 列,以便让 DB 处理生成 Id。例如:
编号
标题
正文
用户
日期
CommentParentId
编号
标题
正文
用户
日期
CommentParentId
ID
标题
用户
文件
日期
CommentParentId
Id
名称
电子邮件
DateJoined
CommentParentId
ID
因此,该表将仅用于创建新的 Id。有没有另一种方法可以做到这一点?有哪些优势?
我正在使用 SQL Server 2014
database-design ×10
sql-server ×3
mysql ×2
delete ×1
index ×1
performance ×1
postgresql ×1
subtypes ×1
web-server ×1