Làm thế nào để mô hình nhiều hơn một 'họ'?


11

Ở các quốc gia nói tiếng Tây Ban Nha, chúng tôi sử dụng nhiều hơn một tên cuối cùng, như:

Tên đầu tiên ↘ Tên cuối cùng
                Pedro Arturo Rodríguez Loyola
        Tên đệm ↖ (?)

Tôi đang cố gắng mô hình hóa dữ liệu cho tên bệnh nhân. Ở nước ta, điều đó rất quan trọng, vì vậy tôi không thể bỏ qua tên cuối cùng, nhưng tôi muốn xây dựng một ứng dụng có ý nghĩa với các nhà phát triển khác, đặc biệt là từ các quốc gia nói tiếng Anh.


Tôi đã tạo một câu hỏi tương tự trên English.SE , nó có một số hiểu biết về lý do tại sao việc duy trì cả hai giá trị lại quan trọng.


15
Có lý do nhỏ nhất tại sao giá trị "họ" không được phép chứa khoảng trắng không? Bạn có thực sự muốn sử dụng một tên cuối cùng trong một số trường hợp sử dụng và tất cả các tên cuối cùng trong những trường hợp khác không? Nếu không, thì tôi không thấy vấn đề. Để lại "họ" chính xác như người dùng đã nhập và bạn vẫn ổn.
Kilian Foth

3
ở Hà Lan, tên loại "van de Iets" khá phổ biến. chỉ cần để trường tên cuối cùng chứa khoảng trắng
ratchet freak

2
Có một lý do bạn không thể chỉ có một namelĩnh vực duy nhất ?
asfallows

2
@asfallows: bởi vì nếu chúng tôi in danh sách bệnh nhân, chúng tôi cần sắp xếp chúng theo tên cuối cùng. Ví dụ: nếu tên của bạn là "José Carlos Fernando Almodóvar Soto", làm sao tôi biết trước "Almodóvar" đó là tên cuối cùng?
Pablo Olmos de Aguilera C.

2
@FedericoPoloni: Bất cứ ai tìm kiếm một bệnh nhân bằng tên cuối cùng có thể biết họ của bệnh nhân.
Vịt Mooing

Câu trả lời:


19

Q: DBA tính như thế nào?

A: 0, 1, nhiều

Một cá nhân có 1 hoặc nhiều tên được đặt và 1 hoặc nhiều tên gia đình và có thể là một tiêu đề. Những cái tên này có một trật tự cho họ. Tùy thuộc vào nội địa hóa và văn hóa để xác định cách đề cập đến một cá nhân.

Liên hệ
NamePart {"John", "Smith", ...}
NameType {title, đã cho, gia đình, ???}
Đặt hàng {1, 2, 3, ...}

Đối với Pedro Arturo Rodríguez Loyola(liên hệ số 1), bạn sẽ có bốn hàng:

1 / Pedro / cho / 1
1 / Arturo / cho / 2
1 / Rodríguez / gia đình / 3
1 / Loyola / gia đình / 4

Bằng cách này, nó không bị giới hạn trong bất kỳ cấu trúc nhất định nào nhưng vẫn có ý nghĩa đối với một liên hệ nhất định trên đó. Bạn làm gì khi bạn có một người có 3 hoặc 4 họ hoặc tên gia đình? hoặc một tên thời con gái?

Lưu ý rằng tôi đã thay đổi thứ tự từ bản sửa đổi trước của câu trả lời này - thứ tự là một thứ tự trên toàn bộ tên thay vì chỉ là một thứ tự trong loại tên vì trong một số nền văn hóa, tên gia đình xuất hiện trước, bạn có thể đã chia phần tiêu đề "Ngài John Smith II".

Đọc thêm


2
+1 Nhưng lập trình viên này đã làm việc với nhiều thành viên trong đội ngoài khơi, nhưng cái tên dài nhất tôi từng thấy vẫn là "Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Crispiniano de la Santísima Trinidad Ruiz y Picasso". Lạm dụng trẻ em hay không?
Elliott Frisch

@Darkhogg utnapistim có nó là liên kết 'This' đầu tiên trong câu trả lời của anh ấy. Đó là một trong những "hướng dẫn dứt khoát".

Tôi thích ý tưởng này như một khái niệm, nhưng không khó để trình bày với người dùng rằng nó sẽ viết tên thật? Điều duy nhất tôi có thể đưa ra đó là một cái gì đó giống như các trường liên hệ "GMail", cho phép bạn "thêm" các phần của tên. Bạn đã nghĩ về cách bạn thực sự có thể sử dụng loại mô hình dữ liệu đó chưa?
Pablo Olmos de Aguilera C.

1
@Peteris thường trong các ứng dụng y tế (câu hỏi ban đầu đề cập đến 'bệnh nhân') bạn cần chuyển qua một tên có cấu trúc để tích hợp với các hệ thống khác. Có dữ liệu phi cấu trúc có nghĩa là bạn sẽ gặp khó khăn đáng kể khi tích hợp với các hệ thống khác, thậm chí những việc như chuyển bệnh nhân từ bệnh viện này sang bệnh viện khác hoặc điền vào các trường mẫu để yêu cầu bảo hiểm. Và do đó, vấn đề về cách cấu trúc dữ liệu theo cách cho phép bạn thao tác với tất cả các cách cần thiết.

1
@Ben trường văn bản miễn phí không hoạt động tốt khi ứng dụng yêu cầu sắp xếp theo tên gia đình hoặc khi cố gắng giao tiếp với hệ thống EDI cũ để chuyển bệnh nhân từ xe cứu thương đến bệnh viện (hoặc ngược lại) hoặc điền vào lĩnh vực thích hợp trong các hình thức yêu cầu bảo hiểm khác nhau. Đây là tất cả các lĩnh vực chính, nơi dễ có một chút dữ liệu chỉ định từng phần của tên hơn là cố gắng gán nghĩa sau khi thực tế. Một trường văn bản miễn phí là tốt, nhưng đôi khi nó không phải là một tùy chọn để làm việc với các hệ thống khác.

10

Điều này có thể giúp đỡ. Bài viết hài hước, nhưng sâu sắc.

[Tên] [Họ] không phải là quy tắc chung cho tên. Nó chỉ là phổ biến nơi bạn sống. Nếu bạn áp đặt các quy tắc trong việc này, sớm hay muộn bạn sẽ có những người không thể được thêm vào hệ thống của bạn.

Về cơ bản, đảm bảo bạn áp đặt càng ít hạn chế càng tốt và cho phép linh hoạt giữa tên được lưu trữ thực tế và bất kỳ tên bổ sung nào.

Tôi sẽ đi với một cái gì đó như thế này:

  • Tên hiển thị (cho tên nhất quán khi hiển thị biểu mẫu / dữ liệu): (nên là [đầu tiên] [cuối]).
  • Tên khác / tên đầy đủ (để tìm kiếm, khớp chính xác hơn, v.v.). Ở đây, cho phép người dùng viết bất cứ điều gì, lên đến độ dài nhất định; độ dài nên nhiều hơn bạn nghĩ nên hợp lý là đủ - ví dụ: nếu bạn nghĩ 40 ký tự là đủ, hãy đặt 500 :)).
  • Địa chỉ (Mr, Mrs, Ms, Jr, Sr, -san, giá trị tùy chỉnh (như Tov.) , V.v. ).
  • ID nội bộ (ID này sẽ xác định duy nhất mọi người trong ứng dụng của bạn, ngăn chặn xung đột tên).

Ví dụ, tên của tôi không thể ghi chính xác trong hầu hết các ngôn ngữ châu Âu, do các dấu phụ đặc trưng của Rumani (vì vậy, bất cứ khi nào tôi viết tên của mình bên ngoài quốc gia của mình, về mặt kỹ thuật tôi viết sai - vì vậy mọi người có thể đọc và phát âm nó).

Một số ví dụ và liên kết tên thú vị:

http://en.wikipedia.org/wiki/Nicholas_Barbon

http://en.wikipedia.org/wiki/Prince_%28musician%29

http://en.wikipedia.org/wiki/P_diddy

http://en.wikipedia.org/wiki/Burmese_name


Một điều nữa cần xem xét là phân loại. Nó thường được mong muốn để có thể sắp xếp một danh sách những người theo họ của họ (hoặc chỉ tên, hoặc từ đầu tiên trong tên cuối cùng, vv). Nếu ứng dụng cần làm điều đó thì chúng ta cần một số cách để xác định "tên sắp xếp" của chúng.
BenM

Nhưng tôi thích ý tưởng này tổng thể. Thay vì đại diện cho tên dựa trên các giả định văn hóa, chúng tôi đại diện cho chúng dựa trên các chức năng mà chúng cần thực hiện trong hệ thống.
BenM

Tôi thích câu trả lời của bạn. Tôi không hiểu làm thế nào điều này có thể giúp tôi đặt tên. Tôi cần sắp xếp chúng chẳng hạn, chúng ta thường sử dụng họ. Làm thế nào để đặt chúng trên một trường / cột được gọi là "tên khác" hoặc "tên hiển thị" có thể giúp tôi với điều đó chẳng hạn?. Kudos cho tên burmese, mặc dù. Tuyệt vời.
Pablo Olmos de Aguilera C.

@pablox, quan điểm của tôi là về mặt khái niệm, bạn không nên coi tên của một người như một danh tính, mà là siêu dữ liệu cho danh tính (và id phải là một mã duy nhất). Bạn có thể coi siêu dữ liệu đó là có tổ chức, theo nhu cầu của ứng dụng của bạn. Ví dụ: bạn có thể chọn vai trò "sắp xếp tên" cho tên thứ hai (nếu có) trong "nhóm mã thông báo tên", vai trò của "tên hiển thị" làm mã thông báo đầu tiên và vai trò của "tên địa chỉ" như "Tiến sĩ | Ông | Bà | vân vân" + "tên hiển thị".
utnapistim

Sắp xếp tên thường là "sắp xếp danh bạ điện thoại", trong đó bạn bỏ qua các phần phụ khác nhau cho tên và sắp xếp trên phần quan trọng. Ví dụ: "van de Bogart" sẽ được sắp xếp trên "Bogart", không phải "van". Làm thế nào một tên gốc Tây Ban Nha được xử lý sẽ phụ thuộc vào văn hóa - nó được sử dụng ở đâu và cách sử dụng của nó phù hợp.
Phil Perry

0

Đó không phải là một điều phức tạp ..... hoặc tôi đang thiếu một cái gì đó.

Có các trường này: name(varchar), lastname(varchar).

Sau đó, một hình thức để điền vào tên đầy đủ, ví dụ: Jorge Patriciovà tên cuối cùng Pèrez Gonzáles.

Trong tìm kiếm, bạn có nhiều toán tử so sánh, ví dụ như trong MySQL, như thế likesẽ giúp bạn tìm kiếm.

Chủ yếu là các tên cuối cùng luôn luôn theo thứ tự. Pérez Gonzálezchủ yếu nói tên cuối cùng của nó theo cách đó, và không theo thứ tự đảo ngược.

Bạn sẽ thiết kế quá mức cơ sở dữ liệu của bạn theo cách khác.


1
Nếu tên gia đình được đưa ra đầu tiên thì sao? liên kết

1
@MichaelT, còn nó thì sao? Phát nổ trường và tìm kiếm trong bảng tên và họ cho bất kỳ sự xuất hiện của giá trị. Luôn giả sử bạn có trường tìm kiếm giống như Google, ngoài ra, bạn chỉ có thể có một biểu mẫu như "Tên:" và "Họ:"
JorgeeFG

0

Có ba loại tên cá nhân: Polynyms (tên có nhiều thành phần), Mononymouss (tên chỉ có một thành phần, ex "Cher") và Pictonyms (tên được thể hiện bằng hình ảnh, ví dụ The Artist ).

Một người có thể có nhiều tên, đóng vai trò , ví dụ Tên hợp pháp và Tên ưu tiên.

Một đa thức có một số thành phần, trong đó phải đặt tên và họ. Có một vài loại họ:

  1. Họ thường xuyên (Jones)
  2. Tên họ hai nòng ("Vaughn Williams" hoặc "Louis-Dreyfus")
  3. Họ hợp chất thật {tên họ: "Juan Pablo" họ: "Fernández de Calderón", tên phụ: "García-Iglesias"}

3 là quan trọng bởi vì ông sẽ được gọi là ông Fernández de Calderón , chứ không phải ông Fernández de Calderón García-Iglesias.

Vì vậy, về cơ bản, có một trường họ bắt buộc và trường thứ cấp nullable.


0

Làm thế nào để bạn mô hình hóa các thành phần khác nhau của tên của ai đó? Bạn đừng . Thay vì lập mô hình các trường riêng biệt cho tất cả các thành phần của tên hợp pháp của ai đó, cộng với lời chào ưa thích, tên gọi, tên không chính thức, tên người dùng, tên hiệu và xử lý, chỉ mô hình hóa những gì bạn quan tâm.

Điều lạ lùng là hệ thống của bạn chỉ thực sự quan tâm đến tối đa bốn "tên" cho ai đó:

  1. Một tên hiển thị cho phép họ biết rằng họ đang đăng nhập vào hệ thống.
  2. Một Tên chính thức mà bạn sẽ giải quyết chúng trên một cuộc gọi điện thoại.
  3. Một tên chính thức mà bạn sẽ đề cập đến họ trên thư.
  4. Một Sắp xếp Tên đó thể hiện # 2 trong một cách mà nó sẽ được đặt trong một danh sách.

Nhiều hệ thống chỉ đơn giản sử dụng tên chính thức của ai đó cho # 1 và # 2, để lại các tên duy nhất bạn quan tâm là "một chuỗi đại diện cho tên người dùng" và "một chuỗi đại diện cho cách sắp xếp trước đây."

Từ góc độ mô hình hóa dữ liệu, chỉ xác định những giá trị mà bạn thực sự cần. Cách tốt nhất để tối ưu hóa việc lưu trữ các giá trị này là một chi tiết triển khai - một chi tiết mà bạn sẽ chỉ gây đau đầu nếu tối ưu hóa quá mức. (Chắc chắn, bạn "có thể" chỉ lưu trữ tên và họ, nhưng bạn sẽ làm gì cho một người chỉ có một tên duy nhất?)


-1

Hãy xem xét điều này theo một cách khác.

Hệ thống của bạn phải kết nối với các hệ thống khác, không quan trọng bạn linh hoạt đến mức nào nếu không. Vậy các hệ thống bạn phải truyền dữ liệu để làm gì?

Khi tôi gọi điện cho bác sĩ để hẹn họ, họ hỏi tôi về ngày sinh của tôi, các hệ thống sau đó cho họ xem danh sách những người phù hợp, sau đó họ hỏi tôi tên của tôi, cuối cùng là hỏi địa chỉ của tôi để xác nhận rằng họ đã chọn đúng người

Bác sĩ cần biết tên địa chỉ cho tôi khi nói chuyện với tôi; họ cũng cần biết tên để viết thư nếu họ viết thư cho tôi.

Do đó, cách không chỉ là một trường văn bản cho phép khoảng trắng. Không có lý do để thậm chí tách tên đầu tiên khỏi tên cuối cùng, trừ khi bạn sẽ xử lý chúng theo cùng một cách.


3
Bạn đang điền vào một mẫu trên một yêu cầu bảo hiểm. Nó có "Họ". Người đến từ Nhật Bản. Trong khi bạn có phiên bản phiên âm, bạn cần đặt tên gia đình phù hợp vào trường. Đó là từ gì?

@MichaelT, phải nói gì khi mọi người đều có họ?
Ian

2
Lấy tên từ một người từ Nhật Bản (hoặc nhiều quốc gia đặt tên phương Đông khác, tên gia đình được đặt trước. Đó là cách giải quyết. Tuy nhiên, khi điền vào mẫu đơn y tế, người ta có thể yêu cầu tên họ và tên được đặt khác nhau Các trường - làm thế nào để bạn lấy một trường và khớp với trường thích hợp? Ví dụ khác được đưa ra là nếu bạn sắp xếp theo tên gia đình và đưa ra "Jose Carlos Fernando Almodóvar Soto", bạn cần sắp xếp Almodóvarthay vì Fernando.

@MichaelT, vì vậy cần phải xử lý Tên gia đình một cách riêng biệt, vì vậy hãy đặt tên đó là trường riêng và hy vọng người gõ các chi tiết hiểu cách đặt tên phương Đông.
Ian
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.