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

Откуда:
Сообщений: 1
Добрый день.
Есть объект, который имеет несколько типов.

- 1 и 2 тип:
1 большая TextArea
Колонка: Text

3 тип:
мин, макс и номер по умолчанию
Колонки: min_number, max_number и default_number

4 тип:
мин дата, макс дата и номер по умолчанию
Колонки: min_date, max_date и default_date

5 тип:
список со значениями и выбор дефолтного значения
Колонки: value, is_default_value, value_sort (для правильного отображения в списке)

Как правильно создать таблицу / таблицы под такой объект:

Будет ли такая таблица, таблицой курильщика:
object_id
object_type_id
text
min_number
max_number
default_number
min_date
max_date
default_date
value
is_default_value
value_sort

В зависимости от типа заполнять нужные поля, а остальные оставлять NULL.
Логику доставания данных для определённого типа делать на стороне приложения.

Или нужно выделить схожие типы и рассувать по таблицам?

Хотелось бы услышать мнение.
17 авг 18, 13:18    [21645923]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
L_argo
Member

Откуда:
Сообщений: 1217
Если не увлекаться добавлением новых полей, то можно сказать, что пока все норм. :)
17 авг 18, 13:22    [21645926]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
Читать про EAV, читать про столбцы типа XML.
Применить то, что наиболее подойдет под ваши условия.
17 авг 18, 13:34    [21645939]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
TaPaK
Member

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

ну с такой структурой можно SPARSE NULL + COLUMN_SET и заполнять через xml
17 авг 18, 14:12    [21645998]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
invm
Читать про EAV, читать про столбцы типа XML.
Применить то, что наиболее подойдет под ваши условия.
И точно не применять тип TEXT (если версия сервера свежая)
17 авг 18, 14:37    [21646029]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Тоже согласен что пока все нормально, даже если еще несколько полей добавить, то тоже будет норм.
EAV - пока не стоит, нужно очень хорошо понимать что это и как с этим жить.

+ я бы check constraint навесил, чтобы мусор в таблице не собирался

alter table dbo.tbl1
add check constraint (
	( object_type_id = 1 
	and text is not null 
	and min_number is null
	and max_number is null
	and default_number is null
	and min_date is null
	and max_date is null
	and default_date is null
	and value is null
	and is_default_value is null
	and value_sort is null
	)
or
	( object_type_id = 2 
	and text is null 
	and min_number is not null
	and max_number is not null
	and default_number is not null
	and min_date is null
	and max_date is null
	and default_date is null
	and value is null
	and is_default_value is null
	and value_sort is null
	)
or
	(object_type_id = 3 
	and ...
	)
)
17 авг 18, 14:46    [21646035]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владимир Затуливетер,

дичь какая-то
17 авг 18, 14:51    [21646038]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
rrttyyrr,

если говорить о том, как на это смотрит _теория_, то данные разных смысловых типов следует хранить в отдельных отношениях. Т.е. некорректно объединять в одной колонке даты рождения и даты принятия на работу, используя дополнительный атрибут для понимания - что же хранится в этой колонке.

Т.е. ваши объекты при их внешней схожести должны храниться в раздельных таблицах.
Как правило, хранение разнородных, но внешне схожих данных приводит к тому, что при обработке в коде появляются _фильтры_, условные переходы и тому подобное. Разработчик обычно игнорирует эти проблем, хотя ему приходится писать не новый код для новых объектов, а постоянно допиливать старый, с риском что-то усложнить или сломать. В редких случаях сводной отчетности такой разработчик потирает руки радуясь, что наконец-то обобщенная таблица ему пригодилась. Так что хорошо подумайте. В любом случае рефакторинг Вам в руки.
17 авг 18, 14:55    [21646041]     Ответить | Цитировать Сообщить модератору
 Re: Структура таблицы  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
TaPaK
дичь какая-то

согласен, но эта "дичь" потом может сэкономить прилчино времени.
рано или поздно кто-то для типа object_type_id=4 добавит значение в Text, и забудет про min_date, max_date и default_date к примеру.
такой констрейнт подобные баги ловит на самой ранней стадии.
так что я за эту "дичь"
какие агруметы против?
17 авг 18, 15:58    [21646146]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить