@SpaceJesus
Web Программист

Какой из способов организации хранения адресов и данных паспорта выбрать?

Доброго времени суток, уважаемые пользователи.
Возник вопрос, как организовать хранение адресов и паспортных пользователей в БД.
На данный момент, адреса хранятся в виде массива и пишутся в json поле в базе данных все сразу
addresses: {
                        isAddressSimilar: false, //Адрес регистрации совпадает с адресом проживания
                        isAddressPlaceOfStay: false, //Адрес регистрации совпадает с адресом регистрации по месту пребывания
                        registration: {//Адрес регистрации
                            area: null,
                            city: null,
                            index: null,
                            region: null,
                            street: null,
                            housing: null,
                            settlement: null,
                            house_number: null,
                            apartment_number: null
                        },
                        residential: {//Адрес проживания
                            area: null,
                            city: null,
                            index: null,
                            region: null,
                            street: null,
                            housing: null,
                            settlement: null,
                            house_number: null,
                            apartment_number: null
                        },
                        place_of_stay: {//Адрес регистрации по месту пребывания
                            area: null,
                            city: null,
                            index: null,
                            region: null,
                            street: null,
                            housing: null,
                            settlement: null,
                            house_number: null,
                            apartment_number: null
                        },
                    },

С данными паспорта такая же история
passport: {
                        nationality: 'russia',
                        documentType: 'RfPassport',
                        series: null,
                        number: null,
                        issuanceDate: DateTime.local().toISODate(),
                        subdivisionCode: null,
                        issued: null,
                        birthPlace: null,
                    },


Вопрос, правильно ли будет хранить данные в виде json массива в таблице пользователей или имеет смысл заводить отдельные таблицы, где каждое поле, это отдельное поле из массива и через связи подтягивать данные?

Заранее спасибо
  • Вопрос задан
  • 2183 просмотра
Решения вопроса 1
cesnokov
@cesnokov
<head>&nbsp;</head>
Вероятнее всего, что вид хранения полностью зависит от нескольких факторов:
  • Количество и структура информации влияет на выбор типа базы данных (реляционной или нереляционной). В вашем случае (json массив и миллион паспортов) = надо смотреть в сторону NoSQL и хранить всё одним блоком (коллекцией) ради мифической скорости. Но ведь больше не будет ветвиться структура и не появятся новые зависимости, количество полей известно и очень легко и красиво делиться на таблички.
  • Паспортные данные = личная информация = надо её защищать, любить и лелеять. GDPR дойдёт и до вас, не сомневайтесь. И тогда: разборки, анальные досмотры, суды, штрафы и т.д. И когда вашу базу кто-то стащит он не должен получить всю информацию в явном виде, т.е. такие данные должны храниться частями в разных местах: имена отдельно, адреса отдельно, мухи отдельно. Снова смотрим в сторону табличек, параллельно раскладывая данные разных таблиц на разных серверах и в разных ЦОД'ах.
  • Кто заказчик? Вы делаете это для себя? Для турагентства? Для ФСБ? Для себя - вообще неважно, что, как и где хранить, главное чтоб вам было интересно код писать. Для турагентства - скоро им запретят хранить такую информацию и вам дадут заказ всё переделать по новым законам/правилам/СНиП'ам. А вот ФСБ сами скажут (или ночью подправят ваш код) какая структура данных должна быть и как её хранить по ГОСТ'у.

По моему мнению, с учётом вышеизложенного, информацию такого типа надо дробить на мелкие кусочки и складывать в отдельные таблички. И пускай меня засмеют проповедники обречённости реляционных моделей - я упёртый консерватор.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Павел Чесноков дело говорит, а по сути:
- User hasOne Passport / Passport belongsTo User (связь OneToOne)
С адресами чуток сложнее, тут я бы сами адреса хранил отдельно через связь OneToMany, с дополнительным свойством type. А вот isAddressSimilar и isAddressPlaceOfStay - либо флагами в User, либо вообще динамическим свойством - например если записи адреса с типом place_of_stay не существует, то юзаем дефолтный (registration) или просто возвращаем false. Ибо хранить записи где все колонки кроме PK null это не ок.
Ответ написан
Ваш ответ на вопрос

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

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