我认为我有一个相当直接的设计问题。
说我有3个申请
App1
App2
App3
他们都需要访问公共数据,因此我使用名为Locations
所有三个应用程序都可以更新表中的信息,但我希望每个应用程序都有IsEnabled
,因此每个应用程序都可以具有启用/禁用表中每个Location
行的功能。
我认为我不想在表格中为每个应用创建一个bit
列,看看它是否启用但我不知道?谢谢!
答案 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根据需要进行更新。