Thực tiễn tốt nhất trên các lĩnh vực người thường (Tên, email, địa chỉ, giới tính, vv) [đã đóng]


44

Các thực tiễn tốt nhất phổ biến nhất về độ dài và loại dữ liệu trên các trường phổ biến như:

  • Tên đầu tiên
  • Họ
  • Địa chỉ nhà
  • E-mail
  • Giới tính
  • Tiểu bang
  • Thành phố
  • Quốc gia
  • Số điện thoại

Vân vân....


Câu hỏi này là CÁCH rộng. Nó nên được thanh trừng và xóa.
Evan Carroll

Câu trả lời:


50

Tôi có xu hướng rất nghi ngờ về bất kỳ tập hợp thực hành tốt nhất phổ quát nào bởi vì, đối với hầu hết các lĩnh vực này, ma quỷ nằm trong các chi tiết. Chỉ vì thông tin tương đối phổ biến không có nghĩa là ứng dụng của bạn sử dụng dữ liệu theo cách chính xác giống như các ứng dụng khác sử dụng. Điều đó có nghĩa là mô hình dữ liệu của bạn có thể cần phải hơi khác nhau.

  • Tên và họ: Tại sao bạn bắt được tên? Nếu bạn có yêu cầu bắt tên đầy đủ hợp pháp của một người (ví dụ: bạn đang chuẩn bị giấy tờ pháp lý hoặc giấy khai sinh), bạn có thể muốn cho phép nhiều không gian hơn để mọi người nhập hơn nếu bạn chỉ hỏi tên của một người để bạn có một cái gì đó để gọi chúng trong ứng dụng web mới của bạn.
  • Địa chỉ: Bạn sẽ làm gì với địa chỉ? Những loại địa chỉ bạn đang lưu trữ? Nếu bạn đang lưu trữ địa chỉ của một tài sản ở Hoa Kỳ mà bạn đang tạo thế chấp, bạn có thể quan tâm rất nhiều đến việc có được một địa chỉ được chuẩn hóa hoàn toàn trong trường hợp mô hình dữ liệu có thể sẽ muốn chặt chẽ với bất kỳ địa chỉ nào của bạn công cụ tiêu chuẩn hóa trả về. Nếu bạn chỉ muốn mọi người có thể nhập địa chỉ để phân phối sản phẩm, một vài dòng cho văn bản dạng tự do có lẽ là đủ. Độ dài của các dòng ở đó có thể phụ thuộc vào yêu cầu của các quy trình xuôi dòng làm những việc như nhãn địa chỉ in.
  • Trạng thái: Giả sử bạn có thể xác định các giá trị trạng thái hợp lệ, có thể có ý nghĩa khi tạo STATEbảng và tạo mối quan hệ khóa ngoài giữa bảng STATEADDRESSbảng. Nhưng khả năng xác định các giá trị hợp lệ ngụ ý rằng bạn giới hạn nhóm địa chỉ hợp lệ ít nhất là ở một quốc gia cụ thể. Điều đó tốt cho nhiều trang web nhưng sau đó bạn phải làm một chút công việc để hỗ trợ một quốc gia mới.
  • Thành phố: Nếu bạn đang xử lý dữ liệu có các quy định cấp thành phố tiềm năng (nghĩa là có các loại thuế suất khác nhau được áp dụng dựa trên thành phố), bạn có thể muốn đối xử với nó giống như tiểu bang và có CITYbảng với các thành phố hợp lệ và mối quan hệ khóa ngoài giữa các bảng CITYADDRESS. Mặt khác, nếu bạn chỉ đang cố gắng giao sản phẩm và bạn không quan tâm nhiều nếu bạn có nhiều phiên bản khác nhau của cùng một thành phố trong bảng của mình, hãy để người dùng nhập văn bản dưới dạng tự do là đủ. Tất nhiên, nếu bạn đang lưu trữ khóa ngoại, bạn sẽ có một khối lượng công việc hợp lý để đảm bảo rằng bạn có tất cả các giá trị hợp lệ. Nhưng có những sản phẩm mà toàn bộ vấn đề là công ty đã thực hiện công việc đó (tức là cơ sở dữ liệu thuế bán hàng).
  • Điện thoại: Bạn đang làm gì với số điện thoại và tại sao? Một số ứng dụng sẽ muốn nhận số điện thoại ở bất kỳ định dạng nào mà người dùng quyết định nhập chúng và giữ nguyên định dạng đó cho tất cả các truy vấn tiếp theo. Điều này sẽ phổ biến nếu bạn đang thiết kế sổ địa chỉ cá nhân nơi người dùng có sở thích riêng về cách lưu trữ và hiển thị số điện thoại. Các ứng dụng khác muốn bỏ qua định dạng được nhập, chỉ trích xuất các ký tự số và sau đó định dạng dữ liệu khi truy xuất để tất cả các số điện thoại có định dạng tương tự. Nếu bạn đang phục vụ cho các doanh nghiệp, bạn có thể muốn một trường riêng để người dùng nhập tiện ích mở rộng. Nếu bạn đang cố gắng hỗ trợ quy trình gọi đi, bạn có thể muốn lưu trữ mã vùng và mã quốc gia trong các cột riêng biệt vì bạn '
  • Giới tính: Đối với nhiều ứng dụng tuyệt vời, việc lưu trữ mã giới tính ('M' hoặc 'F') trong một bảng là hoàn toàn hợp lý. Mặt khác, có những trường hợp bạn có thể muốn có thêm tùy chọn (Khác, Intersex, Chuyển giới) hoặc nơi bạn cần lưu trữ một cái gì đó như giới tính khi sinh và giới tính hiện tại.

câu trả lời thú vị với rất nhiều điều cần suy nghĩ - nhưng thiếu bất kỳ ý tưởng hữu ích nào để giúp mọi người tiến xa hơn ... ví dụ như điều trên điện thoại có một điều khá đơn giản sẽ bao gồm> = 80% trường hợp: số bạn có thể nhập một nơi nào đó để liên lạc với ai đó trên điện thoại, có thể với sự bổ sung rằng nó cũng sẽ bao gồm các quốc gia khác. vì vậy, có một sự khác biệt của một vài ký tự nếu bạn xem xét một số có thể có / không có tiền tố quốc gia, nhưng chắc chắn một số như số điện thoại dài nhất trên thế giới và sử dụng số này nhiều hơn là khá an toàn cho hầu hết trường hợp
Henning

24

Bạn cũng có thể đoán dựa trên dữ liệu mẫu và đối tượng dự kiến. Nó phụ thuộc vào vị trí của bạn.

Một số lưu ý:

Địa chỉ:

Tên:

Số điện thoại: Mã quốc tế, chiều dài, di động so với nhà, cho phép điện thoại di động chỉ là số


3
Hai liên kết cuối cùng ("Tên họ đầu tiên" và "Cái gì dài nhất ...") đã bị hỏng.
Marc L.

1
@MarcL. Tôi đã sửa liên kết "Tên cuối cùng" (nếu chỉnh sửa của tôi được chấp nhận). Các câu hỏi SO "dài nhất ..." đã bị đóng là "không mang tính xây dựng" và bị xóa (bạn vẫn có thể xem nó nếu bạn có> 10k rep).
rìu.

2
Wayback Machine có "Last Name đầu tiên" Bài chi tiết: web.archive.org/web/20160823135055/http://www.solidether.net/...
Av Pinzur

10

Ngoài các câu trả lời tuyệt vời ở trên, đừng quên chấp nhận các ký tự unicode. Chỉ vì bạn ở Mỹ không có nghĩa là bạn không muốn chấp nhận các ký tự nước ngoài vào các cột của mình.

Điều đó nói rằng, tôi thường đề nghị 50 ký tự cho tên. 320 là quá đủ cho một địa chỉ email (bạn có thể kiểm tra tiêu chuẩn ANSI để chắc chắn). Đối với lỗi địa chỉ về phía thận trọng với 255 ký tự. Mặc dù có thể bạn sẽ không bao giờ cần một địa chỉ lớn như vậy, nhưng bạn có thể bao gồm các dòng C / O và những thứ tương tự. Thành phố nên khá lớn, có một số tên thành phố khá dài ngoài kia. Đối với nhà nước đi với một bảng con, cùng với đất nước. Đối với mã Zip, đừng quên mã bưu chính quốc tế dài hơn mã zip của Hoa Kỳ. Chỉ vì bạn không hỗ trợ quốc tế mà bạn vẫn có thể. Có rất nhiều công dân Hoa Kỳ sống ở các quận khác nhau bao gồm cả quân đội.

Đừng quên rằng tiểu bang nên là tùy chọn vì nhiều quốc gia không có tiểu bang.


Trong dự án cuối cùng của tôi, tôi đã tìm thấy một tài liệu về các tiêu chuẩn bưu chính quốc tế chỉ ra 39 là độ dài dòng tối đa. Pháp có một mã riêng cho những người nhận khối lượng lớn đi sau thành phố. Tôi sẽ cho phép 3 hoặc 4 trường định dạng miễn phí có kích thước này cộng với quốc gia.
BillThor

9

Tên ăn mày của tôi đang bị đau khi ngồi trên hàng rào, vì vậy tôi sẽ chỉ đưa ra một số câu trả lời và hy vọng sẽ không bị bỏ phiếu - bị bỏ rơi vào quên lãng. Xin đưa ra lời phê bình mang tính xây dựng.

Địa chỉ email:

tối thiểu: 6 (a@g.cn). Hoặc 3 nếu bạn muốn theo dõi địa chỉ email tên miền cục bộ
tối đa: 320 254 (RFC)

Số lượng mã để xác thực một email thực sự điên rồ, vì vậy hãy giả sử nó hợp lệ nếu nó có "@"

Bạn có thể muốn trừu tượng một địa chỉ email là một "phương thức giao tiếp", để bạn có thể dễ dàng liệt kê tất cả các phương thức để giao tiếp với người dùng.

Giới tính

Giới tính có thể thay đổi theo thời gian, vì vậy bạn có thể theo dõi nếu điều đó quan trọng với bạn. Theo dõi http://en.wikipedia.org/wiki/ISO/IEC_5218

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

Địa chỉ: BẮC

Tôi sẽ đi theo con đường rẻ tiền và bám lấy địa chỉ Bắc Mỹ.

Nó thuận tiện cho các nước trừu tượng, các bộ phận, thành phố và các quận chủ yếu là do thuế. Thuế có thể áp dụng ở nhiều cấp độ, vì vậy nếu bạn có thể chỉ ra mức thuế ở một khu vực địa lý trừu tượng, bạn là vàng.

Địa lý :

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

Địa chỉ :

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

Thêm dòng2 và dòng3 nếu bạn cần.

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

Bây giờ, một địa chỉ là một địa chỉ. Nhiều người có thể sống tại một địa chỉ và một người có thể có nhiều địa chỉ cùng một lúc và theo thời gian, vì vậy bạn cần một bảng nhiều cho việc đó.

Đảng viên

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

Thêm một from_datevà nullable to_datenếu theo dõi theo thời gian.

Số điện thoại

Một bên có thể có nhiều số điện thoại và một số điện thoại có thể được sử dụng bởi nhiều người. Một số điện thoại có thể được sử dụng cho fax, cuộc gọi điện thoại, modem, vv và có thể có phần mở rộng. Những điều này cũng có thể thay đổi theo thời gian.

Số điện thoại

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

Số phút tối thiểu có thể là 3 (đối với "911") hoặc có thể là 7 ("310-4NET", đây là một loại số địa phương đặc biệt không cho phép bạn quay số mã vùng)

Bạn có thể chia mã này thành mã quốc gia, vv nếu cần thiết.

Bạn nên sử dụng tiêu chuẩn http://en.wikipedia.org/wiki/E.164

PartyPhoneSố

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

Tên

Tên là khó khăn. Đây là lý do tại sao:

  1. Một số người có tên hợp pháp chỉ có một từ trong đó http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Một số người có tên với nhiều từ http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Một số người có nhiều tên cùng một lúc (ví dụ, tại trường đại học của tôi có nhiều sinh viên châu Á, nhưng họ thích sử dụng tên "ưa thích" hơn phương Tây)

  4. Đôi khi, bạn cần theo dõi tên của mọi người theo thời gian, chẳng hạn như tên thời con gái và tên đã kết hôn.

  5. Bạn muốn trừu tượng các cá nhân và tổ chức vì nhiều lý do tốt

    tạo bảng tiệc (khóa chính id bigserial);

    tạo bảng party_name (khóa chính id bigserial, party_id bigint không null tham chiếu bên (id), nhập smallint không null tham chiếu party_name_type (id) --elided, ex "maiden", "Legal");

    tạo bảng name_component (khóa chính id bigserial, party_name_id bigint không null tham chiếu party_name (id), nhập smallint không null tham chiếu name_component_type (id), --elided ex "cho" văn bản tên không null);


3

Từ một góc nhìn hơi khác so với các câu trả lời trước đó và vì có vẻ ổn khi nói về LDAP , RFC 4519 - "Giao thức truy cập thư mục nhẹ (LDAP): Lược đồ cho các ứng dụng người dùng" có thể được quan tâm.

Nó có thể hữu ích nếu ứng dụng của bạn cần được ánh xạ tới một thư mục như vậy. Nếu không, nó có thể không phù hợp với yêu cầu của bạn.

Các định nghĩa này không chỉ là về dữ liệu, chúng còn là về một số toán tử có thể được sử dụng trên các trường. postalAddress, ví dụ là một caseIgnoreListSubstringsMatch. Tôi không khuyên bạn nên tuân thủ nghiêm ngặt lược đồ này, nhưng nhìn vào các nguyên tắc có thể thú vị, đặc biệt là cách bạn có thể phải so sánh tên và địa chỉ trong ứng dụng của mình có thể phù hợp với thiết kế cơ sở dữ liệu của bạn.


3

Về tên, hãy cân nhắc sử dụng dấu ngoặc kép để bạn không phải thoát khỏi dấu nháy đơn trong tên Ailen hoặc tiếng Ý (ví dụ: O'Hara hoặc D'Amato).

Tôi cũng khuyên bạn nên sử dụng một bộ Biểu thức chính quy tốt để sử dụng, do đó bạn có thể xuất các phần của trường tên của mình (ví dụ: chữ cái đầu tiên, biệt danh, Jr / Sr, v.v.).


1
Hoặc tên tiếng Hà Lan như họ của tôi.
Colin 't Hart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.