Построение таблиц «Один-к-разным»

Изображение rean1mator

Здравствуйте!
Пытаюсь создать себе базу для учета комп.техники. Для каждого типа техники (системники, мониторы, печатная техника и тд) создал отдельную таблицу (справочник), так как у каждого типа техники есть уникальные технические характеристики, по которым я хочу в дальнейшем искать технику. Например, нужно найти мониторы с диагональю 22дюйма, или найти системники с процессорами x64 или только х86.

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

Так же создал основную таблицу, в которую должны записываться единицы техники, поставленные на балланс предприятия. Получается, что основная таблица должна быть связана со всеми справочниками техники.

Итого, сейчас схема базы выглядит, примерно, так:
Справочники:

CREATE TABLE "references".monitors
(
  id serial NOT NULL, -- Автоинкрементный идентификатор. Проставляется автоматически при добавлении новой записи в таблицу.
  manufacturer_id integer NOT NULL, -- Идентификатор производителя. Является внешним ключом на поле id таблицы manufacturers. Обязательное поле.
  model_id integer NOT NULL, -- Идентификатор модели. Является внешним ключом на поле id таблицы models. Обязательное поле.
  size text, -- Размер дисплея (в дюймах). Необязательное поле.
  unit_img text,
  body_color text, -- Цвет корпуса. Необязательное поле
  decription text, -- Описание/уточнение (Любая дополнительная иформация). необязательное поле
)

CREATE TABLE "references".printing_technology
(
  id serial NOT NULL, -- Автоинкрементный идентификатор. Проставляется автоматически при добавлении новой записи в таблицу.
  manufacturer_id integer NOT NULL, -- Идентификатор производителя. Является внешним ключом на поле id таблицы manufacturers. Обязательное поле
  model_id integer NOT NULL, -- Идентификатор модели. Является внешним ключом на поле id таблицы models. Обязательное поле
  unit_img text,
  tech_type integer NOT NULL, -- Тип печатной техники. Является внешним ключом на поле id таблицы tech_type. Обязательное поле
  body_color text, -- Цвет корпуса. Необязательное поле
  description text, -- Описание/уточнение (любая дополнительная информация). Необязательное поле
)

И таких справочников много. Плюс, как видно из полей таблиц, есть ещё таблицы производителей и моделей, которые служат справочниками для справочников техники.

Простите за такое обилие текста. Столько всего в голове уже перелопатил, что уже каша просто. Вторую неделю бьюсь над этой базой, так как опыта работы с СУБД маловато ещё.

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

Заранее благодарю всех, кто откликнется.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

1. Так я и не понял, а в чем

1. Так я и не понял, а в чем собственно вопрос?
"как создать такую базу" - как-то звучит слишком "обще".
Руками создают или в редакторе баз данных.

2. Ужасный. Ужасный. УЖАСНЫЙ. ОТВРАТИТЕЛЬНЫЙ ПОДХОД!!!
Надо сделать так:
- Создать таблицу для экземпляра техники (тип техники, наименование);
- Создать таблицу типов техники: копир, ноутбук, стиралка;
- Создать таблицу типов характеристик: тактовая частота, разрешение экрана, скорость вращения.
- и через связывающую таблицу соединить её с типами техники.
- Создать таблицу, которая будет хранить все данные по характеристикам данного экземпляра техники.

Надеюсь, понятно

Ещё раз прошу прощения за

Изображение rean1mator

Ещё раз прошу прощения за некоторую запутанность в первом посте. Писал с работы и постоянно приходилось отвлекаться.

Суть вопроса была такова: есть таблицы-справочники для каждого типа техники (системники, мониторы, печатная техника и тд). Каждый справочник содержит, примерно, такие поля: id, manufacturer_id, model_id, и поля для тех.характеристик (в каждой таблице поля тех.характеристик свои).
Так же есть основная таблица со следующими полями:

Используйте данную ссылку, что бы развернуть или свернуть блок текста

CREATE TABLE main_table (
id integer NOT NULL,
tech_id integer NOT NULL,
tech_type_id integer NOT NULL,
inventory_num text NOT NULL,
serial_num text,
department_id integer NOT NULL,
user_id integer NOT NULL,
status integer NOT NULL,
repair_num integer DEFAULT 0 NOT NULL,
adoption_date date,
debit_date date,
inspect_act_num text,
firm_service_id integer NOT NULL,
description text
);

Поле tech_id должно содержать идентификаторы из справочников техники. Но тут проблемы:
1. Идентификаторы в каждом справочнике техники имеют тип данных serial и будут совпадать.
2. Насколько я понимаю, если от поля tech_id сделать внешние ключи на все справочники техники - ничего хорошего из этого не выйдет.

altair, спасибо большое за подсказку структуры таблиц! Обязательно попробую этот вариант

Воспользовавшись визуальным

Изображение rean1mator

Воспользовавшись визуальным проектировщиком БД, сделал следующим образом:

Таблицы:
- Типы техники (id, name);
- Производители (id, name);
- Модели (id, name);
- Тех.характеристики (id, name);

Связывающие таблицы:
- Производители по типам техники (id, tech_type_id, manufact_id);
- Модели по типам техники (id, tech_type_id, model_id);
- Тех.характеристики по типам техники (id, tech_type_id, characteristic_id).

Но теперь не могу понять, как делать таблицу-справочник техники и таблицу с текстами тех.характеристик. Какие поля должны быть (ну кроме поля с текстом тех.данных) и с какими таблицам связывать.

Дело в том, что я хочу сделать систем с жесткими привязками. Если в справочник записываем монитор, то пользователь не должен иметь возможности создать монитор с производителем от мышек и моделью от принтеров. Т.е. каждому типу техники должны совпадать определенные производители, модели и характеристики.

Через созданные связывающие таблицы я могу отбирать отдельно производителей, модели и характеристики техники, но как дальше быть с основным справочником техники и текстами характеристик, я понять не могу.

Доброго дня. Ну сделайте для

Изображение Игорь

Доброго дня. Ну сделайте для начала хоть что-то. Создайте таблицы. Создайте на php скрипты для добавления данных в справочники, для добавления техники, а там дальше видно будет.

Игорь, не хочу начинать

Изображение rean1mator

Игорь, не хочу начинать писать PHP, пока нет нормальной базы, под которую должна быть написана бизнес логика. Иначе придётся постоянно переписывать горы PHP из-за перестройки БД.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023