免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。
长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。
就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。
在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。
当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。
我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。
这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。
否则,如果这是一个非常糟糕的主意,我还有什么其他选择?
tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?
这是我数据库中的表之一。为清楚起见,省略了约束。
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 触发器来检查日期并在日期无效时回滚。
我和一位同事谈过,他说从技术上讲,我正在检查数据库中的业务规则,因此应该将这项检查推送到应用程序。
是否有“正确”的方法来解决这个问题,或者基本上是开发人员认为最好的方法?
我的数据库以以下方式存储有关人员的信息。有一个Person
包含常见个人信息字段的 表格;姓名、出生日期、性别等。
每个人的联系信息以ContactInformation
1:1 的关系保存在表中。
最后,我们存储数据的组织中每种特定类型的人都有单独的表,与 Person
我的Student
桌子有点问题。基本上,我的客户现在想要存储学生的家庭住址和学期地址。但我不确定如何处理这个问题。
我看到三种可能的选择/解决方案:
ContactAddressMapping
在Person
和之间创建连接表(例如)ContactInformation
。TermTimeAddress
与 1:1 关系的表Student
Student
表中添加额外字段以保存术语时间地址。现在这里是我看到的每个选项的主要“问题”:
联结表将允许为一个人存储多个地址,但我们只需要为学生(现在)这样做。如果不使用某种布尔字段,则也无法确定哪个地址是家庭/学期时间地址,该字段在该表中似乎是毫无意义的信息,因为它仅对学生而言是唯一的。
创建一个新表将术语时间地址与主要地址分开,但这些感觉像是重复,因为我基本上是在创建具有相同字段的特定类型的地址,减去电话号码和电子邮件地址等内容。
将字段添加到Student
似乎我用应该在其他地方的信息把表格弄得乱七八糟。该表格应仅用于提供有关该学生的信息,例如他们的学校、学习领域以及安置的开始和结束日期。
其中哪一个是最合适的选择,或者还有其他我还没有见过的解决方案吗?