1 Востаннє редагувалося HetmanNet (04.01.2015 18:19:56)

Тема: [MariaDB] Як краще зберігати телефонні номери?

Як краще зберігати номери телефонів у БД?
Окремо код країни, міста/оператора та номер? Чи все разом? Чи ще як?
Загалом треба зберігати номери телефонів з можливістю ідентифікувати країну і оператора, а для стаціонарних номерів також населений пункт. Проблема у тому, що малі населені пункти чи села як раз ідентифікувати важче, бо є код району а потім одна чи дві цифри коду села і чотири чи три самого номеру.  У кого які пропозиції?

P.S. MariaDB це форк від MySQL

2

Re: [MariaDB] Як краще зберігати телефонні номери?

Проженіть тести. Спробуйте і так і так. Напишіть тест на навантаження яке у вас планується і вперед ;)

3

Re: [MariaDB] Як краще зберігати телефонні номери?

Давайте поміркуємо.

Структура номера має наступний вигляд:

+ 00[0] 111[1] 222222[2] (у квадратних дужках - опціональні).
Плюс опускаємо.
Код країни може бути дво- чи трьохзначним (якщо база допускає міжнародні номери).
Код району може бути 3-4-значним.
Власне номер може бути 6-7 значним.

Якщо зберігати весь номер у вигляді великого числа - жодних шансів його розпарсити.
Якщо використати текстовий формат + сепаратори - постійна робота з текстом, що є, загалом, повільною операцією.
Якщо розкидати ці шматки номерів по різних таблицях - матимемо не дуже гарну, проте більш адекватну структуру бази. До прикладу:

Countries
  ID (PK)       |   Name
----------------|----------
  380            |   Ukraine

Regions
  Number      |  CountryID     |  Name   |  ID (PK)
----------------|-----------------|----------|-------
  57              |  380              | Kharkiv | 1
  572            |  380              | Izum     | 2
UNIQUE (Number, CountryID)
FOREIGN KEY (CountryID)       

Numbers
  ID              |  RegionID       |  Name
----------------|------------------|---------------
  2212233      |  1                 |  Ivanov A.A.
  234564        |  2                 |  Petrov v.v.
  
PRIMARY KEY(ID, RegionID)
FOREIGN KEY(RegionID)

Ну й індекси правильно розставити, щоб швидко-хутко було. :)

4

Re: [MariaDB] Як краще зберігати телефонні номери?

Наскількия розумію на вхід попадають номери різних типів від +3806800000 до 457-18-49
Як варіант можна розібрати номер і якщо визначили всі його дані (код країни, регіон) - шукаємо по одні таблиці
якщо ні - по іншій )

5

Re: [MariaDB] Як краще зберігати телефонні номери?

funivan написав:

Наскількия розумію на вхід попадають номери різних типів від +3806800000 до 457-18-49
Як варіант можна розібрати номер і якщо визначили всі його дані (код країни, регіон) - шукаємо по одні таблиці
якщо ні - по іншій )

Якщо номер подано без регіональної належності - гадаю, UI має забезпечити дефолтну підстановку відповідних значень. Скажімо,  457-18-49, скоріш за все, український (себто +380), оскільки прога налаштована на Україну. Ознака регіону має визначатися на сайті методами інтерфейсу, бо інакше цей номер не матиме жодного сенсу: чисто теоретично може трапитися наявність двох однакових номерів у двох регіонах.

6

Re: [MariaDB] Як краще зберігати телефонні номери?

В головній таблиці номер розкидати по полям, причому кількість полів повинна дорівнювати максимально-можливій кількості різних частин для одного номера.

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

7

Re: [MariaDB] Як краще зберігати телефонні номери?

Задам своє питання в  контексті цієі теми.
- Якщо необхідно внести велику кількість даних в Базу Даних, скажімо, ті ж самі коди міст, чи коди операторів, краін, етс, - то яким чином це зручно виконувати?
  Можливий такий варіант, вдома в Ворд Ексель вніс всі значення, а потім перегнав дані в Базу MySQL,  чи цетак і робиться?

8

Re: [MariaDB] Як краще зберігати телефонні номери?

@Анатолій

Як правило, дані стараються додавати автоматизовано. Звісно, не завжди це можливо. Але якщо робити ручні вставки - краще мати для цього інтерфейс, який працюватиме напряму з базою, оскільки будь-які конвертації - гарантований геморой.

9

Re: [MariaDB] Як краще зберігати телефонні номери?

Анатолій написав:

- Якщо необхідно внести велику кількість даних в Базу Даних, скажімо, ті ж самі коди міст, чи коди операторів, краін, етс, - то яким чином це зручно виконувати?
  Можливий такий варіант, вдома в Ворд Ексель вніс всі значення, а потім перегнав дані в Базу MySQL,  чи цетак і робиться?

Зрозуміло, що це залежить від джерела номерів. Якщо джерелом є, наприклад, XML, то потрібно парсити саме XML...

10

Re: [MariaDB] Як краще зберігати телефонні номери?

Bartash написав:

@Анатолій

Як правило, дані стараються додавати автоматизовано. Звісно, не завжди це можливо. Але якщо робити ручні вставки - краще мати для цього інтерфейс, який працюватиме напряму з базою, оскільки будь-які конвертації - гарантований геморой.

І які, для зразка, інтерфейси можуть бути? Якими Ви користуєтесь?

11

Re: [MariaDB] Як краще зберігати телефонні номери?

Анатолій написав:
Bartash написав:

@Анатолій

Як правило, дані стараються додавати автоматизовано. Звісно, не завжди це можливо. Але якщо робити ручні вставки - краще мати для цього інтерфейс, який працюватиме напряму з базою, оскільки будь-які конвертації - гарантований геморой.

І які, для зразка, інтерфейси можуть бути? Якими Ви користуєтесь?


То вже залежить, звідки ви дані братимете. :) Якщо це - якісь файли, які треба парсити, - можна накидати самому конвертер-скрипт. Якщо дані лежать в іншій базі - можна бекап-рестором або дампом підняти потрібні дані. А якщо вводити вручну - може бути як веб, так і десктоп-інтерфейс. :)

12

Re: [MariaDB] Як краще зберігати телефонні номери?

Гаразд дякую, буду тоді розбиратись по ходу справи, наразі мій рівень закидати дані в Базу це:
1. створити веб-сайт, форма для даних
2. Phpmyadmin

13

Re: [MariaDB] Як краще зберігати телефонні номери?

Анатолій написав:

Гаразд дякую, буду тоді розбиратись по ходу справи, наразі мій рівень закидати дані в Базу це:
1. створити веб-сайт, форма для даних
2. Phpmyadmin

Для ручного введення даних вистачить.
Коли даних буде більше-ніж-терпіння-для-ручного-занесення - створите тему на форумі. :)

14

Re: [MariaDB] Як краще зберігати телефонні номери?

Bartash написав:
Анатолій написав:

Гаразд дякую, буду тоді розбиратись по ходу справи, наразі мій рівень закидати дані в Базу це:
1. створити веб-сайт, форма для даних
2. Phpmyadmin

Для ручного введення даних вистачить.
Коли даних буде більше-ніж-терпіння-для-ручного-занесення - створите тему на форумі. :)

Хотілось би мати знання на випередки, мати готові інструменти, до того як в мене закінчиться терпіння :)
Ну та гаразд це не критично, подивлюсь, поки буду розглядати своі теми, а там може де натраплю на потрібну мені інформацію, і так по чуть чуть зберу всю колекцію пазлів.