标签: database-design

有没有工具可以检查我的数据库是否规范化为第三范式?

我最近了解了规范化,并了解在实现新模式时它的重要性。

如何检查我的数据库是否符合 2NF 或 3NF?

手动审查是一个确定的选择,但我正在寻找一种自动化工具。

我不是在寻找点击式工具,更多的是强调可能的优化以使表格符合 3NF。我猜它可能会使用基于良好样本数据和/或列名语义分析的统计数据。

schema normalization database-design database-recommendation

22
推荐指数
2
解决办法
4万
查看次数

空列可以是主键的一部分吗?

我正在开发一个 SQL Server 2012 数据库,我有一个关于一对零或一关系的问题。

我有两张桌子,CodesHelperCodes。一个代码可以有零个或一个辅助代码。这是创建这两个表及其关系的 sql 脚本:

CREATE TABLE [dbo].[Code]
(
    [Id] NVARCHAR(20) NOT NULL, 
    [Level] TINYINT NOT NULL, 
    [CommissioningFlag] TINYINT NOT NULL, 
    [SentToRanger] BIT NOT NULL DEFAULT 0, 
    [LastChange] NVARCHAR(50) NOT NULL, 
    [UserName] NVARCHAR(50) NOT NULL, 
    [Source] NVARCHAR(50) NOT NULL, 
    [Reason] NVARCHAR(200) NULL, 
    [HelperCodeId] NVARCHAR(20) NULL,
    CONSTRAINT [PK_Code] PRIMARY KEY CLUSTERED
    (
        [Id] ASC
    ),
    CONSTRAINT [FK_Code_LevelConfiguration]
       FOREIGN KEY ([Level])
        REFERENCES [dbo].[LevelConfiguration] ([Level]),
    CONSTRAINT [FK_Code_HelperCode]
       FOREIGN KEY ([HelperCodeId])
        REFERENCES [dbo].[HelperCode] ([HelperCodeId])
)

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server-2012

22
推荐指数
1
解决办法
3万
查看次数

MySQL VARCHAR 和 TEXT 数据类型有什么区别?

在 5.0.3 版本之后(允许 VARCHAR 为 65,535 字节并停止截断尾随空格),这两种数据类型之间有什么主要区别吗?

我正在阅读差异列表,只有两个值得注意的是:

对于 BLOB 和 TEXT 列上的索引,您必须指定索引前缀长度。对于 CHAR 和 VARCHAR,前缀长度是可选的。请参阅第 7.5.1 节,“列索引”。

BLOB 和 TEXT 列不能有 DEFAULT 值。

那么,由于 TEXT 数据类型的这两个限制,为什么要在 varchar(65535) 上使用它?两者之间是否存在性能影响?

mysql database-design datatypes

21
推荐指数
1
解决办法
4万
查看次数

CAP定理背后的推理是什么?

http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

我想是不是非常简单,为什么只有两个

  1. 一致性
  2. 可用性
  3. 分区容差

可以适用于任何给定的分布式数据库系统。这个猜想被证实,但有没有看出为什么一个简单的方法可能是,这可能持有?

我不是在寻找证明,只是一种理解为什么这个定理可能有意义的好方法。理由是什么?

database-design distributed-databases database-theory

21
推荐指数
1
解决办法
1328
查看次数

你应该在哪里定义外键?

在数据库中定义外键还是在应用程序的代码部分中定义外键更好?

foreign-key database-design best-practices

21
推荐指数
4
解决办法
7783
查看次数

数据库设计:同一张表的两个一对多关系

我必须模拟一种情况,我有一个表 Chequing_Account(其中包含预算、iban 编号和帐户的其他详细信息),该表必须与两个不同的表 Person 和 Corporation 相关,这两个表都可以有 0、1 或多个支票帐户。

换句话说我有两个1对多关系,同一张表支票账户

我想听听尊重规范化要求的这个问题的解决方案。我听到的大多数解决方案是:

1) 找到一个 Person 和 Corporation 都属于的公共实体,并在它和 Chequing_Account 表之间创建一个链接表,这在我的情况下是不可能的,即使我想解决一般问题而不是这个特定实例。

2) 创建两个链接表 PersonToChequingAccount 和 CorporationToChequingAccount,它们将两个实体与支票账户相关联。但是我不希望两个人有同一个支票账户,也不希望一个自然人和一个公司共享一个支票账户!看到这张图片

http://i41.tinypic.com/35i6kbk.png

3) 在 Chequing Account 中创建两个指向 Corporation 和 Natural Person 的外键,但是我会因此强制一个人和一个公司可以拥有多个支票账户,但是我必须手动确保每个 ChequingAccount 行不是两个关系都指向公司和自然人,因为支票账户要么属于公司,要么属于自然人。看到这张图片

http://i40.tinypic.com/1rpv9z.png

这个问题还有其他更清洁的解决方案吗?

database-design

21
推荐指数
1
解决办法
3万
查看次数

教授告诉我们将序列化的 Java 对象存储为 blob,而不是定义关系表

我的教授告诉我们,我们可以像这样将对象映射到 id,而不是实际定义具有正确属性的表:

id (int)  |   Serialized Object (blob)
   1               10010110110
Run Code Online (Sandbox Code Playgroud)

我可以看到很多问题;数据冗余,必须单独跟踪 id,必须将整个表拉入内存以搜索任何内容,**如果我想在 Java 代码中更改我的模型,我将不再能够反序列化存储在数据库到该模型。

要么我永远坚持那个模型,要么我必须做一些其他非常丑陋的事情来改变我的模型。**这整件事对我来说似乎是糟糕的形式。我有理由不同意我的教授吗?这样做有什么我没有想到的好处吗?如果我是对的,我应该对我的教授说些什么吗?他向我全班宣讲了这一点,甚至说他是用这种方式建造项目的。第二个意见会很棒。

该课程名为软件设计

我的教授并没有说这是最好的方法,但他确实说这是定义关系表的合理替代方法。

该模型在任何方面都不是动态的。

database-design

21
推荐指数
6
解决办法
1万
查看次数

设计数据库和表以保留更改记录的最佳方法?

我需要在项目上设置历史功能以跟踪先前的更改。

假设我现在有两个表:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

示例:我在笔记中有一行,用户想要更改消息。我想在更改之前和更改之后跟踪它的状态。

在这些表中的每一个中设置一列的最佳方法是什么,该列将说明某个项目是否“旧”。0 如果活动1 如果删除/不可见。

我还想创建一个历史 ( AUDIT TRAIL) 表,其中包含id先前状态的 ,id新状态的 ,这些 id 与哪个表相关?

mysql database-design audit

21
推荐指数
2
解决办法
6万
查看次数

在具有互斥子类的类型/子类型设计模式中实现子类型的子类型

介绍

为了让这个问题对未来的读者有用,我将使用通用数据模型来说明我面临的问题。

我们的数据模型由 3 个实体组成,它们应标记为ABC。为了简单起见,它们的所有属性都将是int类型。

实体A具有以下属性:D,EX;

实体B具有以下属性:D,EY;

实体C具有以下属性:DZ

由于所有实体共享公共属性D,我决定应用类型/子类型设计。

重要提示:实体是互斥的!这意味着实体是 A 或 B 或 C。

问题:

实体AB还有另一个共同的属性E,但是这个属性并不存在于实体中C

题:

如果可能的话,我想使用上述特性来进一步优化我的设计。

老实说,我不知道如何做到这一点,也不知道从哪里开始尝试,因此这篇文章。

database-design sql-server sql-server-2012 subtypes

21
推荐指数
3
解决办法
3922
查看次数

SQL Server - 用于报告的单独数据库?

在我们的 SQL Server 上,我们为每个 Web 应用程序都有一个数据库。对于报表,我们使用 Reporting Services,所有报表数据(包括报表参数)都来自存储过程。

存储过程与报表中的数据位于同一数据库中。因此,例如,服务于 Stock 报告的 proc 位于 Stock 数据库中。一些报告显示来自多个数据库的信息,然后 proc 将位于这些源数据库之一中。报告参数从具有商店、员工等数据的企业数据库中的 procs 获取数据。

这意味着所有报告都至少有一个到 Enterprise 数据库的连接和另一个到另一个数据库的连接——有时甚至更多。

我的问题是:将报告过程移动到单独的“报告”数据库中是否有好处。我知道将报告移动到另一台服务器上的好处,我不是在谈论那个——这将在同一台服务器上。

可能影响这一点的事情是:

  • 一份报告有多个数据库连接会影响报告的速度吗?
  • 将报告过程与数据放在一个单独的数据库中,会阻止我们使用索引视图吗?
  • 您是否发现在单独的数据库中管理您的报告更容易/更困难?

请让我知道你的想法。

database-design sql-server

20
推荐指数
1
解决办法
1万
查看次数