Найкращі практики щодо поширених полів (ім’я, електронна адреса, адреса, стать тощо) [закрито]


44

Які найпоширеніші найкращі практики щодо довжини та типу даних у загальних полях:

  • Ім'я
  • Прізвище
  • Адреса
  • Електронна пошта
  • Секс
  • Держава
  • Місто
  • Країна
  • Номер телефону

тощо.


Це питання є НАЙБІЛЬШИМ. Його слід очистити та видалити.
Еван Керролл

Відповіді:


50

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

  • Ім'я та прізвище: Чому ви захоплюєте ім'я? Якщо у вас є вимога ввести повне юридичне ім’я людини (тобто ви готуєте юридичні документи або свідоцтва про народження), ви, ймовірно, хочете дозволити людям більше місця для введення, ніж ви хочете, якщо ви просто запитуєте ім'я людини, щоб ви є що зателефонувати їм у вашому новому веб-додатку.
  • Адреса: Що ви збираєтеся робити з адресою? Яку адресу ви зберігаєте? Якщо ви зберігаєте адресу нерухомості в Сполучених Штатах, на якій створюєте іпотечний кредит, ви, ймовірно, дуже дбаєте про отримання повністю стандартизованої адреси, і в цьому випадку модель даних, ймовірно, захоче дуже уважно переглядати будь-яку вашу адресу інструмент стандартизації повертається. Якщо ви просто хочете, щоб люди могли набрати адресу, щоб доставити товар, певного рядка тексту для вільної форми, ймовірно, достатньо. Довжина рядків там може залежати від вимог нижчих процесів, які виконують такі дії, як мітки адрес друку.
  • Стан: Якщо припустити, що ви можете визначити дійсні значення стану, можливо, має сенс створити STATEтаблицю та створити зв'язок із зовнішнім ключем між таблицями STATEта ADDRESS. Але можливість ідентифікувати дійсні значення означає, що ви обмежуєте набір дійсних адрес принаймні певним набором країн. Це добре для багатьох сайтів, але тоді вам доведеться трохи попрацювати, щоб підтримати нову країну.
  • Місто: Якщо ви маєте справу з даними, де існують потенційно регульовані рівні на рівні міста (тобто там, де існують різні види податкових ставок, які застосовуються залежно від міста), ви, можливо, захочете ставитися до цього, як до держави, і мати CITYтаблиці з дійсними містами та зовнішньополітичним зв’язком між таблицями CITYта ADDRESS. З іншого боку, якщо ви просто намагаєтесь доставити товар і вам не надто хвилюється, чи є у вас різні версії того самого міста у вашій таблиці, дозволити користувачеві у вільній формі ввести текст достатньо. Звичайно, якщо ви зберігаєте сторонні ключі, вам доведеться виконати досить багато роботи, щоб переконатися, що у вас є всі дійсні значення. Але є продукти, де вся суть у тому, що компанія вже виконала цю роботу (тобто бази даних податку з продажу).
  • Телефон: Що ви робите з номерами телефонів і чому? Деякі програми захочуть приймати номери телефонів у будь-якому форматі, користувач вирішить ввести їх та зберегти це форматування для всіх наступних запитів. Це було б звичайно, якщо ви розробляєте особисту адресну книгу, де користувачі мають власні переваги щодо того, як зберігаються та відображаються телефонні номери. Інші програми хочуть ігнорувати введене форматування, витягувати лише цифрові символи, а потім відформатувати дані при пошуку, щоб усі телефонні номери мали однакове форматування. Якщо ви керуєте підприємствами, можливо, вам потрібно, щоб користувачі ввели розширення. Якщо ви намагаєтеся підтримати вихідний виклик, можливо, захочете зберегти код міста та код країни в окремих стовпцях, оскільки ви '
  • Стать: Для дуже багатьох застосувань цілком розумно зберігати гендерний код ('M' або 'F') у таблиці. З іншого боку, трапляються випадки, коли ви хочете отримати додаткові варіанти (Інше, Інтерсекс, Трансгендер) або де вам потрібно зберігати щось на зразок статі при народженні та поточної статі.

цікава відповідь з багатьма речами, про які варто подумати - але бракує будь-якої корисної ідеї, яка б допомогла людям просунутися далі ... наприклад, телефонна річ, є досить проста річ, яка охоплюватиме> = 80% випадків: число, яке ви можете ввести десь зателефонувати комусь по телефону, можливо, з додатком, що він повинен охоплювати й інші країни. так що так, є різниця в декількох символах, якщо ви вважаєте, що число може бути з / без префіксу країни, але, безумовно, є така річ, як найдовший номер телефону в світі, і використання цього плюс ще кілька інших є досить безпечним для більшості справи
Геннінг

24

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

Деякі примітки:

Адреси:

Імена:

Номер телефону: міжнародний код, довжина, мобільний та домовий, дозволити мобільному лише номер


3
Останні два посилання ("Прізвище перше" та "Що найдовше ...") розірвані.
Марк Л.

1
@MarcL. Я зафіксував посилання "Прізвище ім'я" (якщо моя редакція буде прийнята) Питання "Що найдовше ..." ТАК ​​запитання закрито як "неконструктивне" та видалено (ви все одно можете його бачити, якщо у вас є> 10k повторень).
сокира.

2
У Wayback Machine є стаття "Прізвище перше": web.archive.org/web/20160823135055/http://www.solidether.net/…
Av Pinzur

10

На додаток до чудових відповідей вище, не забудьте прийняти символи unicode. Тільки тому, що ви перебуваєте в США, не означає, що ви не хочете приймати іноземних символів у свої стовпці.

Однак, для імен я зазвичай рекомендую 50 символів. 320 має бути більш ніж достатньо для електронної адреси (ви можете перевірити стандарт ANSI). Для помилки адреси на стороні обережності з 255 символами. Хоча вам, мабуть, ніколи не потрібна така велика адреса, можливо, якщо ви включите рядки C / O та подібні речі. Місто має бути досить великим, там є деякі досить довгі назви міст. Для держави йдіть з дитячим столом, так само з країною. Для поштового індексу не забувайте про міжнародні поштові індекси, які довші за поштові індекси США. Просто тому, що ти не підтримуєш міжнародний, ти все ще можеш бути. Є багато громадян США, які живуть в різних округах, включаючи військових.

Не забувайте, що держава повинна бути необов'язковою, оскільки у багатьох країнах немає держав.


У своєму останньому проекті я знайшов документ про міжнародні поштові стандарти, який вказав 39 як максимальну довжину лінії. У Франції є окремий код для одержувачів великих обсягів, який йде за містом. Я б дозволив 3 або 4 поля вільного формату такого розміру плюс країна.
BillThor

9

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

Адреса електронної пошти:

хв: 6 (a@g.cn). Або 3, якщо ви хочете відстежувати адреси електронної пошти локального домену
максимум: 320 254 (RFC)

Кількість коду для підтвердження електронної пошти насправді божевільна, тому давайте припустимо, що він дійсний, якщо у нього є "@"

Ви можете абстрагувати адресу електронної пошти як "метод зв'язку", щоб ви могли легко перелічити всі способи спілкування з користувачем.

Стать

Стать може змінюватися з часом, тому ви можете відстежувати це, якщо це важливо для вас. Дотримуйтесь http://en.wikipedia.org/wiki/ISO/IEC_5218

NOT_KNOWN(0),
MALE(1),
FEMALE(2),
NOT_APPLICABLE(9);

Адреси: NORAM

Я візьму дешевий вихід і дотримуюся північноамериканських адрес.

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

GeographicArea :

id: int  
type: {country, division, county, city, indian reservation}  
name: varchar(45)  [1]
abbreviation: nullable varchar(4)  
parent_id: nullable int  

Адреса :

id: int  
postal_area_id: int, references GeographicArea  
county_or_city_id: int, references GeographicArea  
street_address: varchar(255)  
suite: nullable varchar(255)  

Додайте line2 та line3, якщо потрібно.

Дивіться http://en.wikipedia.org/wiki/Address_(geography)

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

PartyAddress

party_id: int references Party  
address_id: int references Address  
purpose: {home, work, ...}  

Додайте значення "" from_dateі "", що "відміняється", to_dateякщо відстежуватиметься протягом часу

Номер телефону

У учасника може бути кілька телефонних номерів, а номер телефону може використовуватися декількома людьми. Номер телефону може використовуватися для факсів, телефонних дзвінків, модемів тощо, а також може мати розширення. Вони також можуть змінюватися з часом.

Номер телефону

id: int  
value: varchar(15) - the max allowed by the ITU  

Мінімум може бути 3 (для "911"), або, можливо, 7 ("310-4NET", що є особливим місцевим номером, який не дозволяє набирати код міста)

Ви можете розділити це на код країни тощо за необхідності.

Ви повинні використовувати http://en.wikipedia.org/wiki/E.164 стандарт

PartyPhoneNumber

party_id: int references Party  
phone_number_id references PhoneNumber  
extension: nullable varchar(11) - ITU max  
purpose: {home, work, fax, modem, ...}  

Імена

Назви жорсткі. Ось чому:

  1. Деякі люди мають юридичну назву, у якій є лише одне слово http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Деякі люди мають імена з багатьма словами http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Деякі люди мають декілька імен одночасно (наприклад, в моєму університеті є багато азіатських студентів, але вони люблять використовувати "кращі" більш західні імена)

  4. Іноді вам потрібно відстежувати імена людей у ​​часі, наприклад, дівочі прізвища та подружні імена.

  5. Ви хочете абстрагувати людей та організації з різних вагомих причин

    створити партію таблиці (id bigserial первинний ключ);

    створити таблицю party_name (id bigserial первинний ключ, party_id bigint not null reference party (id), введіть smallint не null посилання party_name_type (id) --elided, ex "maiden", "legal");

    створити ім'я таблиці_компонента (id bigserial первинний ключ, party_name_id bigint не нульові посилання party_name (id), введіть smallint not null посилання name_component_type (id), --elided ex "заданий" текст імені не null);


3

З дещо іншого погляду, ніж попередні відповіді, і оскільки, здається, добре говорити про LDAP , RFC 4519 - "Легкий протокол доступу до каталогів (LDAP): схема для користувацьких додатків" може представляти інтерес.

Це може бути корисно, якщо вашу програму потрібно буде відобразити в такому каталозі. Інакше він, мабуть, не адаптований до ваших вимог.

Ці визначення більше стосуються не лише даних, але й деяких операторів, які можна використовувати в полях. postalAddress, наприклад, a caseIgnoreListSubstringsMatch. Я не пропоную суворо дотримуватися цієї схеми, але погляд на принципи може бути цікавим, зокрема, яким чином вам доведеться порівнювати ім’я та адреси у вашій програмі, можливо, це стосується дизайну вашої бази даних.


3

Щодо імен, подумайте про використання подвійних лапок, щоб вам не довелося уникати апостроф в ірландських чи італійських іменах (наприклад, О'Хара або Д'Амато).

Я також рекомендую отримати хороший набір регулярних виразів для використання, щоб ви могли виводити частини ваших іменних полів (наприклад, перший початковий, псевдонім, Jr / Sr тощо).


1
Або голландські імена, такі як моє прізвище.
Colin 't Hart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.