2011-04-20 8 views
0

Мы разрабатываем услуги для каждого клиента, который может назначить встречу. Есть ли стратегия - таблица в базе данных (MS SQL SERVER) для каждого клиента будет правильной?Таблица для клиента в базе данных

Мы считаем, что такая стратегия упрощает и исключает сложную блокировку таблиц.

ответ

0

Похоже, вы пытаетесь создать приложение с несколькими арендаторами. Я бы не рекомендовал одну таблицу для каждого клиента. Скорее всего, я рекомендовал бы один из двух решений:

  1. Интеграция данных всех клиентов (арендаторов) в одних и тех же таблиц и разделение по идентификатору. Другими словами, каждая таблица верхнего уровня будет иметь внешний ключ под названием «ClientId» или «TenantId», который идентифицирует и разделяет данные каждого клиента. Недостатком этого подхода является то, что база данных становится намного быстрее, а большие базы данных сложнее управлять меньшими. Кроме того, существует риск того, что разработчик построит запрос, который забывает фильтровать на ClientId, и один клиент видит данные другого клиента.

  2. Одна база данных на одного клиента. Более экстремальное решение, но полезно, если клиенты будут размещать свои собственные приложения, если есть большие различия в размерах данных каждого клиента или если клиент хочет абсолютной уверенности в разделении данных.

+0

Я думаю, что ситуация с иностранным ключом не применима из-за ограничений до 256 из одной таблицы. В другой стороне мы должны хранить одну таблицу с данными для каждого клиента. Поскольку в случае параллельной работы многие пользователи (100-1000) могут иметь доступ к одной таблице; в случае, если одна таблица на одного клиента будет 1-10 пользователей. – Alexandr

+0

@ Александр - А? В каждой таблице верхнего уровня будет столбец * one * foreign key, который будет ссылаться на таблицу клиентов. – Thomas

+0

@Alexandr - Я определенно не предлагаю добавить столбец FK для каждого клиента. Это не имеет смысла и не нормализуется и не является необходимым. Вместо этого каждая таблица верхнего уровня будет включать данные для * всех * клиентов, где вы различаете данные одного клиента от другого одним столбцом, который является FK для таблицы клиентов. – Thomas