Questions tagged «database-design»

数据库的概念模式和/或逻辑模型和/或物理设置的开发。

3
大型(> 22万亿项)地理空间数据集,具有快速(<1s)的读取查询性能
我正在为大型地理空间数据集设计一个新系统,这将需要快速的读取查询性能。因此,我想看看是否有人认为在以下情况下有合适的DBMS,数据结构或其他方法来实现所需的性能,或者是否有经验/建议: 将从处理后的卫星雷达数据中连续产生数据,这些数据将覆盖全球。根据卫星的分辨率和地球的土地覆盖范围,我估算了完整的数据集,可在全球750亿个离散位置产生价值。在单个卫星的生命周期中,输出将在这些位置的每个位置产生多达300个值(因此,总数据集大于22万亿个值)。这是针对一颗卫星的,已经在轨道上有第二颗,在新的几年中计划再发射两颗。因此会有很多数据!单个数据项非常简单,仅包含(经度,纬度,值),但是由于项数众多,我估计单个卫星可以产生高达100TB的数据。 写入的数据永远不需要更新,因为它只会随着新的卫星采集处理而增长。写入性能并不重要,但读取性能至关重要。该项目的目标是能够通过简单的界面(如google map上的图层)可视化数据,其中每个点均基于其平均值,梯度或随时间变化的某些函数具有彩色值。(帖子末尾的演示)。 根据这些要求,数据库需要具有可伸缩性,我们可能会寻求云解决方案。该系统必须能够处理地理空间查询,例如“(纬度,经度)附近的点”和“(框)中的点”,并具有小于1的读取性能(用于定位单个点)以及包含多达50,000点(尽管最好是200,000点)。 到目前为止,我在1.11亿个位置拥有约7.5亿个数据项的测试数据集。我已经试用了一个postgres / postGIS实例,该实例可以正常运行,但是没有分片的可能性,我不能这样做,因为随着数据的增长,它也可以应对。远,并且通过分片就可以随数据量进行扩展。我最近对弹性搜索学到了一些知识,因此对此的任何评论对我来说都是新的,将是有帮助的。 这是我们希望使用完整数据集实现的快速动画: 这个gif(来自我的postgres试用版)正在提供(6x3)预先计算的栅格图块,每个图块包含约200,000点,并花费约17s来生成每个。通过单击一个点,可以通过在小于1秒的时间内将所有历史值拉到最近的位置来绘制图表。 对于冗长的帖子,我们深表歉意,欢迎提出任何意见/建议。

3
通过互斥子类在类型/子类型设计模式中实现子类型的子类型
介绍 为了使该问题对将来的读者有用,我将使用通用数据模型来说明我面临的问题。 我们的数据模型由3个实体,这应标明的A,B和C。为了使事情简单,它们的所有属性都是int类型。 实体A具有以下属性:D,E和X; 实体B具有以下属性:D,E和Y; 实体C具有以下属性:D和Z; 由于所有实体都具有相同的属性D,因此我决定采用类型/子类型设计。 重要提示:实体是互斥的!这意味着实体是A或B或C。 问题: 实体A和B具有另一个公共属性E,但是该属性在实体中不存在C。 题: 如果可能的话,我想利用上述特征进一步优化设计。 老实说,我不知道如何执行此操作,也不知道从哪里开始尝试,因此不知道该帖子。

4
有没有工具可以检查我的数据库是否被规范化为第三种形式?
我最近了解了标准化,并了解实现新架构时标准化的重要性。 如何检查我的数据库是否符合2NF或3NF标准? 手动检查是肯定的选择,但是我在这里寻找自动化工具。 我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。

5
空列会占用表中的空间吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我有从非常基本的信息保存的表。只是一个标题和一些日期字段。有一个称为注释的字段,该字段为varchar(4000),大多数情况下,我们将其保留为空白,但有时会在此处输入大量数据。这真的是一个糟糕的设计吗?还是这只是效率低下? 我认为为此列创建一个单独的表会更好。 注意:这是sql server 2008

1
数据库设计:同一张表具有两个一对多关系
我必须对一种情况建模,即我有一个表Chequing_Account(包含预算,IBAN号和其他帐户详细信息),该表必须与两个不同的表Person和Corporation都可以具有0、1或许多支票帐户。 换句话说,我在同一个表中有两个一对多关系 我想听听尊重标准化要求的解决方案。我听到的大多数解决方案是: 1)找到一个人和公司都属于的公共实体,并在此实体和Chequing_Account表之间创建一个链接表,在我的情况下这是不可能的,即使我要解决一般问题而不是此特定实例也是如此。 2)创建两个链接表PersonToChequingAccount和CorporationToChequingAccount,它们将两个实体与Chequing Accounts关联起来。但是,我不希望两个人拥有相同的支票帐户,也不想让自然人和公司共享一个支票帐户!看到这张图片 3)在Chequing Account中创建两个指向公司和自然人的外键,但是我要强制一个人和Company可以有许多支票帐户,但是我必须手动确保对于每个ChequingAccount行,不是两个关系都指向公司和自然人,因为支票帐户是公司还是自然人。看到这张图片 是否有其他更清洁的解决方案来解决此问题?


4
实体关系问题
我有4个与此相关的表(这是一个示例): Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name Code ID_Company Workers: Id Name Code ID_Classification ID_Department 假设我有一个classification带id = 20, id_company = 1。并且department具有id_company = 2(代表另一家公司)。 这将允许创建来自两家公司的工人,因为分类和部门分别链接到该公司。我不希望这种情况发生,所以我认为我的人际关系存在问题,我不知道该如何解决。

2
恢复转储时禁用所有约束和表检查
我已经获得了PostgreSQL数据库的转储,其中包括: pg_dump -U user-name -d db-name -f dumpfile 然后我继续使用以下命令在另一个数据库中还原: psql X -U postgres -d db-name-b -f dumpfile 我的问题是数据库包含引用约束,检查和触发器,并且其中某些(特别是看起来是检查的)约束在恢复期间失败,因为未按照导致遵守这些检查的顺序来加载信息。例如,在表中插入行可能与CHECK调用plpgsql函数检查条件是否存在于其他不相关的表中的函数相关联。如果后一个表未psql在前一个表之前加载,则会发生错误。 以下是产生这样的数据库的SSCCE,该数据库一旦被转储pg_dump就无法恢复: CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE TABLE IF NOT EXISTS a ( i INTEGER NOT NULL ); …

5
加强数据库完整性
让应用程序强制执行数据库完整性而不是使用外键,检查约束等是否有意义? 不通过内部数据库工具强制执行数据库完整性,可以期望多少性能改进?

4
SSD上的SQL Server数据库-每个表的单独文件有什么优势?
我正在创建一个数据库,其中大约有30个表,每个表包含数千万行,每个表包含一个重要列和一个主键/主键列,以在面对繁重的情况时最大化查询效率更新和插入,并大量使用聚集索引。其中两个表将包含可变长度的文本数据,其中一个表包含数亿行,而其余表仅包含数字数据。 由于我真的想从我可用的硬件(大约64GB的RAM,一个非常快的SSD和16个内核)中挤出所有性能的下降,所以我在考虑允许每个表都有自己的文件,这样无论我要加入2、3、4、5或更多表,每个表将始终使用单独的线程读取,并且每个文件的结构将与表内容紧密对齐,从而有望最大程度地减少碎片并使其更快使SQL Server添加到任何给定表的内容。 一个警告,我被困在SQL Server 2008 R2 Web Edition上。这意味着我不能使用自动水平分区,这将其排除在性能之外。 是否会在每个表中使用一个文件实际上使性能最大化,或者我是否忽略了使之多余的内置SQL Server引擎特性? 其次,如果每个表使用一个文件是有好处的,为什么create table只给我选择将表分配给文件组而不分配给特定逻辑文件的选项?这将需要我为方案中的每个文件创建一个单独的文件组,这向我暗示SQL Server可能没有想到我所假定的优势将来自于我的建议。

2
类型字段的INT或CHAR
什么是一个表,一个最好的设计Type是现场int还是char(1)?换句话说,给定此架构: create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) VehType成为an int或a 更有效(在性能方面更明智)char(1)?假设您有五种类型的汽车,应该使用递增值0-&gt; 4还是类型的字符(例如“ v”,“ s”,“ c”,“ t”,“ m”)? 如果不止如此,我将使用单独的Type表并具有外键关系,但我认为没有必要。 我注意到sys.objects目录视图使用字符作为type字段。有什么理由吗?我是不是在这里捉襟见肘,是否更适合我?

3
列名命名约定和最佳实践
在列命名方面,我想对最佳做法提出一些专家意见。 背景是根据Wikipedia的以下语法, SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID); 比 SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID); 但是,该JOIN ... USING语法仅适用于所有具有全局唯一名称的主键列。因此,我想知道这是否被认为是正确的做法。 我个人经常使用PK列id和外键列创建表othertable_id。但是那样就无法使用USING或NATURAL JOIN。 任何与设计风格或表设计最佳实践指南的链接也将不胜感激!

2
MySQL VARCHAR和TEXT数据类型有什么区别?
在版本5.0.3(允许VARCHAR为65,535字节并停止截断尾随空格)之后,这两种数据类型之间是否有主要区别? 我正在阅读差异列表,注释中仅有的两个是: 对于BLOB和TEXT列上的索引,必须指定索引前缀长度。对于CHAR和VARCHAR,前缀长度是可选的。请参见第7.5.1节“列索引”。 和 BLOB和TEXT列不能具有DEFAULT值。 因此,由于TEXT数据类型有这两个限制,为什么要在varchar(65535)上使用它?是否有一个相对于另一个的性能影响?


5
SQL Server-用于报告的单独数据库?
在我们的SQL Server上,我们为每个Web应用程序都有一个数据库。对于报表,我们使用Reporting Services,所有报表数据(包括报表参数)均来自存储过程。 存储过程与报告中的数据位于同一数据库中。因此,例如,为“库存”报告提供服务的proc在“库存”数据库中。一些报告显示来自多个数据库的信息,然后proc将位于那些源数据库之一中。报表参数从企业数据库(包含商店,员工等数据)的proc中获取其数据。 这意味着所有报告至少都具有与Enterprise数据库的连接,以及与另一个数据库的另一个连接-有时甚至更多。 我的问题是:将报告过程移入单独的“报告”数据库是否有好处?我知道将报表移到另一台服务器上的好处,我不是在谈论它-这将在同一台服务器上。 可能影响此的因素是: 一个报告具有多个数据库连接是否会影响报告的速度? 将报表proc与数据保存在单独的数据库中是否会阻止我们使用索引视图? 您是否发现在单独的数据库中管理报告更容易/更困难? 请让我知道你的想法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.