Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Планирование БД для хранения различных данных, помогите с архитектурой  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
MSSQL 2008.
Планирую БД (MSSQL 2008) для хранения персональных данных (текст) на десятки миллионов людей (ну а вдруг!).
Есть мысль не создавать жёсткую структуру для хранения персональной информации, а сделать дополнительную таблицу, в которой хранить те или иные параметры. Предполагая, что человек может изменить о себе ЛЮБУЮ информацию, кроме идентификатора, и необходимостью хранения истории изменений этой информации, получаем следующее:

create table [T_People]
(
    [id] bigint identity(1,1) not null --идентификатор персоны
   ,[Created] datetime not null --дата создания записи
   ,[Modified] datetime not null --дата изменения записи
)
create table [T_PeopleInfo]
{
    [id] bigint identity(1,1) not null
   ,[PeopleID] bigint not null --идентификатор персоны
   ,[Param] varchar(100) not null -- название параметра
   ,[Type] varchar(50) not null --тип параметра (дата, текст...)
   ,[Value] nvarchar(500) not null -- значение параметра
   ,[Modified] datetime not null --дата изменения параметра
   ,constraint [PK_T_PeopleInfo] primary key clustered ([PeopleID], [Param], [Value])
}


Как это сделать правильно?
16 мар 17, 12:42    [20301547]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
=Сергей=,

3 нормальная форма, не?
16 мар 17, 12:46    [20301560]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
TaPaK
3 нормальная форма, не?

не понял
16 мар 17, 12:48    [20301572]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
aleksrov
Member

Откуда:
Сообщений: 948
=Сергей=,

Во второй таблице, у вас зависимость не ключевых полей от других неключевых полей или по другому у вас есть данные которые не зависят от первичного ключа
16 мар 17, 13:04    [20301654]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Да и вообще внимательно сами посмотрите, как вы потом собираетесь эти 2 таблицы свзяать. К тому же у вас как я понимаю может быть только 1 запись на одного человека, которая потом просто меняется, но у вас я могу добавить хоть 100 записей с одинаковым [PeopleID].
16 мар 17, 13:16    [20301747]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
aleks2
Guest
=Сергей=
MSSQL 2008.
Планирую БД (MSSQL 2008) для хранения персональных данных (текст) на десятки миллионов людей (ну а вдруг!).
Есть мысль не создавать жёсткую структуру для хранения персональной информации, а сделать дополнительную таблицу, в которой хранить те или иные параметры. Предполагая, что человек может изменить о себе ЛЮБУЮ информацию, кроме идентификатора, и необходимостью хранения истории изменений этой информации, получаем следующее:

create table [T_People]
(
    [id] bigint identity(1,1) not null --идентификатор персоны
   ,[Created] datetime not null --дата создания записи
   ,[Modified] datetime not null --дата изменения записи
)
create table [T_PeopleInfo]
{
    [id] bigint identity(1,1) not null
   ,[PeopleID] bigint not null --идентификатор персоны
   ,[Param] varchar(100) not null -- название параметра
   ,[Type] varchar(50) not null --тип параметра (дата, текст...)
   ,[Value] nvarchar(500) not null -- значение параметра
   ,[Modified] datetime not null --дата изменения параметра
   ,constraint [PK_T_PeopleInfo] primary key clustered ([PeopleID], [Param], [Value])
}


Как это сделать правильно?


Сферические велосипеды в вакууме едут отвратительно.

1. Есть вполне таки "жесткий" набор классических персональных данных. Его надо тупо сунуть в таблицу T_People.
2. Фся прочия фуфло - можешь сделать "как придумал".
3. В MS SQL есть sql_variant.
16 мар 17, 13:29    [20301834]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
=Сергей=,

можно использовать SQL_VARIANT, но его сложно сопровождать при развитии приложения и место жрёт.
16 мар 17, 13:41    [20301902]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Adx
Guest
aleks2

Сферические велосипеды в вакууме едут отвратительно.

1. Есть вполне таки "жесткий" набор классических персональных данных. Его надо тупо сунуть в таблицу T_People.


Огласите, пожалуйста, этот "жесткий набор классических персональных данных".
Первый раз о таком слышу. Может стандарт есть?
16 мар 17, 14:10    [20302131]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
=Сергей=,

Поздравляю! Вы почти подошли к созданию Entity–attribute–value model (EAV).
16 мар 17, 14:58    [20302426]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Ух ты, оказывается EAV изобрели в прошлом столетии!
16 мар 17, 16:21    [20302809]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Поле [Modified] в таблице [T_People] лишнее (переопределение), ибо

SELECT [Modified] 
FROM [T_People] 
WHERE [id] = @id
должно быть равно
SELECT MAX([Modified]) 
FROM [T_PeopleInfo] 
WHERE [id] = @id
16 мар 17, 16:43    [20302925]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
constraint [PK_T_PeopleInfo] primary key clustered ([PeopleID], [Param], [Value])

Тоже неправильно. Например, человек может изменить контактный телефон с домашнего на мобильный, а потом захотеть вернуть обратно - и обломается...
16 мар 17, 16:45    [20302937]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Akina
Поле [Modified] в таблице [T_People] лишнее (переопределение), ибо

SELECT [Modified] 
FROM [T_People] 
WHERE [id] = @id
должно быть равно
SELECT MAX([Modified]) 
FROM [T_PeopleInfo] 
WHERE [id] = @id


Я бы поспорил. Дело в том, что для EVA очень сложно соблюдать ACID в области C - каждое значение параметра может быть изменено независимо от других, а именно этого стоит избегать...
16 мар 17, 16:57    [20302993]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
=Сергей=
Есть мысль не создавать жёсткую структуру для хранения персональной информации
для этого есть noSQL базы.
в вашем случае посмотрите на MongoDB или Tarantool.
16 мар 17, 17:43    [20303187]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Чтобы спорить, придётся предположить, что пользователь может внести такие изменения в свои параметры, что они не будут восприняты как изменение его записи. А тогда всю систему надо сгрести в совок и отнести на помойку.
16 мар 17, 19:17    [20303489]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Akina
Поле [Modified] в таблице [T_People] лишнее (переопределение)

Тут не столь велики расходы на переполнение (избыточность), по сравнением с простотой получения недавно изменённых данных.
21 мар 17, 10:59    [20316565]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Wlr-l
Поздравляю! Вы почти подошли к созданию Entity–attribute–value model (EAV).

Спасибо, читаю.
21 мар 17, 11:03    [20316593]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
офф: Не забываем, что Фамилия - непостоянное значение.
И вообще будет полезно хранить историю некот. параметров.

[Value] nvarchar(500) значение параметра

В корне неверно ! Сделайте набор полей Строка/Дата/целое/булеан/Флоат/Бинари16(н-р хранить ключи 1С)
В описании параметра хранить тип данных.

зы: Качественный EAV - ваше всьо. Универсально и удобно, если правильно спроектировать. И не только для перс.данных, а для любой сущности в системе. Поверьте - пригодиццо.
21 мар 17, 11:18    [20316703]     Ответить | Цитировать Сообщить модератору
 Re: Планирование БД для хранения различных данных, помогите с архитектурой  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
LSV
В корне неверно ! Сделайте набор полей Строка/Дата/целое/булеан/Флоат/Бинари16(н-р хранить ключи 1С)
В описании параметра хранить тип данных.

зы: Качественный EAV - ваше всьо. Универсально и удобно, если правильно спроектировать. И не только для перс.данных, а для любой сущности в системе. Поверьте - пригодиццо.

Да по вам Бритва Оккама плачет...
Плохая парадигма EAV этот, на темную сторону ведет она.
21 мар 17, 11:37    [20316834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить