小编Jak*_*ake的帖子

如何在 2 个地理站点上复制数据库?

免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。

长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。

就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。

在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。

当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。

我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。

这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。

否则,如果这是一个非常糟糕的主意,我还有什么其他选择?

tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?

replication sql-server sql-server-2012

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

检查可空数据的约束,如何处理?

这是我数据库中的表之一。为清楚起见,省略了约束。

CREATE TABLE [Person].[Person]
(
    [ID]                     INT           NOT NULL IDENTITY,       
    [Forename]               VARCHAR(16)   NOT NULL,
    [Surname]                VARCHAR(32)   NOT NULL,
    [Gender]                 CHAR(1)       NOT NULL DEFAULT 'U',
    [DateOfBirth]            DATETIME      NULL,
    [HobbiesAndInterests]    VARCHAR(256)  NULL,
    [AdditionalInformation]  VARCHAR(512)  NULL,
    [LocalCentreID]          INT           NOT NULL DEFAULT 0,
    [EmergencyContactID]     INT           NULL, 
)
Run Code Online (Sandbox Code Playgroud)

我的问题涉及出生日期字段。如果提供了值,我需要对日期进行检查。如果未提供值,则无需运行检查。

我基本上需要根据出生日期检查这个人是否年满 18 岁。如果未提供出生日期,则无需对其进行检查。

我想了几种不同的方法来解决这个问题:

第一个显然是在出生日期字段上设置检查约束,但我认为如果日期为空,这将失败。

另一种选择是在检查约束内使用标量 UDF。

我想到的最后一个选项是使用 AFTER INSERT/UPDATE 触发器来检查日期并在日期无效时回滚。

我和一位同事谈过,他说从技术上讲,我正在检查数据库中的业务规则,因此应该将这项检查推送到应用程序。

是否有“正确”的方法来解决这个问题,或者基本上是开发人员认为最好的方法?

trigger null sql-server check-constraints

5
推荐指数
1
解决办法
4843
查看次数

为一个人存储多个联系地址

简化图供参考。 供参考的简化图

我的数据库以以下方式存储有关人员的信息。有一个Person包含常见个人信息字段的 表格;姓名、出生日期、性别等。

每个人的联系信息以ContactInformation1:1 的关系保存在表中。

最后,我们存储数据的组织中每种特定类型的人都有单独的表,与 Person

我的Student桌子有点问题。基本上,我的客户现在想要存储学生的家庭住址和学期地址。但我不确定如何处理这个问题。

我看到三种可能的选择/解决方案:

  • 连接表-ContactAddressMappingPerson和之间创建连接表(例如)ContactInformation
  • 新表- 创建一个TermTimeAddress与 1:1 关系的表Student
  • 新字段- 向Student表中添加额外字段以保存术语时间地址。

现在这里是我看到的每个选项的主要“问题”:

联结表将允许为一个人存储多个地址,但我们只需要为学生(现在)这样做。如果不使用某种布尔字段,则也无法确定哪个地址是家庭/学期时间地址,该字段在该表中似乎是毫无意义的信息,因为它仅对学生而言是唯一的。

创建一个新表将术语时间地址与主要地址分开,但这些感觉像是重复,因为我基本上是在创建具有相同字段的特定类型的地址,减去电话号码和电子邮件地址等内容。

将字段添加到Student似乎我用应该在其他地方的信息把表格弄得乱七八糟。该表格应仅用于提供有关该学生的信息,例如他们的学校、学习领域以及安置的开始和结束日期。

其中哪一个是最合适的选择,或者还有其他我还没有见过的解决方案吗?

normalization database-design

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