Questions tagged «database-design»

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


7
我应以哪种数据类型在数据库中存储电子邮件地址?
我知道254个字符的电子邮件地址是有效的,但是我研究过的实现倾向于使用varchar(60)到varchar(80)或等效的电子邮件。例如:此SQL Server建议使用varchar(80)或此Oracle示例 是否有理由不使用完整的254个字符的最大值?按照定义,varchar不会仅使用所需的存储量来保存数据吗? 是否存在重大的性能隐含/折衷,导致如此多的实现使用少于254个可能的字符?


9
如何在数据库中处理删除?
我想在Web应用程序中实现“取消删除”功能,以便用户可以改变主意并恢复已删除的记录。关于如何实施的想法?我考虑过的一些选项实际上是删除有问题的记录,并将更改存储在单独的审核表中,或者不删除记录,而是使用布尔“已删除”列将其标记为已删除。后一种解决方案在正常情况下将需要附加的应用程序逻辑来忽略“已删除”的记录,但将使在应用程序端恢复记录变得容易得多。

5
嵌套视图是一种好的数据库设计吗?
我很久以前就读过书。本书指出,我们不应允许在SQL Server中具有嵌套视图。我不确定为什么不能这样做,否则我可能会记得错误的陈述。 学生们 SELECT studentID, first_name, last_name, SchoolID, ... FROM students CREATE VIEW vw_eligible_student AS SELECT * FROM students WHERE enroll_this_year = 1 教师 SELECT TeacherID, first_name, last_name, SchoolID, ... FROM teachers CREATE VIEW vw_eligible_teacher AS SELECT * FROM teachers WHERE HasCert = 1 AND enroll_this_year = 1 学校 CREATE …

5
如何设计用于存储排序列表的数据库?
我希望将排序后的列表存储在数据库中。我想有效地执行以下操作。 Insert(x)-将记录x插入表中 Delete(x)-从表中删除记录x Before(x,n)-返回排序列表中记录x之前的'n'条记录。 After(x,n)-返回排序列表中记录x之后的'n'条记录。 First(n)-返回已排序列表中的前n个记录。 Last(n)-从排序列表中返回最后的'n'条记录。 Compare(x,y)-给定表中的两个记录x和y,请确定x> y。 我能想到的简单方法是在表中存储某种“等级”属性,并通过对该属性进行排序进行查询。但是在这种方法中,插入/修改具有等级的记录成为昂贵的操作。有没有更好的方法? 具体来说,我希望使用Amazon的SimpleDB实现该表。但是对关系数据库的一般回答也应该会有所帮助。 负载配置文件更新: 由于我正在针对Web应用程序进行规划,因此这取决于使用该应用程序的用户数量。 如果有10万活跃用户(超级乐观:P),那么我每天的估算值大概是 500k选择,100k插入和删除,500k更新 我希望桌子总数可以增长到50万。 我希望对更新,插入和比较操作进行优化。项目的等级将不断变化,我需要保持表格更新。


5
我可以添加一个忽略现有违规的唯一约束吗?
我有一个表,当前在列中有重复的值。 我无法删除这些错误的重复项,但我想防止添加其他非唯一值。 我可以创建一个UNIQUE不检查现有合规性的商品吗? 我尝试使用,NOCHECK但未成功。 在这种情况下,我有一个表将许可信息与“ CompanyName”相关联 编辑:具有相同的“ CompanyName”具有多个行是错误的数据,但此时我们不能删除或更新这些重复项。一种方法是让INSERTs使用存储过程,该存储过程将导致重复操作失败...如果可以让SQL自己检查唯一性,那将是更好的选择。 该数据通过公司名称查询。对于少数现有重复项,这将意味着将返回并显示多行...虽然这是错误的,但在我们的用例中是可以接受的。目的是防止将来发生这种情况。从评论看来,我似乎必须在存储过程中执行此逻辑。

2
具有用户,角色和权限的数据库模型
我有一个带有用户表和角色表的数据库模型。我想控制对多达10个不同元素的访问(权限)。可以将访问权限授予角色或单个用户。以下是用户,角色和项目的表定义: CREATE TABLE users ( id serial NOT NULL PRIMARY KEY, username character varying UNIQUE, password character varying, first_name character varying, last_name character varying, ... ); CREATE TABLE roles ( id serial NOT NULL PRIMARY KEY, name character varying NOT NULL, description character varying, ... ); CREATE TABLE element_1 ( …



3
数据库设计:新表与新列
(建议将其从StackOverflow重新发布在此处) 当前有一个表..,需要开始向其中添加新的数据列。并非每条记录(甚至在添加新数据列之后使用新数据)都将具有数据。所以我想知道这是否更适合新表,因为它实际上是某些数据行的扩展,并且不适用于每一行。 换句话说,由于这些新数据元素将有许多未使用的列,因此,这似乎更适合于新表? 第一个表是页面浏览量的记录(当前有200万条记录) - ID - IP地址 -浏览次数 -时间戳创建时间 -日期 对于每个IP地址,每天进行一次记录-并将连续的网页浏览量添加到每天的浏览量中 其他字段将用于原点跟踪(即Google Analytics(分析)来源/媒介/广告系列) 并非每次访问都会获得该信息。我会假设大约10%的行将包含数据(因为通常仅在首次访问时才归因于该数据) 数据的主要用途是归因于人来自何处。这可能会被更频繁地使用(然后似乎使自己适合单个表) 欣赏反馈-如果需要,可以添加更多


5
为什么仍然有varchar数据类型?
我的许多数据库都有定义为varchars的字段。这一直没有大的问题,因为我生活和工作在美国(其中存在的唯一语言是“美国”。啊哈) 在使用数据库大约5年之后,我发现我最终遇到了varchar字段性质有限的问题,必须修改字段以将数据存储为nvarchars。在不得不对表进行另一次更新,将varchar字段转换为nvarchar之后,我有了一个想法-为什么我们仍然这样做呢?我很早就做出了将所有新的文本字段都定义为nvarchar而不是varchar的明智决定,这是我10年前上学时从教科书中学到的内容。 是2011年,去年有一个新版本的SQL Server。当可以/应该使用nvarchar时,为什么为什么继续支持varchar数据类型? 我知道,经常有人争辩说nvarchars是varchars的“两倍大”,因此存储空间的使用可能是维护varcars的观点之一。 但是,今天的用户如果想节省存储空间,则可以定义其nvarchars将数据存储为UTF-8而不是默认的UTF-16。如果主要需要的话,这将允许8位编码,同时确保插入到其DB中的2-8字节罕见字符不会破坏任何内容。 我想念什么吗?在过去的15到20年中,这种情况没有发生变化,这是否有充分的理由?


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.