Questions tagged «database-design»

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

3
对每个音乐艺术家都是乐队或独奏演员的场景进行建模
我必须为涉及音乐艺术家描绘的业务环境设计一个实体关系图(ERD),下面将详细介绍。 方案说明 一个艺术家有一个名称,且必须要么一组 或一个独奏演员(但不能同时)。 甲组是由一个或多个独奏表演者,并具有会员数(其应该从数计算独奏表演构成组)。 一个独奏演员可能是一个会员众多的群体或无的集团,并可以播放一个或多个仪器。 题 如何构建一个ERD来代表这种情况?我对它的“或”部分感到困惑。

1
在PostgreSQL中存储和查询滚动数据
我将大量的天气模型数据放入PostgreSQL数据库中。该计算机具有8个内核和16 GB的RAM。我正在使用PostGIS 2.1运行PostgreSQL 9.3。每个表都有不同的天气数据(温度,露点,风等)。每个表将有6-7列:纬度,经度,点几何,高程,与模型相关的日期时间,以及1-2个感兴趣的数据值。将首先根据时间和海拔高度查询边界框的数据。每个表大约有145,757,360行(比现在不再重要的数据将被删除)。我粗略估计,每个表的大小(不含索引)约为10 GB。(这是52字节的数据加上每行23字节的开销)。当新模型数据可用时,数据将定期更新/插入。注意: 因此,我正在研究以下两个计划: 只需按(日期时间,海拔高度)进行索引和聚类,并为点几何图形添加附加索引。运行常规的cron作业,该作业将删除旧行,运行真空/分析并重新进行集群。 按日期时间进行分区,然后对每个表按高度进行聚类,并按索引对几何进行索引。运行常规的cron作业以添加新表,然后删除旧表。 进一步, 因此,我知道删除表的效率更高,而删除和清理则更为有效。但是我会否看到性能提升? 当所有表将被均匀更新和选择直到不相关而被删除之前,分区是否合适(文档指出,当只选择其中的几个分区时,分区效果最佳)? 交付数据时,选择的速度会比聚集索引快吗?如果一次发出多个请求,答案是否会改变? 谢谢。我希望我收集所有需要的数据。如果没有,请告诉我,我将其添加。

3
日志表应该获取id字段还是主键?
我有一个日志表,捕获某些文件导出到另一个系统时的日期时间戳。 目前,exportedLog表具有三个字段: id (primary key) messageId (int) exportedDateTime (datetime) 对此进行回顾,我发现该id字段没有任何作用,因为没有该表的联接。该表上唯一起作用的是插入批处理作业,该批处理作业处理消息并将其插入此日志表。 我应该删除该id字段吗? 我是否应该在任何一个主键messageId或exportedDateTime或两者兼而有之?

2
我应该如何为“非此即彼”的关系建模?
假设我有一个名为Software的实体,并且有两个子类型FreeSoftware和NonFreeSoftware。NonFreeSoftware实体具有购买日期,供应商等属性。FreeSoftware实体具有许可证,源代码url等属性。 因此,如果我想为另一个实体OperatingSystem建模,应该怎么做?与软件之间存在“是”关系,而与FreeSoftware和NonFreeSoftware之间存在“或者”关系。 我认为我在分析此层次结构时缺少一些东西。

2
一对一关系是否正常化?
考虑我们有大量的统计数据记录;例如20-30 INT列。最好将整个集合都保留在一个表中,因为它们都属于一条记录,还是创建另一个具有一对一关系的表。 前者的优点是避免JOIN并可以快速访问相应记录的所有统计数据。 后者的优点是使色谱柱保持整洁。第一列是读密集型的,第二列是写密集型的。当然,我认为它对性能没有显着影响,因为我将InnoDB与行级阻塞一起使用。 总的来说,我想知道为一条记录分离不同的数据集是否有用?

3
为什么我不应该为多个关系使用一张桌子?
假设我的数据库中有多个关系,例如商店,员工和销售,并且我想用简单的二进制关系连接对。我个人将创建一个名为Employee_Store和Employee_Sale的表,并使用由外键组成的自然键。 现在,我的同事坚持要为多个关系创建一张表。对于上面的示例,可能有一个名为EmployeeLinks的表: EmployeeLinks( IdLink int PK, IdEmployee int FK null, IdStore int FK null, IdSale int FK null, LinkType int not null ) 请以充分的理由帮助我,为什么这不是一个好主意。我有自己的论点,但我想让他们保密,并听听您的公正意见。 编辑: 最初,上表没有主键(!)。因为外键允许为null,所以替代键是唯一的选择。

5
是否有开源分层数据库管理系统?
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 11个月前关闭。 我一直在寻找一种分层数据库管理系统,而我遇到的唯一一个系统是IBM的ims。是否有一个可以使用的开源系统?

3
索引最大行大小错误
array列有上限吗? 插入数组字段时出现此错误- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" 这是我的表格定义- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 我需要在数组字段上建立索引,因为我正在对其进行一些查询。


2
MySQL-删除具有外键约束且引用自身的行
我有一个表,用于存储用户在我的网站上发布的所有论坛消息。消息层次结构是使用嵌套集模型实现的。 以下是该表的简化结构: ID(主键) Owner_Id(对ID的外国主要参考) Parent_Id(对ID的外国主要参考) 左 好吧 级别 现在,表格看起来像这样: + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | Id | Owner_Id | Parent_Id | nleft | nright | nlevel | + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | 1 …

2
多列vs少表-性能明智
是的,我知道数据规范化应该是我的首要任务。 我有一个表,65列存储与列车辆数据:used_vehicle,color,doors,mileage,price等等,总共65。 现在,我可以除以和有一个Vehicle表,VehicleInterior,VehicleExterior,VehicleTechnical,VehicleExtra(全一到一个与主Vehicle表)。 假设我有大约500万行(车辆)。 在SELECT带有WHERE子句的情况下:搜索效果会更好(两种情况至少都在上索引IDs): Vehicle 65列的表格或 Vehicle表与JOINS其他四个表(均具有500万行)一起返回与Vehicle?相关的所有数据 (根据数据库引擎,考虑PostgreSQL和/或MySQL)。 真的很欣赏您以前的经验中得到的任何详细见解吗?

2
用于有效范围聚合查询的数据库?
作为一个简化的示例,假设我有一个像这样的表: seq | value ----+------ 102 | 11954 211 | 43292 278 | 19222 499 | 3843 该表可能包含数亿条记录,我需要经常执行以下查询: SELECT sum(value) WHERE seq > $a and seq < $b 即使seq已建立索引,典型的数据库实现也将遍历每一行以计算最佳情况下的总和O(n),其中n范围的大小是。 是否有任何数据库可以像在O(log(n))每个查询中一样有效地做到这一点? 我所遇到的数据结构称为段树所描述这里。尽管所有这些名称通常都被描述为数据结构略有不同的变体,但有时也称为范围树或间隔树。 但是,我还没有遇到任何实现这种数据结构的数据库。对于内存结构,从头开始实现它很容易,但是如果必须持久或太大而无法容纳到内存中,则变得棘手。如果有一个有效的模式可以在现有数据库之上实施,那也可能会有所帮助。 旁注:这不是仅追加表,因此在这种情况下,诸如保留累计和之类的解决方案将不起作用。

2
如何为可以具有不同属性集的实体类型建模?
在用Users和Items之间的一对多(1:M)关系重新创建数据库时遇到了一些麻烦。 是的,这很简单。但是,每个项目都属于某个类别(例如Car,Boat或Plane),并且每个Category具有特定数量的属性,例如: Car 结构体: +----+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | +----+--------------+--------------+ Boat 结构体: +----+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | +----+--------------+--------------+--------------+ Plane 结构体: +----+--------------+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | Attribute #4 | +----+--------------+--------------+--------------+--------------+ …

2
概念性ERD多表多对多,还是可能递归?
我正在创建一个概念图[是的,我知道我已经包括了属性和键-但这只是为了巩固我在学习时正在做的事情] –因此,请把它视为概念图,重点放在关系和表而不是如何绘制;) 我的想法障碍是: 我正在尝试确定对个人档案,位置和组织关系进行建模的最佳方法。 首先,规则: 一个或多个个人资料可以是一个或多个组织的成员/朋友;反之亦然。 一个或多个个人资料可以是其他个人资料的成员/朋友。 一个或多个组织可以是其他组织的成员/朋友。 朋友和会员的不同之处在于,朋友就像只读的,而会员(取决于级别)具有完全的修改权限。 为了进一步使事情复杂化,场所具有自己的一组“更进一步”的可完善规则,例如,一个组织拥有两个场所,但是根据场所规则,该组织的成员[ 个人资料 ]可能在一个场所具有完全访问权限,但在该场所具有受限访问权限其他。[抱歉:您可能必须在另一个窗口中打开图像才能获得更好的查看尺寸。] 因此,正如您所看到的,“个人档案”和“组织”的概念几乎相同,而“ Friends and Members” [...]这个尚未建模的概念[...我想它将像设置Owner /的当前中介表一样处理记录中的管理员/成员/朋友等]。因此,为什么我要考虑以下概念: 请参见上图中的Option.2:它将删除当前的Organization和Organization_Locations表及其关系,将其替换为Option.2 Organization Table作为与Profile的某种递归关系。 我想问题的症结在于我是否在编程方面对多态性过于介意,以至于损害了其简单性和灵活性,使自己在整个过程中陷入混乱;) 谢谢您的提前考虑,非常感谢-M :)。 修改后的图: 针对MDCCL的问题: 是的,Profile是由一个Person组成的,并且具有相同的含义-尽管您的理论依据是-我相信您是正确的:Organization和Person可以是Profile的子类型;因此,概要由一个人或一个组织组成。 每个配置文件一个电子邮件地址。 是。如上所述,组织的至少应具有一个电子邮件地址。 正确,一个固定地址。 这是一种可能性,但是很罕见-尽管从我的经验中学到了-因此应该为将来的寿命等建模,并且为了确认,一个位置因此可以由多个人拥有。 位置绝对是大多数其他位置之间不可或缺的实体。也许我会在这里澄清一下可以做什么,然后让您阅读我的其他答案,希望这些答案可以先对该问题进行有益的补充[ 然后再查看我对#6的答案 ];)Re:角色所有者。 An **Organization** can be an Owner of zero or more **Locations**. A Person can be an …

2
存储IP地址-varchar(45)与varbinary(16)
我要创建一个表有两个领域- ID作为BIGINT和IPAddress作为两种varchar(45)或varbinary(16)。想法是存储所有唯一的IP地址,并使用引用ID代替IP address其他表中的实际IP 。 通常,我将创建一个存储过程,该存储过程返回ID给定的IP address或(如果未找到地址)插入地址并返回生成的ID。 我期望有很多记录(我无法确切知道有多少条记录),但是我需要上面的存储过程尽快执行。因此,我想知道如何以文本或字节格式存储实际的IP地址。哪个会更好? 我已经编写SQL CLR了将IP地址字节转换为字符串和反向的函数,因此转换不是问题(使用IPv4和都可以IPv6)。 我想我需要创建一个索引来优化搜索,但是我不确定是否应该将该IP address字段包括在聚集索引中,还是要创建一个单独的索引,并且使用哪种类型的搜索会更快?

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.