-- Простая миграция для создания таблицы city_objects -- Файл: migrations/create_city_objects_table_simple.sql -- Создание таблицы city_objects CREATE TABLE IF NOT EXISTS city_objects ( id SERIAL PRIMARY KEY, city_id INTEGER NOT NULL, name VARCHAR(255) NOT NULL DEFAULT '', model_url VARCHAR(500) NOT NULL, -- Позиция pos_x DECIMAL(15, 6) NOT NULL DEFAULT 0, pos_y DECIMAL(15, 6) NOT NULL DEFAULT 0, pos_z DECIMAL(15, 6) NOT NULL DEFAULT 0, -- Поворот (в радианах) rot_x DECIMAL(15, 6) NOT NULL DEFAULT 0, rot_y DECIMAL(15, 6) NOT NULL DEFAULT 0, rot_z DECIMAL(15, 6) NOT NULL DEFAULT 0, -- Масштаб scale_x DECIMAL(15, 6) NOT NULL DEFAULT 1, scale_y DECIMAL(15, 6) NOT NULL DEFAULT 1, scale_z DECIMAL(15, 6) NOT NULL DEFAULT 1, -- Дополнительные свойства organization_id INTEGER NOT NULL DEFAULT 2, rent DECIMAL(10, 2) NOT NULL DEFAULT 0, tax DECIMAL(10, 2) NOT NULL DEFAULT 0, collidable BOOLEAN NOT NULL DEFAULT false, interior_id INTEGER NOT NULL DEFAULT 101, textures VARCHAR(500) NOT NULL DEFAULT '-', -- Метаданные created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- Создание индексов для оптимизации запросов CREATE INDEX IF NOT EXISTS idx_city_objects_city_id ON city_objects(city_id); CREATE INDEX IF NOT EXISTS idx_city_objects_organization_id ON city_objects(organization_id); CREATE INDEX IF NOT EXISTS idx_city_objects_interior_id ON city_objects(interior_id); CREATE INDEX IF NOT EXISTS idx_city_objects_position ON city_objects(pos_x, pos_y, pos_z); CREATE INDEX IF NOT EXISTS idx_city_objects_collidable ON city_objects(collidable); -- Комментарии к таблице и колонкам COMMENT ON TABLE city_objects IS 'Таблица объектов городов'; COMMENT ON COLUMN city_objects.id IS 'Уникальный идентификатор объекта'; COMMENT ON COLUMN city_objects.city_id IS 'ID города, к которому принадлежит объект'; COMMENT ON COLUMN city_objects.name IS 'Название объекта'; COMMENT ON COLUMN city_objects.model_url IS 'URL модели объекта'; COMMENT ON COLUMN city_objects.pos_x IS 'X координата позиции'; COMMENT ON COLUMN city_objects.pos_y IS 'Y координата позиции'; COMMENT ON COLUMN city_objects.pos_z IS 'Z координата позиции'; COMMENT ON COLUMN city_objects.rot_x IS 'X компонент поворота (радианы)'; COMMENT ON COLUMN city_objects.rot_y IS 'Y компонент поворота (радианы)'; COMMENT ON COLUMN city_objects.rot_z IS 'Z компонент поворота (радианы)'; COMMENT ON COLUMN city_objects.scale_x IS 'X компонент масштаба'; COMMENT ON COLUMN city_objects.scale_y IS 'Y компонент масштаба'; COMMENT ON COLUMN city_objects.scale_z IS 'Z компонент масштаба'; COMMENT ON COLUMN city_objects.organization_id IS 'ID организации-владельца'; COMMENT ON COLUMN city_objects.rent IS 'Стоимость аренды'; COMMENT ON COLUMN city_objects.tax IS 'Налог'; COMMENT ON COLUMN city_objects.collidable IS 'Имеет ли объект коллизию'; COMMENT ON COLUMN city_objects.interior_id IS 'ID интерьера объекта'; COMMENT ON COLUMN city_objects.textures IS 'Информация о текстурах'; COMMENT ON COLUMN city_objects.created_at IS 'Время создания записи'; COMMENT ON COLUMN city_objects.updated_at IS 'Время последнего обновления записи';