Jak wymodelować więcej niż jedno „nazwisko”?

11

W krajach hiszpańskojęzycznych używamy więcej niż jednego nazwiska, na przykład:

Imię ↘ ↙ Nazwisko
                Pedro Arturo Rodríguez Loyola
        Drugie imię ↗ ↖ (?)

Próbuję modelować dane dla nazwiska pacjenta. W naszym kraju jest to ważne, więc nie mogę zaniedbać drugiego nazwiska, ale chciałbym zbudować aplikację, która ma sens dla innych programistów, szczególnie z krajów anglojęzycznych.


Stworzyłem podobne pytanie na English.SE , ma pewne spostrzeżenia na temat tego, dlaczego ważne jest zachowanie obu wartości.

Pablo Olmos de Aguilera C.
źródło
15
Czy istnieje jakikolwiek powód, dla którego wartość „nazwisko” nie powinna zawierać spacji? Czy naprawdę chcesz używać jednego nazwiska w niektórych przypadkach użycia i wszystkich nazwisk w innych? Jeśli nie, to nie widzę problemu. Zostaw „nazwisko” dokładnie tak, jak podał go użytkownik i jesteś dobry.
Kilian Foth
3
w języku niderlandzkim nazwa typu „van de Iets” jest dość powszechna. niech tylko nazwisko zawiera spacje
maniak ratchet
2
Czy istnieje powód, dla którego nie możesz mieć tylko jednego namepola?
asfallows
2
@asfallows: ponieważ jeśli wydrukujemy listę pacjentów, musimy posortować je według nazwiska. Na przykład, jeśli masz na imię „José Carlos Fernando Almodóvar Soto”, skąd mam wiedzieć z góry, że „Almodóvar” to pierwsze nazwisko?
Pablo Olmos de Aguilera C.
2
@FedericoPoloni: Każdy, kto patrzy na pacjenta po nazwisku, prawdopodobnie zna jego nazwisko.
Mooing Duck

Odpowiedzi:

19

P: Jak liczy się DBA?

Odp .: 0, 1, wiele

Osoba ma 1 lub więcej imion i 1 lub więcej nazwisk i ewentualnie tytuł. Te imiona mają do nich porządek. Od lokalizacji i kultury zależy określenie sposobu odniesienia się do danej osoby.

ContactId
NamePart {„John”, „Smith”, ...}
NameType {tytuł, podany, rodzina, ???}
Zamów {1, 2, 3, ...}

Dla Pedro Arturo Rodríguez Loyola(kontakt nr 1) masz cztery wiersze:

1 / Pedro / dany / 1
1 / Arturo / dany / 2
1 / Rodríguez / family / 3
1 / Loyola / rodzina / 4

W ten sposób nie ogranicza się do żadnej struktury, ale nadal ma sens dla danego kontaktu. Co robisz, gdy masz kogoś z 3 lub 4 imionami lub nazwiskami? czy panieńskie nazwisko?

Zauważ, że zmieniłem kolejność z poprzedniej wersji tej odpowiedzi - kolejność jest porządkiem obejmującym całe imię, a nie tylko porządek w obrębie rodzaju imienia, ponieważ w niektórych kulturach nazwisko jest najważniejsze, być może podzieliłeś części tytułowe „Sir John Smith II”.

Dodatkowe czytanie

Dave Jarvis
źródło
2
+1 Ale ten programista pracował z wieloma członkami zespołu offshore, ale najdłuższe nazwisko, jakie kiedykolwiek widziałem, to nadal „Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Crispiniano de la Santísima Trinidad Ruiz y Picasso”. Wykorzystywanie dzieci czy nie?
Elliott Frisch
@Darkhogg utnapistim ma to jako pierwszy link „This” w swojej odpowiedzi. Jest to jeden z tych „ostatecznych przewodników”.
Podoba mi się ten pomysł jako koncepcja, ale nie jest to trudne do przedstawienia użytkownikowi, że napisze właściwą nazwę? Jedyne, co mogę wymyślić, to coś w rodzaju pól kontaktowych „Gmail”, które pozwalają „dodać” części nazwy. Czy zastanawiałeś się, w jaki sposób możesz faktycznie korzystać z tego rodzaju modelu danych?
Pablo Olmos de Aguilera C.
1
@Peteris często w aplikacjach medycznych (pierwotne pytanie wspomina o „pacjencie”), musisz przekazać uporządkowaną nazwę w celu integracji z innymi systemami. Posiadanie nieustrukturyzowanych danych oznacza, że ​​będziesz miał poważne trudności z integracją z innymi systemami, nawet takimi jak przeniesienie pacjenta z jednego szpitala do drugiego lub wypełnienie pól formularza dla roszczeń ubezpieczeniowych. W ten sposób pojawia się problem ze strukturą danych w sposób umożliwiający manipulowanie nimi na wszystkie wymagane sposoby.
1
@Ben Wolne pole tekstowe nie działa dobrze, gdy aplikacja wymaga sortowania według nazwiska lub gdy próbuje się połączyć ze starym systemem EDI w celu przeniesienia pacjenta z karetki do szpitala (lub odwrotnie) lub wypełnienia odpowiednie pola w różnych formularzach roszczeń ubezpieczeniowych. Są to wszystkie kluczowe obszary, w których łatwiej jest mieć trochę danych oznaczających każdą część nazwy niż próbować przypisać znaczenie po fakcie. Wolne pole tekstowe jest fajne, ale czasami nie jest po prostu opcją do pracy z innymi systemami.
10

To może pomóc. Post jest humorystyczny, ale wnikliwy.

[Imię] [Nazwisko] nie jest uniwersalną zasadą dla nazwisk. To jest po prostu powszechne tam, gdzie mieszkasz. Jeśli narzucisz w tym reguły, prędzej czy później będziesz mieć osoby, których nie można dodać do twojego systemu.

Zasadniczo upewnij się, że nałożysz jak najmniej ograniczeń i umożliwisz elastyczność między rzeczywistą przechowywaną nazwą a wszelkimi dodatkowymi.

Wybrałbym coś takiego:

  • Wyświetlana nazwa (dla spójnych nazw przy wyświetlaniu formularzy / danych): (powinna być [pierwsza] [ostatnia]).
  • Inne nazwy / pełna nazwa (do wyszukiwania, dokładniejszego dopasowywania itp.). Tutaj pozwól użytkownikowi napisać cokolwiek, do określonej długości; długość powinna być większa niż myślisz, że powinna być wystarczająca - np. jeśli uważasz, że 40 znaków powinno wystarczyć, wstaw 500 :)).
  • Adresowanie (Mr, Mrs, Ms, Jr, Sr, -san, wartość niestandardowa (jak Tov.) Itp .).
  • identyfikator wewnętrzny (ten identyfikator powinien jednoznacznie identyfikować każdą osobę w aplikacji, zapobiegając kolizjom nazw).

Na przykład moje imię nie jest poprawnie zapisywane w większości języków europejskich, ze względu na specyficzne dla Rumunii znaki diakrytyczne (więc za każdym razem, gdy piszę swoje imię poza moim krajem ojczystym, technicznie piszę je nieprawidłowo - aby ludzie mogli je czytać i wymawiać).

Kilka interesujących przykładów nazw i linków:

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

utnapistim
źródło
Jeszcze jedna rzecz do rozważenia to sortowanie. Często pożądane jest sortowanie listy osób według ich nazwiska (lub tylko imienia lub pierwszego słowa w nazwisku itp.). Jeśli aplikacja musi to zrobić, potrzebujemy jakiegoś sposobu identyfikacji ich „nazwy sortującej”.
BenM
Ale ogólnie podoba mi się ten pomysł. Zamiast reprezentować nazwy oparte na założeniach kulturowych, reprezentujemy je na podstawie funkcji, które muszą spełniać w systemie.
BenM
Podoba mi się twoja odpowiedź. Nie rozumiem jednak, w jaki sposób może mi to pomóc w umieszczaniu nazwisk. Muszę je na przykład posortować, zwykle używamy nazwiska. Jak umieszczenie ich w polu / kolumnie o nazwie „inne nazwy” lub „nazwa wyświetlana” może mi na przykład pomóc? Uznanie dla birmańskiego imienia. Niesamowite.
Pablo Olmos de Aguilera C.
@pablox, chodziło mi o to, że koncepcyjnie nie należy traktować nazwiska osoby jako tożsamości, ale jako metadane tożsamości (a identyfikator powinien być unikalnym kodem). Możesz uznać te metadane za zorganizowane, zgodnie z potrzebami aplikacji. Na przykład możesz wybrać rolę „sortowania nazwy” na drugie imię (jeśli istnieje) w „grupie tokenów nazw”, rolę „nazwy wyświetlanej” jako pierwszego tokena i rolę „adresowania nazwy” jako „Dr. | Mr. | Ms. | etc” + „nazwa wyświetlana”.
utnapistim
Sortowanie nazw zwykle oznacza „sortowanie książki telefonicznej”, w którym ignorowane są różne dodatki do nazwy i sortowane według ważnej części. Np. „Van de Bogart” będzie sortowany według „Bogart”, a nie „van”. Sposób posługiwania się wieloczęściową latynoską nazwą będzie zależny od kultury - gdzie jest używany i jak pasuje do jego użycia.
Phil Perry
0

To nie jest skomplikowana sprawa ..... albo czegoś mi brakuje.

Posiadaj następujące pola: name(varchar), lastname(varchar).

Następnie formularz do wypełnienia pełnej nazwy, przykład: Jorge Patricioi nazwisko Pèrez Gonzáles.

W wyszukiwaniu masz wiele operatorów porównania, na przykład w MySQL, takich jak likektóre pomogą ci szukać.

Najczęściej skomponowane nazwiska są zawsze w porządku. Pérez Gonzáleznajczęściej mówi w ten sposób swoje nazwisko, a nie w odwrotnej kolejności.

Nadmiernie projektujesz swoją bazę danych w inny sposób.

JorgeeFG
źródło
1
Co jeśli nazwisko zostanie podane jako pierwsze? link
1
@MichaelT, a co z tym? Rozbij pole i wyszukaj w tabeli nazwy i nazwiska dowolne wystąpienie wartości. Zawsze zakładając, że masz pole wyszukiwania podobne do Google, w przeciwnym razie możesz mieć formularz „Imię:” i „Nazwisko:”
JorgeeFG
0

Istnieją trzy rodzaje nazwisk osobistych: Polynyms (imiona z wieloma składnikami), Mononimy (imiona z tylko jednym składnikiem, ex „Cher”) i Pictonimy (imiona reprezentowane przez zdjęcia, ex The Artist ).

Osoba może mieć wiele nazwisk, odgrywać role , na przykład Legal Name i Preferred Name.

Polynym ma kilka elementów, z których należy podać imię i nazwisko. Istnieje kilka rodzajów nazwisk:

  1. Regularne nazwiska (Jones)
  2. Nazwiska z podwójną lufą („Vaughn Williams” lub „Louis-Dreyfus”)
  3. Prawdziwe złożone nazwiska {nazwa: imię „Juan Pablo”: „Fernández de Calderón”, nazwisko dodatkowe: „García-Iglesias”}

3 jest ważny, ponieważ oczekuje się, że zostanie on przemówiony jako pan Fernández de Calderón , a nie pan Fernández de Calderón García-Iglesias.

Zasadniczo więc należy podać obowiązkowe pole nazwiska i nullable drugie pole nazwiska.

użytkownik118920
źródło
0

Jak modelujesz różne elementy czyjegoś imienia? Ty nie . Zamiast modelować osobne pola dla wszystkich składników czyjegoś imienia i nazwiska, a także ich preferowanego pozdrowienia, apelacji, nieformalnej nazwy, nazwy użytkownika, pseudonimu i obsługi, modeluj tylko to, na czym ci zależy.

Szanse są dla twojego systemu tak naprawdę obchodzą tylko cztery „nazwiska” dla kogoś:

  1. Nazwa wyświetlacza , który pozwala im wiedzieć, że są one zalogowany do systemu.
  2. Nieformalna nazwa przez co zwracasz je na telefon.
  3. Formalna nazwa , z którą chcesz się do nich korespondencji.
  4. Sortuj Nazwa który wyraża nr 2 w taki sposób, że będzie uporządkowany w formie listy.

Wiele systemów po prostu użyłoby czyjejś oficjalnej nazwy dla # 1 i # 2, pozostawiając jedyne, na których ci zależy, jako „ciąg reprezentujący nazwę użytkownika” i „ciąg reprezentujący sposób sortowania tych pierwszych”.

Z perspektywy modelowania danych zdefiniuj tylko te wartości, których faktycznie potrzebujesz. Najlepszym sposobem optymalizacji przechowywania tych wartości jest szczegół implementacji - taki, który spowoduje problemy tylko w przypadku nadmiernej optymalizacji. (Jasne, „mógłbyś” po prostu zapisać imię i nazwisko, ale co byś zrobił dla kogoś, kto ma tylko jedno imię?)

DougM
źródło
-1

Rozważmy to w inny sposób.

Twój system musi się łączyć z innymi systemami, nie ma znaczenia, jak elastyczny jesteś, jeśli nie są. Więc co robią systemy, z którymi musisz przesyłać dane?

Kiedy dzwonię do lekarza, by umówić się na spotkanie, pytają mnie o datę urodzenia, systemy wyświetlają im listę pasujących osób, a następnie pytają o moje imię i nazwisko, a na koniec proszę o adres, aby potwierdzić, że wybrali właściwa osoba.

Podczas rozmowy ze mną lekarz musi znać adres. muszą również znać nazwisko, aby napisać list, jeśli do mnie piszą.

Dlatego nie jest to tylko jedno pole tekstowe, które dopuszcza spacje. Nie ma powodu, aby nawet oddzielić imię od nazwiska, chyba że będziesz przetwarzał je w ten sam sposób.

Ian
źródło
3
Wypełniasz formularz dotyczący roszczenia ubezpieczeniowego. Ma „nazwisko”. Ta osoba pochodzi z Japonii. Podczas gdy masz wersję transliterowaną, musisz podać odpowiednie nazwisko w polu. Jakie to słowo?
@MichaelT, Co powiedzieć, że każdy ma nazwisko rodowe?
Ian
2
Uzyskiwanie nazwiska od osoby z Japonii (lub wielu innych wschodnich krajów nadających imię i nazwisko) najpierw podaje się nazwisko rodowe. W ten sposób jest ono adresowane. Jednak przy wypełnianiu formularza medycznego może być wymagane, aby nazwisko i imię były inne pola - jak wziąć jedno pole i dopasować do właściwego pola? Drugi podany przykład to, jeśli sortujesz według nazwiska i otrzymujesz „José Carlos Fernando Almodóvar Soto”, na którym musisz posortować, Almodóvara nie Fernando.
@MichaelT, więc trzeba osobno przetwarzać Nazwę Rodziny, więc podaj jej własne pole i miej nadzieję, że osoba wpisująca szczegóły zrozumie wschodnie nazewnictwo.
Ian