Questions tagged «database-design»

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

4
表格定义中的列顺序重要吗?
定义表时,按目的对逻辑组中的列和组本身进行排序很有帮助。表中列的逻辑顺序将含义传达给开发人员,并且是一个良好样式的元素。 很清楚 但是,尚不清楚的是,表中列的逻辑顺序是否会对存储层的物理顺序有任何影响,或者是否有其他可能影响的影响。 除了对样式的影响之外,列顺序是否重要? 关于堆栈溢出有一个与此有关的问题,但是它缺乏权威性的答案。

3
MD5字段的最佳数据类型是什么?
我们正在设计一个读取量很大的系统(每分钟读取数万次)。 有一个表names,可以作为一种中央注册表。每行都有一个text字段representation和一个唯一字段,该字段key是该字段的MD5哈希值representation。1该表当前具有数千万条记录,并且预计在应用程序的生命周期内将增长到数十亿条。 还有许多其他表(具有高度变化的模式和记录计数)引用该names表。这些表之一中的任何给定记录都保证有一个name_key,从功能上讲,该names表是该表的外键。 1:顺便说一句,正如您所料,此表中的记录一旦写入便是不可变的。 对于除表以外的任何给定表names,最常见的查询将遵循以下模式: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 我想针对读取性能进行优化。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。 问题:和列 的最佳数据类型是什么? 有没有理由使用过?还是?keyname_keyhex(32)bit(128)BTREEGIN

3
每个表都应该有一个单字段代理/人为主键吗?
我了解代理/人工密钥的一大好处-它们不会更改,因此非常方便。无论它们是单个字段还是多个字段,只要它们是“人造”字段,都是如此。 但是,有时将自动递增的整数字段用作每个表的主键似乎是一个政策问题。拥有这样的单字段密钥始终是最好的主意吗?为什么(为什么不这样做)? 明确地说,这个问题不是关于人工还是自然的问题,而是关于所有人工密钥是否应为单一字段的问题



3
使用多个用逗号分隔的外键是否错误?如果是,为什么?
有两个表:Deal和DealCategories。一笔交易可以有很多交易类别。 因此,正确的方法应该是制作一个DealCategories具有以下结构的表: DealCategoryId (PK) DealId (FK) DealCategoryId (FK) 但是,我们的外包团队通过Deal以下方式将多个类别存储在表中: DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. 我觉得他们做错了,但是我不知道如何清楚地解释为什么这是不对的。 我应该如何向他们解释这是错误的?或者也许我是错的人,这是可以接受的?

5
可以保留一个在表中更新的值吗?
我们正在开发一个用于预付卡的平台,该平台基本上保存有关卡及其余额,付款等的数据。 到目前为止,我们有一个Card实体,该实体具有一个Account实体集合,并且每个Account都有一个Amount,该数量在每次存款/提款中都会更新。 团队中现在有一场辩论;有人告诉我们,这违反了Codd的12条规则,并且在每次付款时更新其值都是很麻烦的。 这真的有问题吗? 如果是,我们该如何解决?

1
设计平台:一个数据库还是多个数据库?
我们正在构建一个包含多个服务的网络平台,每个服务都有自己的基础数据。这些服务是按照面向服务的体系结构的原则独立构建的,但是它们会针对潜在的相关数据进行交易。我们正在考虑这些服务应该共享一个大数据库还是每个都有自己的数据库。(我们计划在Windows 2008群集上使用SQL Server 2008 Enterprise。) 我们已经考虑过的每种方法的一些优点包括: 单一数据库 可以通过外键约束将来自不同服务的数据关联在一起 分析摘录更易于编写和执行 在发生灾难的情况下,将平台恢复到一致状态更加容易 对于由多个服务引用的数据,一个服务缓存的数据很可能会在另一服务之后不久使用 管理和监控更简单,更便宜 多个数据库 维护工作,硬件问题,安全漏洞等未必会影响整个平台 假设每个数据库都在单独的硬件上,则与扩展一个大型机相比,扩展多台计算机可获得更多的性能优势。 从操作角度来看,此平台中的每个服务都拥有自己的数据库,或者它们都位于同一个数据库中,是否更具优势?哪些关键因素可以回答这个问题?

3
在什么时候每个客户端只能使用一个数据库?
对于我们的系统之一,我们拥有敏感的客户端数据,并将每个客户端的数据存储在单独的数据库中。该系统大约有10-15个客户端。 但是,我们正在开发一个新的系统,它将具有50-100个客户端,也许还会更多。我认为在这种情况下,每个客户端只有一个数据库(存储敏感记录和审核历史记录)可能是不可行的。但是我不知道这是否完全正常,或者是否存在另一种维护安全性的方法。 有什么想法吗?


1
需要外键索引
我在索引,主键和外键上苦苦挣扎,而且都需要全部使用。 如果我有两个表,它们两个都有一个整数作为主键。 第一个表通过FK引用第二个表的主键。 在两个表上,我在ID列上都有一个主键索引 我在table1.ref_field参照第二张表格(table2.id)的PK时创建了FK约束 我在上添加了一个索引 table1.ref_field 这是组织这些索引(主键和外键)的最佳方法吗?

3
重复列以加快查询速度?
标题没有太大意义,但我想这个问题的标题更好。 我有下表 专案 ID 名称 顾客 ID id_project 名称 付款方式 ID id_customer 日期 和 当用户进入系统时,他将有权访问某个项目。现在,我要列出该项目的所有付款,这应该很简单: SELECT FROM payments where id_customer in (SELECT id from customers where id_project = 5) 我的问题是:用这种方式向付款表添加id_project列是否更好,这将使查询更容易,更快捷。

10
在数据库中标记列的有效方法是什么?
我曾经这样在数据库中标记列: user_id user_name user_password_hash 为了避免在连接两个表时发生冲突,但是后来我学到了更多关于如何别名表的知识,于是我停止这样做。 在数据库中标记列的有效方法是什么?为什么?

4
空间索引可以帮助“范围-限制范围”查询吗
问这个问题,特别是对Postgres,因为它对R树/空间索引有很好的支持。 下表具有单词及其频率的树结构(嵌套集模型): lexikon ------- _id integer PRIMARY KEY word text frequency integer lset integer UNIQUE KEY rset integer UNIQUE KEY 和查询: SELECT word FROM lexikon WHERE lset BETWEEN @Low AND @High ORDER BY frequency DESC LIMIT @N 我认为覆盖索引(lset, frequency, word)会很有用,但如果范围内的lset值过多,我可能会认为效果不佳(@High, @Low)。 (frequency DESC)当使用该索引的搜索提早产生@N与范围条件匹配的行时,使用简单的索引有时也足够了。 但是,性能似乎在很大程度上取决于参数值。 有没有一种方法可以使它快速执行,而不管该范围(@Low, @High)是宽还是窄,以及无论哪个高频字都幸运地处于选定的(狭窄)范围内? R树/空间索引会有所帮助吗? 添加索引,重写查询,重新设计表,没有任何限制。

3
可以使用循环外键引用\如何避免使用它们?
在外键字段的两个表之间具有循环引用是否可以接受? 如果没有,如何避免这些情况? 如果是这样,如何插入数据? 以下是一个循环引用(在我看来)可以接受的示例: CREATE TABLE Account ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50) ) CREATE TABLE Contact ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50), AccountID INT FOREIGN KEY REFERENCES Account(ID) ) ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)

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.