我認爲我有一個相當直接的設計問題。多個應用程序的集中式數據庫
說我有3個應用
App1
App2
App3
他們都需要訪問常用數據,所以我做了一個餐桌上常見的數據庫名爲Locations
所有三個應用程序可以更新表中的信息,但我想爲每個應用程序提供一個IsEnabled
,這樣每個應用程序就可以具有啓用/禁用表中每個Location
行的功能。
我不認爲我想在表格中爲每個應用程序創建一個bit
列,以查看它的啓用與否,但我不知道?謝謝!
我認爲我有一個相當直接的設計問題。多個應用程序的集中式數據庫
說我有3個應用
App1
App2
App3
他們都需要訪問常用數據,所以我做了一個餐桌上常見的數據庫名爲Locations
所有三個應用程序可以更新表中的信息,但我想爲每個應用程序提供一個IsEnabled
,這樣每個應用程序就可以具有啓用/禁用表中每個Location
行的功能。
我不認爲我想在表格中爲每個應用程序創建一個bit
列,以查看它的啓用與否,但我不知道?謝謝!
你可以有一個單獨的表如下:
CREATE TABLE ApplicationLocations
(
ApplicationID INT,
LocationID INT,
IsEnabled BIT
);
現在反而增加了位置表中的每個應用程序一欄,你只需要添加一行到這個映射表。您還可以擴展此功能以支持可能特定於應用程序的其他屬性:位置組合。
如果是我,我會在數據庫和這些應用程序之間創建一個抽象層。這將消除每次數據庫更改時都必須重構所有應用程序的情況,併爲您提供了多種用於控制對數據訪問的選項。
你可以這樣做很容易:
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)
,當三個應用標誌都未設置時將爲false (0)
。
這是一個計算列,意味着它將始終保持最新狀態,並根據需要由SQL Server進行更新。
問題在於模式維護。假設我們添加App4和App5,現在我們需要更改表結構和計算列。 –
@Aaron Bertrand:當然,只要你有三個,四個應用程序,它就可以正常工作,而且這個數字不可能迅速增加。另一方面:只要您的應用數量較少,您必須經歷的麻煩遠遠少於您的解決方案。 –
我認爲我們可能對「麻煩」有不同的定義 - 我喜歡用關係表達這些東西,而不是作爲屬性 - 在名稱中包含一個包含數據的列並不適合我。你的另一個問題是,如果你想爲每個應用程序添加另一個屬性......還有三列,等等。 –
謝謝!現在要弄清楚爲什麼EF不會讓我通過導航屬性執行where子句。 – MisterIsaak