多个应用程序的集中数据库

时间:2011-08-19 20:15:28

标签: sql-server database database-design

我认为我有一个相当直接的设计问题。

说我有3个申请

App1
App2
App3

他们都需要访问公共数据,因此我使用名为Locations

的表创建了一个公共数据库

所有三个应用程序都可以更新表中的信息,但我希望每个应用程序都有IsEnabled,因此每个应用程序都可以具有启用/禁用表中每个Location行的功能。

我认为我不想在表格中为每个应用创建一个bit列,看看它是否启用但我不知道?谢谢!

3 个答案:

答案 0 :(得分:3)

你可以有一个单独的表格如下:

CREATE TABLE ApplicationLocations
(
    ApplicationID INT,
    LocationID INT,
    IsEnabled BIT
);

现在,您只需向此映射表添加一行,而不是为每个应用程序的locations表添加一列。您还可以对此进行扩展以支持可能特定于应用程序的其他属性:位置组合。

答案 1 :(得分:1)

如果是我,我会在数据库和这些应用程序之间创建一个抽象层。这将消除每次进行数据库更改时必须重构所有应用程序,并为您提供控制数据访问的各种选项。

答案 2 :(得分:0)

你可以很容易地做到这一点:

  • 创建三个单独的AppXEnabled BIT列 - 让每个应用设置自己的“已启用”标记
  • 创建一个“组合”计算列,确保设置三个标志中的至少一个

这样的事情:

CREATE TABLE dbo.YourTable
   (ID INT IDENTITY PRIMARY KEY, 
    ...(your columns here) .....,
    App1Enabled BIT, 
    App2Enabled BIT, 
    App3Enabled BIT)

ALTER TABLE dbo.YourTable
ADD AtLeastOneEnabled AS App1Enabled | App2Enabled | App3Enabled PERSISTED

现在,您的行将具有三个单独的AppXEnabled标志 - 以及一个组合标志AtLeastOneEnabled,当至少设置了一个标志时,它将true (1),并且将{ {1}}当没有设置三个app标志时。

这是一个计算列,这意味着它将始终是最新的,并由SQL Server根据需要进行更新。