Как реализовать колонку с несколькими типами данных в nest.js?
Возник следующий вопрос. Пишу небольшой бек для демонстрационных задач. Технологию для бэка выбрал nest.js. Суть проблемы. Есть вот такая таблица с данными
import { BelongsToMany, Column, DataType, Model, Table } from 'sequelize-typescript'
@Table({ tableName: 'someData' })
export class SomeTable extends Model<SomeTable> {
@Column({ type: DataType.INTEGER, unique: true, autoIncrement: true, primaryKey: true })
id: number
@Column({ type: DataType.STRING, allowNull: false })
title: string
///Интересующая колонка
@BelongsToMany(() => Item, () => SomeTableItem)
items: Item[]
}
В колонку Items попадают данные из таблицы Item, по задумке у таблицы Item есть колонка value, значение которой может быть и строкой и массивом строк и объектом:
import { Column, DataType, Model, Table } from 'sequelize-typescript'
@Table({ tableName: 'item' })
export class Item extends Model<Item> {
@Column({ type: DataType.INTEGER, unique: true, autoIncrement: true, primaryKey: true })
id: number
@Column({ type: DataType.STRING})
title: string
//Колонка с несколькими типами данных
@Column({ type: DataType.??? })
value: string | string[] | ISomeData
}
Можно ли вообще так делать? А если можно, как это реализовать?
P.S. В основном я занимаюсь фронтом и данное серверное приложение разрабатываю исключительно в целях ознакомиться с технологией и для раздачи данных для демонстрационных приложений
Ответы (1 шт):
Если говорить про реляционные базы данных, то такая идея нарушает первую нормальную форму, так как 1NF требует:
- В таблице не должно быть дублирующихся строк;
- В каждой ячейке таблицы должно храниться атомарное значение (одно не составное значение);
- В столбце должны храниться данные одного типа;
- Не должно быть массивов и списков.