Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разработка схемы: пользователи - их настройки / 4 сообщений из 4, страница 1 из 1
17.10.2014, 12:09
    #38779698
design21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разработка схемы: пользователи - их настройки
Добрый день всем!

Разрабатываю схему базы с нуля. Посоветуйте пожалуйста, как сделать схему более красивой. Задача такая:
Есть пользователи, есть наборы настроек.У каждого пользователя может быть несколько наборов настроек, в каждый конкретный момент может быть выбран только один набор настроек для пользователя.

Схема должна быть оптимизирована под следующий задачи:
1) Для каждой таблицы будет вестись история изменений, в связи с этим хочу вынести "выбранный сейчас набор настроек" в отдельную таблицу, чтобы при переключении между наборами настроек не логировать лишние данные.
2) Констрейнт - для пользователя может быть выбран только один набор настроек.
3) Констрейнт - для пользователя может быть выбран только набор настроек из его списка.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
IF OBJECT_ID ('[dbo].[PaUserSettingSetSelected]') IS NOT NULL 
DROP TABLE [dbo].[PaUserSettingSetSelected] 

IF OBJECT_ID ('[dbo].[PaUserSettingSet]') IS NOT NULL 
DROP TABLE [dbo].[PaUserSettingSet]

IF OBJECT_ID ('[dbo].[PaUser]') IS NOT NULL 
DROP TABLE [dbo].[PaUser]

IF OBJECT_ID ('[dbo].[SettingSet]') IS NOT NULL 
DROP TABLE [dbo].[SettingSet]


CREATE TABLE [dbo].[PaUser] (
	[PaUserId] uniqueidentifier CONSTRAINT [PK_PaUser] PRIMARY KEY)

CREATE TABLE [dbo].[SettingSet] (
	[SettingSetId] uniqueidentifier CONSTRAINT [PK_SettingSet] PRIMARY KEY )

CREATE TABLE [dbo].[PaUserSettingSet] (
	PaUserSettingSetId uniqueidentifier CONSTRAINT [PK_PaUserSettingSet] PRIMARY KEY
  , PaUserId uniqueidentifier CONSTRAINT [FK_PaUserSettingSet_PaUser] FOREIGN KEY REFERENCES [dbo].[PaUser] (PaUserId) 
  , SettingSetId uniqueidentifier CONSTRAINT [FK_PaUserSettingSet_SettingSet] FOREIGN KEY REFERENCES [dbo].[SettingSet] (SettingSetId)
  , IsUserDefault bit
)

CREATE TABLE [dbo].[PaUserSettingSetSelected] 
(
    [PaUserSettingSetSelectedId] uniqueidentifier CONSTRAINT [PK_PaUserSettingSetSelected] PRIMARY KEY
  ,	[PaUserSettingSet] uniqueidentifier CONSTRAINT [FK_aUserSettingSetSelected_PaUserSettingSet] FOREIGN KEY REFERENCES [dbo].[PaUserSettingSet] (PaUserSettingSetId)
)



Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
17.10.2014, 12:44
    #38779783
design21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разработка схемы: пользователи - их настройки
Вот придумал такой вариант. Есть ли слабые стороны?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
IF OBJECT_ID ('[dbo].[PaUserSettingSetSelected]') IS NOT NULL 
DROP TABLE [dbo].[PaUserSettingSetSelected] 

IF OBJECT_ID ('[dbo].[PaUserSettingSet]') IS NOT NULL 
DROP TABLE [dbo].[PaUserSettingSet]

IF OBJECT_ID ('[dbo].[PaUser]') IS NOT NULL 
DROP TABLE [dbo].[PaUser]

IF OBJECT_ID ('[dbo].[SettingSet]') IS NOT NULL 
DROP TABLE [dbo].[SettingSet]


CREATE TABLE [dbo].[PaUser] (
	[PaUserId] uniqueidentifier CONSTRAINT [PK_PaUser] PRIMARY KEY)

CREATE TABLE [dbo].[SettingSet] (
	[SettingSetId] uniqueidentifier CONSTRAINT [PK_SettingSet] PRIMARY KEY )

CREATE TABLE [dbo].[PaUserSettingSet] (
	PaUserSettingSetId uniqueidentifier CONSTRAINT [PK_PaUserSettingSet] PRIMARY KEY
  , PaUserId uniqueidentifier CONSTRAINT [FK_PaUserSettingSet_PaUser] FOREIGN KEY REFERENCES [dbo].[PaUser] (PaUserId) 
  , SettingSetId uniqueidentifier CONSTRAINT [FK_PaUserSettingSet_SettingSet] FOREIGN KEY REFERENCES [dbo].[SettingSet] (SettingSetId)
  , IsUserDefault bit
  , CONSTRAINT [AK_PaUserSettingSet] UNIQUE (PaUserId,SettingSetId)
)

CREATE TABLE [dbo].[PaUserSettingSetSelected] 
(
    [PaUserSettingSetSelectedId] uniqueidentifier CONSTRAINT [PK_PaUserSettingSetSelected] PRIMARY KEY
  , PaUserId uniqueidentifier CONSTRAINT [FK_PaUserSettingSetSelected_PaUser] FOREIGN KEY REFERENCES [dbo].[PaUser] (PaUserId) 
  , SettingSetId uniqueidentifier CONSTRAINT [FK_PaUserSettingSetSelected_SettingSet] FOREIGN KEY REFERENCES [dbo].[SettingSet] (SettingSetId)
  , CONSTRAINT [FK_PaUserSettingSetSelected_PaUserSettingSet] FOREIGN KEY (PaUserId,SettingSetId) REFERENCES [dbo].[PaUserSettingSet](PaUserId,SettingSetId)
)
...
Рейтинг: 0 / 0
17.10.2014, 12:50
    #38779796
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разработка схемы: пользователи - их настройки
видимо, нужен еще unique constraint на PaUserId в таблице PaUserSettingSetSelected - для реализации Вашего условия 2
...
Рейтинг: 0 / 0
17.10.2014, 13:03
    #38779837
xenix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разработка схемы: пользователи - их настройки
А зачем в первичных ключах uniqueidentifier ?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разработка схемы: пользователи - их настройки / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]