Централизованная база данных для нескольких приложений - PullRequest
1 голос
/ 20 августа 2011

Мне кажется, у меня довольно простой вопрос о дизайне.

Скажите, у меня есть 3 приложения

App1
App2
App3

Им всем нужен доступ к общим данным, поэтому я создал общую базу данных с таблицей Locations

Все три приложения могут обновлять информацию в таблице, но я хочу IsEnabled для каждого приложения, чтобы у каждого приложения была возможность включать / отключать каждую строку Location в таблице.

Не думаю, что я хочу сделать столбец bit в таблице для каждого приложения, чтобы увидеть, включено ли оно или нет, но я не знаю? Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 августа 2011

Вы можете создать отдельную таблицу следующим образом:

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

Теперь вместо добавления столбца в таблицу местоположений для каждого приложения вы просто добавляете строку в эту таблицу сопоставления.Вы также можете расширить это для поддержки других свойств, которые могут быть специфическими для приложения: комбинация местоположений.

1 голос
/ 20 августа 2011

Если бы это был я, я бы создал слой абстракции между базой данных и этими приложениями.Это избавило бы от необходимости проводить рефакторинг всех приложений при каждом изменении базы данных, а также предоставило бы вам множество возможностей для контроля доступа к данным.

0 голосов
/ 20 августа 2011

Вы можете сделать это довольно легко:

  • создайте три отдельных AppXEnabled BIT столбца - пусть каждое приложение устанавливает свой собственный флаг "enable"
  • создать «комбинированный» вычисляемый столбец, который гарантирует, что хотя бы один из трех флагов установлен

Примерно так:

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 по мере необходимости.

...