Создание динамического пользовательского интерфейса ASP.NET, управляемого данными - Создание фиксированной части модели данных: схемы Membership и связанных с ней сущностей, а также Customers и Clients

ОГЛАВЛЕНИЕ

Создание фиксированной части модели данных: схемы Membership и связанных с ней сущностей, а также Customers и Clients

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

  • Схема для реализации SqlMembershipProvider и связанные сущности. Веб-сайт обладает поддержкой учетных записей и требует от пользователей авторизации. Когда пользователь авторизируется, нам необходимо определить с какими клиентами он связан, чтобы впоследствии отобразить пользовательский интерфейс с соответствующими динамическими атрибутами. Нам также необходима дополнительная таблица, которая хранит информацию о том, какой клиент принадлежит какой учетной записи.
  • Таблица Customers. Данная таблица хранит в себе строки для каждого пользователя - различные юридические компании, которые приобрели пользовательские учетные записи для использования нашего программного продукта.
  • Таблица Clients.Каждая юридическая компания будет обладать списком клиентов, представленных в виде записей в таблице. Данная таблица содержит фиксированные атрибуты для пользователей - такие как FirstName, LastName, Email, Address1, Address2, City и т.д., -  которые являются общими среди всех юридических компаний. Динамические атрибуты клиентов, которые уникальны для каждого пользователя, будут храниться в другой таблице.

Во-первых, нам необходимо реализовать SqlMembershipProvider из ASP.NET и настроить сайт на использование авторизации на основе формы, но полное описание данного процесса выходит за рамки данной статьи (для получения более подробной информации вам стоит прочитать статьи по теме авторизации на основе формы, Membership и Roles). Реализация SqlMembershipProvider добавит несколько таблиц, представлений и хранимых процедур. Таблица aspnet_Users содержит по записи для каждого пользователя, и каждая записть уникально идентифицируется посредством поля UserId, которое является типа uniqueidentifier. В дополнение к таблицам, относящимся к SqlMembershipProvider, нам необходимо добавить другую таблицу, которая указывает, к которой учетной записи принадлежит каждый пользователь. Мы вернемся к этому, как только создадим таблицу Customers.

Таблица Customers используется для моделирования различных юридических компаний, которые используют наш веб-сайт. Данная таблица содержит по записи на каждую юридическую фирму (наши клиенты - пользователи). Создайте данную таблицу, следуя  нижеприведенной схеме:

Column Name Data Type Описание
CustomerId uniqueidentifier Первичный ключ; значение по умолчанию - NEWID()
FirmName nvarchar(50)  

Обратите внимание на то, что поле CustomerId является типа uniqueidentifier и имеет значение, равное по умолчанию NEWID(). uniqueidentifier является SQL-выражением для Globally Unique Identifier (GUID) (Глобально уникальный идентификатор) ; NEWID() по умолчанию автоматически назначает значение GUID данной колонке при вставке новой записи. Если бы вы предпочли сделать данную колонку типа int и сделать ее типа IDENTITY, то и это вполне реализуемо.

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

Column Name Data Type Описание
UserId uniqueidentifier Первичный ключ; Внешний ключ к aspnet_Users.UserId
CustomerId uniqueidentifier Внешний ключ к Customers.CustomerId

Данная таблица имеет связь типа "один к одному" с таблицей aspnet_Users (которая содержит по записи для каждой пользовательской записи системы). На данный момент таблица содержит только одну колонку – CustomerId, но вы можете добавить другие, на ваше усмотрение.

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

Column Name Data Type Описание
ClientId uniqueidentifier Первичный ключ; default value of NEWID()
CustomerId uniqueidentifier Внешний ключ к Customers.CustomerId
FirstName nvarchar(50)  
LastName nvarchar(50)  
Email nvarchar(100)  

Следующая ER-диаграмма демонстрирует три таблицы, созданные нами вручную, а также таблицу aspnet_Users и с отношениями между ними всеми .


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