Модель данных мультитенантного сайта - PullRequest
1 голос
/ 26 октября 2011

Я просто хочу запустить эту модель некоторыми компетентными людьми здесь.

Сценарий состоит в том, что я создал интернет-магазин ASP MVC 3, который будет использоваться несколькими компаниями.

Одна кодовая база, несколько сайтов.

Пример.У меня есть:

  • company1.acme.com
  • company2.acme.com

И все они должны использовать одну и ту же базу кода, но для пользователейданные в интернет-магазине должны быть разными.

Итак, я сделал эту простую модель данных: enter image description here

В Site Я храню всю информацию о компании, напр.Host = company1.

Правильно ли использовать Host в качестве PK во всех таблицах?

Как улучшить эту модель?

ОБНОВЛЕНИЕ: enter image description here

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Хранение хоста во всех таблицах избыточно / денормализовано, если оно не является частью ключа.

Взять например Settlement и SettlementLine. SettlementLine нужно знать только о SettlementID и получить хост, присоединившись к таблице Settlement.

Хост не должен быть в PK других таблиц (только FK), по крайней мере, если ID является автономным номером.

Я бы имел таблицы

Site
----
Host (PK)
Name

Item
----
ID Autonumber PK
Host (FK Site.Host)
Name

SettlementLine
--------------
ID Autonumber PK
SettlementID (FK Settlement.ID)
ItemID (FK Item.ID)

Settlement
----------
ID Autonumber PK
Host (FK Site.Host, Profile.Host)
UserName (FK Profile.UserName)

Profile
-------
UserName PK
Host PK (FK Site.Host)
Name
1 голос
/ 26 октября 2011

Я добавил тэг "multi-tenant" для вас.

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

...