Questions tagged «database-design»

数据库设计是指定数据库的结构以及逻辑方面的过程。数据库设计的目的是代表某种“话语世界”-事实的类型,业务规则和数据库要建模的其他要求。

15
单柱桌是好的设计吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 有一个只有一列的表可以吗?我知道从技术上来讲这不是非法的,但是它被认为是糟糕的设计吗? 编辑: 这里有一些例子: 您有一个带有50个有效美国州代码的表,但是您无需存储详细的州名。 电子邮件黑名单。 有人提到添加一个关键字段。我的看法是,这单列将是主键。

17
多少数据库索引太多?
我正在一个具有相当大的Oracle数据库的项目中工作(尽管我的问题同样适用于其他数据库)。我们有一个Web界面,允许用户搜索几乎任何可能的字段组合。 为了使这些搜索快速进行,我们将索引添加到我们认为用户通常会在其上进行搜索的字段和字段组合。但是,由于我们并不真正了解客户将如何使用该软件,因此很难确定要创建哪些索引。 空间不是问题;我们有一个4 TB的RAID驱动器,我们只使用其中的一小部分。但是,我担心索引过多会导致性能下降。因为每次添加,删除或修改行时都需要更新这些索引,所以我认为在一个表上包含数十个索引是一个坏主意。 那么多少索引被认为太多呢?10个?25吗 50吗 还是我应该只介绍真正,非常普遍和显而易见的案例,而忽略其他所有内容?

9
为什么要使用多列作为主键(复合主键)
此示例摘自w3schools。 CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) ) 我的理解是,两列(P_Id和LastName)一起代表该表的主键Persons。这样对吗? 为什么有人要使用多列而不是单列作为主键? 给定表中可以将多少列一起用作主键?


14
在数据库(RDBMS)中存储邮政地址的最佳做法?
是否有关于在RDBMS中存储邮政地址的最佳做法的良好参考?似乎可以做出很多权衡,要评估每个优点和缺点的优点-当然,这一次又一次地完成了吗?也许有人至少在某个地方写了一些功课来写作? 我正在讨论的权衡示例是,将邮政编码存储为整数而不是char字段,应该将门牌号存储为单独的字段或地址行1的一部分,还是应该对套件/公寓/等号码进行规范化或仅将其存储为地址行2中的大量文本,您如何处理zip +4(单独的字段或一个大字段,整数还是文本)?等等 目前,我主要关注的是美国地址,但我想有一些最佳做法可以为将来走向全球做准备(例如,适当地命名字段,例如区域,而不是州或邮编,而不是邮政编码,等等




12
哪些列通常可以构成良好的索引?
作为“ 什么是索引,以及如何使用它们来优化数据库中的查询? ” 的后续尝试,在尝试了解索引的地方,哪些列是良好的索引候选者?专门针对MS SQL数据库? 经过一番谷歌搜索后,我读到的所有内容都表明,通常增加且唯一的列构成了很好的索引(例如MySQL的auto_increment之类的东西),我理解这一点,但是我使用的是MS SQL,并且我将GUID用于主键,所以看起来索引不会使GUID列受益...

2
Ruby on Rails中的多列索引
我正在实现跟踪用户阅读过哪些文章的功能。 create_table "article", :force => true do |t| t.string "title" t.text "content" end 到目前为止,这是我的迁移: create_table :user_views do |t| t.integer :user_id t.integer :article_id end 总是会查询user_views表来查找两列,而不会只查找其中一列。我的问题是索引应如何显示。这些表的顺序是否有所不同,是否应该有更多选择或其他选择。我的目标数据库是Postgres。 add_index(:user_views, [:article_id, :user_id]) 谢谢。 更新: 因为在两列中只能存在包含相同值的一行(因为要知道user_id是否已读取article_id),我应该考虑:unique选项吗?如果我没有记错的话,那意味着我不必自己进行任何检查,只需在用户每次访问文章时插入一下即可。

13
主键/外键命名约定
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 在我们的开发小组中,我们对主键和外键的命名约定进行了激烈的辩论。我们小组基本上有两种思想流派: 1: Primary Table (Employee) Primary Key is called ID Foreign table (Event) Foreign key is called EmployeeID 要么 2: Primary Table (Employee) Primary Key is called EmployeeID Foreign table (Event) Foreign key is called EmployeeID 我不希望在任何列中重复表的名称(因此,我更喜欢上面的选项1)。从概念上讲,它与其他语言中的许多推荐做法是一致的,在这种情况下,不要在对象的属性名称中使用对象的名称。我认为命名外键EmployeeID(或Employee_ID可能更好)可以告诉读者这是表的ID列Employee。 其他一些人则更喜欢选项2,在该选项中,您将主键命名为表名,以使整个数据库中的列名相同。我明白了这一点,但是现在您无法从视觉上区分主键和外键。 另外,我认为将表名包含在列名中是多余的,因为如果您将表视为实体,而将列视为该实体的属性或属性,则将其视为的ID属性,而Employee不是EmployeeID员工的属性。我不走了问我的同事他什么PersonAge或者PersonGender是。我问他他的年龄是多少。 因此,就像我说的那样,这是一场激烈的辩论,我们将继续对此进行讨论。我有兴趣获得一些新观点。


8
数据库中电子邮件地址的最佳长度是多少?
这是查询的一部分,反映了EMAIL_ADDRESS列数据类型和属性: EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 但是,约翰·桑德斯(John Saunders)使用VARYING(256)。 这表明我不一定理解正确的变化。 据我了解,在我的情况下,电子邮件地址的长度为20个字符,而Jodn为256个字符。 约翰代码中的上下文 CREATE TABLE so."User" ( USER_ID SERIAL NOT NULL, USER_NAME CHARACTER VARYING(50) NOT NULL, EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here HASHED_PASSWORD so.HashedPassword NOT NULL, OPEN_ID CHARACTER VARYING(512), A_MODERATOR BOOLEAN, LOGGED_IN BOOLEAN, HAS_BEEN_SENT_A_MODERATOR_MESSAGE BOOLEAN, CONSTRAINT User_PK PRIMARY KEY(USER_ID) ); 我从未见过普通人使用的电子邮件地址超过20个字符。 …

2
将db中特定模式上的全部授予PostgreSQL中的组角色
使用PostgreSQL 9.0,我有一个名为“ staff”的组角色,并希望在特定模式下的表上授予该角色所有(或某些)特权。没有以下工作 GRANT ALL ON SCHEMA foo TO staff; GRANT ALL ON DATABASE mydb TO staff; 除非我授予该特定表的全部权限,否则 “ staff”的成员仍无法对模式“ foo”中的单个表进行选择或更新,或者(对于第二个命令而言)无法访问数据库中的任何表。 我该怎么办才能使我和用户的生活更轻松? 更新:在serverfault.com上的类似问题的帮助下解决了这个问题。 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;


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.