Сохранение дополнительных полей в соответствии со значением в другом поле

Я пытаюсь создать базу данных для хранения информации о записях биологических сигналов. Каждая запись использует датчик, и если запись использует датчик силы, необходима дополнительная информация, чтобы знать, к какому каналу подключены положительный и отрицательный выводы датчика. Для других типов датчиков дополнительная информация не требуется.

Я новичок в SQL, и моей первой попыткой было создать таблицу записей, таблицу типов датчиков и таблицу сигналов силы. Для каждой записи я использую FK, чтобы указать тип датчика, и, если датчик является датчиком силы, я добавляю строку в таблицу force_signal, содержащую дополнительную информацию, и FK, ссылающийся на PK записи.

record:
    record_id (PK)
    record_name
    sensor_type_id (FK)
    ... [other fields describing the record]
sensor_type:
    sensor_type_id (PK)
    sensor_name
    ... [additional informations of the sensor type]
force_info:
    force_info_id (PK)
    record_id (FK)
    channel_positive
    channel_negative

Таким образом, возможно, например, иметь запись с использованием датчика силы без соответствующей строки force_info (и тогда я задаюсь вопросом «Как реализовать реальное взаимно-однозначное отношение?»). Есть ли лучшая структура, чтобы удовлетворить мои требования и избежать проблемы один на один?

Вместо FK в force_info, ссылающегося на PK записи, я также подумал об использовании FK в таблице записи, ссылающейся на PK force_info с условием NOT NULL, только если sensor_type_id соответствует датчику силы. Для меня это лучше, потому что он гарантирует, что каждая запись, использующая датчик силы, имеет связанную строку в таблице force_info. Но тогда у меня могут быть строки force_info, не связанные ни с одной записью (например, если я удалю запись, в которой используется датчик силы). Это не большая проблема, потому что эти строки force_info без связанной записи будут похожи на призрак в моей базе данных, не вызывая проблем с целостностью данных, но я не думаю, что иметь эти призраки - хорошая практика.

Лучше удалить данные из таблицы force_info, когда они больше не нужны. Это может быть достигнуто автоматически с помощью TRIGGER при DELETE в записи таблицы.

Ptit Xav 31.03.2021 18:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
1
19
0

Другие вопросы по теме