Praktik terbaik di bidang orang umum (Nama, email, alamat, jenis kelamin dll ...) [ditutup]


Jawaban:


50

Saya cenderung sangat curiga terhadap serangkaian praktik terbaik universal karena, untuk sebagian besar bidang ini, iblis ada dalam rinciannya. Hanya karena informasinya relatif umum tidak berarti aplikasi Anda menggunakan data dengan cara yang persis sama dengan aplikasi lain yang menggunakannya. Itu berarti model data Anda mungkin harus sedikit berbeda.

  • Nama depan & belakang: Mengapa Anda menangkap nama itu? Jika Anda memiliki persyaratan untuk mendapatkan nama lengkap seseorang (mis. Anda sedang menyiapkan dokumen hukum atau akta kelahiran), Anda mungkin ingin memberi lebih banyak ruang bagi orang untuk mengetik daripada jika Anda hanya meminta nama seseorang sehingga Anda punya sesuatu untuk memanggil mereka di aplikasi web baru Anda.
  • Alamat: Apa yang akan Anda lakukan dengan alamat itu? Alamat apa yang Anda simpan? Jika Anda menyimpan alamat properti di Amerika Serikat tempat Anda membuat hipotek, Anda mungkin sangat peduli untuk mendapatkan alamat yang terstandarisasi penuh dalam hal ini model data yang mungkin ingin dipetakan sangat dekat dengan alamat Anda apa pun pengembalian alat standardisasi. Jika Anda hanya ingin orang dapat mengetikkan alamat untuk mengirimkan produk, beberapa baris untuk teks bentuk bebas mungkin cukup. Panjang garis di sana mungkin tergantung pada persyaratan proses hilir yang melakukan hal-hal seperti label alamat cetak.
  • Status: Dengan asumsi Anda dapat mengidentifikasi nilai status yang valid, mungkin masuk akal untuk membuat STATEtabel dan membuat hubungan kunci asing antara STATEdan ADDRESStabel. Tetapi kemampuan untuk mengidentifikasi nilai-nilai yang valid menyiratkan bahwa Anda membatasi sekumpulan alamat yang valid setidaknya untuk satu set negara tertentu. Itu bagus untuk banyak situs, tetapi kemudian Anda harus melakukan sedikit pekerjaan untuk mendukung negara baru.
  • Kota: Jika Anda berurusan dengan data di mana ada peraturan tingkat kota yang potensial ada (yaitu di mana ada berbagai jenis tarif pajak yang diterapkan berdasarkan kota), Anda mungkin ingin memperlakukannya seperti negara dan memiliki CITYtabel dengan kota yang valid dan hubungan kunci asing antara CITYdan ADDRESStabel. Di sisi lain, jika Anda hanya mencoba untuk mendapatkan produk yang dikirim dan Anda tidak terlalu peduli jika Anda memiliki berbagai versi dari kota yang sama di meja Anda, membiarkan pengguna memasukkan bentuk bebas teks sudah cukup. Tentu saja, jika Anda menyimpan kunci asing, Anda akan memiliki cukup banyak pekerjaan untuk memastikan bahwa Anda memiliki semua nilai yang valid. Tetapi ada produk di mana intinya adalah bahwa perusahaan telah melakukan pekerjaan itu (yaitu database pajak penjualan).
  • Telepon: Apa yang Anda lakukan dengan nomor telepon dan mengapa? Beberapa aplikasi akan ingin memasukkan nomor telepon dalam format apa pun yang diputuskan pengguna untuk memasukkannya dan mempertahankan format itu untuk semua kueri berikutnya. Ini akan menjadi umum jika Anda merancang buku alamat pribadi di mana pengguna memiliki preferensi mereka sendiri untuk bagaimana nomor telepon disimpan dan ditampilkan. Aplikasi lain ingin mengabaikan pemformatan yang dimasukkan, mengekstrak hanya karakter numerik, dan kemudian memformat data pada pengambilan sehingga semua nomor telepon memiliki pemformatan yang sama. Jika Anda melayani bisnis, Anda mungkin ingin bidang terpisah bagi pengguna untuk memasukkan ekstensi. Jika Anda mencoba untuk mendukung proses panggilan keluar, Anda mungkin ingin menyimpan kode area dan kode negara dalam kolom terpisah karena Anda
  • Gender: Untuk banyak aplikasi hebat, sangat masuk akal untuk menyimpan kode gender ('M' atau 'F') dalam sebuah tabel. Di sisi lain, ada beberapa kasus di mana Anda mungkin menginginkan opsi tambahan (Lainnya, Interseks, Transgender) atau di mana Anda perlu menyimpan sesuatu seperti jenis kelamin saat lahir dan jenis kelamin saat ini.

jawaban menarik dengan banyak hal untuk dipikirkan - tetapi tidak memiliki ide yang berguna untuk membantu orang lebih jauh ... misalnya hal telepon ada hal yang cukup sederhana yang akan mencakup> = 80% kasus: jumlah yang dapat Anda ketik suatu tempat untuk menjangkau seseorang di telepon, mungkin dengan tambahan bahwa itu harus mencakup negara lain juga. jadi ya, ada perbedaan dari beberapa karakter jika Anda mempertimbangkan angka bisa dengan / tanpa awalan negara, tetapi ada defintely adalah hal seperti nomor telepon terpanjang di dunia dan menggunakan ini ditambah beberapa cukup aman untuk kebanyakan kasus
Henning

24

Anda mungkin juga menebak berdasarkan data sampel dan pemirsa yang diharapkan. Itu tergantung pada lokasi Anda.

Beberapa catatan:

Alamat:

Nama:

Nomor telepon: Kode internasional, panjang, seluler vs rumah, bolehkan hanya seluler sebagai nomor


3
Dua tautan terakhir ("Nama Belakang Pertama" dan "Apa yang terpanjang ...") terputus.
Marc L.

1
@MarcL. Saya memperbaiki tautan "Nama Belakang Pertama" (jika hasil edit saya diterima). "Apa yang terlama ..." SO pertanyaan telah ditutup sebagai "tidak konstruktif" dan dihapus (Anda masih dapat melihatnya jika Anda memiliki> 10rb rep).
kapak.

2
Wayback Machine memiliki artikel "Nama Belakang Pertama": web.archive.org/web/20160823135055/http://www.solidether.net/…
Av Pinzur

10

Selain jawaban hebat di atas, jangan lupa untuk menerima karakter unikode. Hanya karena Anda berada di AS tidak berarti Anda tidak ingin menerima karakter asing ke dalam kolom Anda.

Yang mengatakan, saya biasanya merekomendasikan 50 karakter untuk nama. 320 harus lebih dari cukup untuk alamat email (Anda dapat memeriksa standar ANSI untuk memastikan). Untuk kesalahan alamat di sisi hati-hati dengan 255 karakter. Meskipun Anda mungkin tidak akan pernah membutuhkan alamat sebesar itu, Anda mungkin bisa jika Anda menyertakan garis C / O dan hal-hal seperti itu. Kota harus cukup besar, ada beberapa nama kota yang cukup panjang di luar sana. Untuk negara pergi dengan tabel anak, sama dengan negara. Untuk kode pos jangan lupa tentang kode pos internasional yang lebih panjang dari kode pos AS. Hanya karena Anda tidak mendukung internasional, Anda masih mungkin. Ada banyak warga AS yang tinggal di berbagai negara termasuk orang-orang militer.

Jangan lupa bahwa negara harus opsional karena banyak negara tidak memiliki negara.


Pada proyek terakhir saya, saya menemukan dokumen tentang standar pos internasional yang mengindikasikan 39 sebagai panjang garis maksimum. Prancis memiliki kode terpisah untuk penerima volume besar yang mengincar kota. Saya akan mengizinkan 3 atau 4 bidang format gratis ukuran ini plus negara.
BillThor

9

Pantat saya semakin sakit karena duduk di pagar, jadi saya akan hanya membuang beberapa jawaban dan berharap untuk tidak turun ke pemungutan suara terlupakan. Tolong tawarkan kritik yang membangun.

Alamat email:

min: 6 (a@g.cn). Atau 3 jika Anda ingin melacak alamat email domain lokal
maks: 320 254 (RFC)

Jumlah kode untuk memvalidasi email sebenarnya gila, jadi anggap saja valid jika memiliki "@"

Anda mungkin ingin mengabstraksi alamat email sebagai "metode komunikasi", sehingga Anda dapat dengan mudah mendaftar semua metode yang digunakan untuk berkomunikasi dengan pengguna.

Jenis kelamin

Jenis kelamin dapat berubah seiring waktu, sehingga Anda dapat melacaknya jika penting bagi Anda. Ikuti http://en.wikipedia.org/wiki/ISO/IEC_5218

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

Alamat: NORAM

Saya akan mengambil jalan keluar murah dan tetap berpegang pada alamat Amerika Utara.

Lebih mudah bagi negara-negara abstrak, divisi, kota, dan kabupaten sebagian besar karena perpajakan. Pajak dapat diterapkan di banyak tingkatan, jadi jika Anda dapat menunjukkan tarif pajak pada wilayah geografis yang abstrak, Anda adalah emas.

GeographicArea :

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

Alamat :

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

Tambahkan line2, dan line3 jika perlu.

Lihat http://en.wikipedia.org/wiki/Address_(geography)

Sekarang, alamat adalah alamat. Banyak orang dapat hidup di suatu alamat, dan seseorang dapat memiliki banyak alamat pada saat yang sama, dan seiring waktu, sehingga Anda memerlukan banyak-banyak tabel untuk itu.

Alamat Pesta

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

Tambahkan a from_datedan nullable to_datejika melacak dari waktu ke waktu.

Nomor telepon

Suatu pihak dapat memiliki beberapa nomor telepon, dan nomor telepon dapat digunakan oleh banyak orang. Nomor telepon dapat digunakan untuk faks, panggilan telepon, modem, dll. Dan dapat memiliki ekstensi. Ini semua bisa berubah seiring waktu juga.

Nomor telepon

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

Min mungkin 3 (untuk "911"), atau mungkin 7 ("310-4NET", yang merupakan jenis khusus nomor lokal yang tidak memungkinkan Anda untuk memutar kode area)

Anda dapat membagi ini menjadi kode negara, dll jika perlu.

Anda harus menggunakan standar http://en.wikipedia.org/wiki/E.164

Nomor Pesta

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

Nama

Nama itu sulit. Inilah alasannya:

  1. Beberapa orang memiliki nama resmi dengan hanya satu kata di dalamnya http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Beberapa orang memiliki nama dengan banyak kata http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Beberapa orang memiliki banyak nama pada saat yang sama (misalnya, di universitas saya ada banyak siswa Asia, tetapi mereka suka menggunakan "lebih disukai" nama yang lebih kebarat-baratan)

  4. Terkadang, Anda perlu melacak nama orang dari waktu ke waktu, seperti nama gadis dan nama pernikahan.

  5. Anda ingin mengabstraksikan individu dan organisasi untuk berbagai alasan yang bagus

    membuat tabel pesta (id kunci utama server);

    membuat tabel party_name (id kunci primer bigserial, party_id bigint bukan null referensi pihak (id), ketik smallint bukan null referensi party_name_type (id) --elided, ex "maiden", "legal");

    buat tabel name_component (id kunci primer bigserial, party_name_id bigint bukan null referensi party_name (id), ketik smallint bukan null reference name_component_type (id), --elided ex "diberi" nama teks bukan null);


3

Dari perspektif yang sedikit berbeda dari jawaban sebelumnya, dan karena sepertinya OK untuk berbicara tentang LDAP , RFC 4519 - "Protokol Akses Direktori Ringan (LDAP): Skema untuk Aplikasi Pengguna" mungkin menarik.

Mungkin bermanfaat jika aplikasi Anda perlu dipetakan ke direktori tersebut. Kalau tidak, itu mungkin tidak disesuaikan dengan kebutuhan Anda.

Definisi-definisi ini lebih dari sekedar tentang data, mereka juga tentang beberapa operator yang dapat digunakan di lapangan. postalAddress, misalnya adalah a caseIgnoreListSubstringsMatch. Saya tidak menyarankan Anda untuk mematuhi skema ini dengan ketat, tetapi melihat prinsip-prinsipnya bisa menarik, khususnya bagaimana Anda harus membandingkan nama dan alamat dalam aplikasi Anda mungkin relevan dengan desain database Anda.


3

Mengenai nama, pertimbangkan untuk menggunakan tanda kutip ganda sehingga Anda tidak perlu melarikan diri dari tanda kutip dalam nama Irlandia atau Italia (misalnya, O'Hara atau D'Amato).

Saya juga merekomendasikan untuk menggunakan serangkaian Ekspresi Reguler yang baik untuk digunakan, sehingga Anda dapat menampilkan bagian bidang nama Anda (misalnya, inisial pertama, nama panggilan, Jr / Sr, dll.).


1
Atau nama Belanda seperti nama keluarga saya.
Colin 't Hart
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.