Как хранить данные, которые совместно используются базами данных? - PullRequest
1 голос
/ 30 августа 2011

Как хранить данные, которые совместно используются базами данных?

Предположим, база данных для системы управления контактами.Каждому пользователю предоставляется отдельная база данных.Пользователь может хранить информацию об образовании своих контактов.

В настоящее время в каждой базе данных есть таблица с именем School, в которой хранится название каждой школы в стране.Школьный стол называется FK контактной таблицей.

Таблица школ обновляется каждый год или около того, по мере добавления новых школ или смены названий существующих школ.

Поскольку информация о школе является общей для всех пользовательских баз данных, ее перемещают в отдельную общую базу данных.кажется, лучшая идея.но когда он перемещен в отдельную базу данных, вы не можете создать ограничение FK между School и Contact.

Какова наилучшая практика для такой ситуации?

(ps я использую SQL Server, если это актуально)

Ответы [ 3 ]

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

Учитывая тот факт, что вы не будете часто запрашивать таблицы со столбцом SchoolID, я предположу, что вставки / обновления в эти таблицы будут действительно редкими ... В этом случае вы можете создать ограничение натаблица, в которой вам нужны FK, которые проверяют наличие таких SchoolID в таблице Schools.

Обратите внимание, что каждая вставка / обновление таблицы со столбцом SchoolID будет буквально выполнять запросдля другой БД, поэтому расстояние между базами данных, способ их соединения друг с другом и многие другие факторы могут влиять на производительность операторов вставки / обновления.

Тем не менее, если они находятся на одном сервере и у вас естьвсе ваши индексы и первичные ключи настроены, запрос должен быть достаточно быстрым.

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

Что нужно учитывать

  • База данных - это единица резервного копирования / восстановления.
  • Может быть невозможно восстановить две базы данных в один и тот же момент времени.
  • Внешние ключи не поддерживаются в разных базах данных.

Следовательно, я бы предложил управлять School - и любой другой общей таблицей - в одной справочной БД и затем реплицировать эти таблицы в другие БД.

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

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

...