Задать вопрос
@qghoul666
Студент 4 курса. Back-end. Java. Spring.

Какие сущности использовать лучше для сохранения контактов в БД?

В моем пет-проекте на Java Spring я хочу дать возможность юзеру при регистрации указать контакты (они будут автоматически прикрепляться к объявлениям которые создаёт пользователь и будут видны всем). В качестве контактов юзер может указать phoneNumber и telegramUsername (в идеале оба), но может и что-то одно из пары phoneNumber, telegramUsername. Вопрос в том как хранить его контакты в БД.
1) Можно создать класс(таблицу) ContactInfo с полями phoneNumber, telegramUsername. Но в таком случае если юзер указывает один контакт, то мы получает пустое (null) поле, и как следствие не соответствие 3НФ.
2) Можно создать два класса(таблицы) phoneNumber и telegramUsername, которые будут связаны с классом User "0..1 к 1". Но это выглядит как костыль и возможно избыточное создание сущностей.
Какой из 2 подходов лучше?
Существуют ли какие-то другие подходы для таких ситуаций?
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Есть ещё третий путь:
И номер телефона и юзернейм - это обычные строки. Собственно любой другой контакт тоже будет строкой.
=> Можно сделать таблицу Contact с колонками:
contact_id, user_id, contact_type, contact_value

contact_type - енам

PS: так теоретический вопрос или практический?)
Ответ написан
@Dementor
программист, архитектор, аналитик
Это вопрос из теории нормальных форм РСУБД. С точки зрения, теории нужно максимально инкапсулировать данные по связям. С практической точки зрения, скорость работы будет тем выше чем меньше физических таблиц.

Но если не зацикливаться на РСУБД, то NoSQL-решения позволят сохранять и обрабатывать неоднородные структуры значительно эффективнее своих реляционных предков.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы