วิธีสร้างแบบจำลองมากกว่า 'นามสกุล'?


11

ในประเทศที่พูดภาษาสเปนเราใช้นามสกุลมากกว่าหนึ่งเช่น:

ชื่อ↘↙นามสกุล
                Pedro Arturo Rodríguez Loyola
        ชื่อกลาง↗↖ (?)

ฉันกำลังพยายามสร้างแบบจำลองข้อมูลสำหรับชื่อผู้ป่วย ในประเทศของเราเป็นสิ่งสำคัญดังนั้นฉันจึงไม่สามารถละเลยนามสกุลที่สองได้ แต่ฉันต้องการสร้างแอปพลิเคชันที่เหมาะสมกับนักพัฒนาอื่น ๆ โดยเฉพาะจากประเทศที่ใช้ภาษาอังกฤษ


ฉันสร้างคำถามที่คล้ายกันในภาษาอังกฤษ SEมีความเข้าใจเกี่ยวกับสาเหตุที่มีความสำคัญต่อทั้งสองค่า


15
มีเหตุผลเพียงเล็กน้อยหรือไม่ที่ทำไมค่า "นามสกุล" ไม่ควรได้รับอนุญาตให้มีการเว้นวรรค? คุณต้องการใช้นามสกุลหนึ่งในบางกรณีและบางนามสกุลทั้งหมดหรือไม่? ถ้าไม่เช่นนั้นฉันก็ไม่เห็นปัญหา ปล่อย "นามสกุล" ให้ตรงตามที่ผู้ใช้ป้อนและคุณก็ทำได้ดี
Kilian Foth

3
ในภาษาดัตช์ชื่อประเภท "van de Iets" ค่อนข้างธรรมดา เพียงแค่ปล่อยให้เขตข้อมูลชื่อมีช่องว่าง
วงล้อประหลาด

2
มีเหตุผลที่คุณไม่สามารถมีnameฟิลด์เดียวได้หรือไม่
asfallows

2
@asfallows: เพราะถ้าเราพิมพ์รายชื่อผู้ป่วยเราต้องจัดเรียงตามนามสกุล ตัวอย่างเช่นหากชื่อของคุณคือ "José Carlos Fernando Almodóvar Soto" ฉันจะทราบได้อย่างไรล่วงหน้าว่า "Almodóvar" เป็นนามสกุลแรก
Pablo Olmos de Aguilera C.

2
@FedericoPoloni: ใครก็ตามที่ค้นหาผู้ป่วยด้วยนามสกุลอาจรู้จักนามสกุลของผู้ป่วย
Mooing Duck

คำตอบ:


19

ถาม DBA มีความสำคัญอย่างไร

A: 0, 1, มากมาย

แต่ละคนมีชื่อที่กำหนดตั้งแต่ 1 ชื่อขึ้นไปและชื่อครอบครัว 1 ชื่อขึ้นไปและอาจเป็นชื่อ ชื่อเหล่านี้มีคำสั่งให้พวกเขา มันขึ้นอยู่กับการแปลและวัฒนธรรมเพื่อกำหนดวิธีการอ้างถึงบุคคล

ContactID
NamePart {"John", "Smith", ... }
NameType {ชื่อ, มอบให้, ครอบครัว, ???}
คำสั่งซื้อ {1, 2, 3, ... }

สำหรับPedro Arturo Rodríguez Loyola(ติดต่อ # 1) คุณจะมีสี่แถว:

1 / โดรส์ / ที่ได้รับ / 1
1 / อาร์ตูโร / กำหนด / 2
1 / Rodríguez / ครอบครัว / 3
1 / Loyola / ครอบครัว / 4

วิธีนี้จะไม่ จำกัด เฉพาะโครงสร้างที่กำหนด แต่ยังคงสมเหตุสมผลสำหรับการติดต่อที่ให้ไว้ คุณจะทำอย่างไรเมื่อคุณมีคนที่มี 3 หรือ 4 ชื่อหรือนามสกุล? หรือนามสกุลเดิม?

โปรดทราบว่าฉันได้เปลี่ยนคำสั่งจากการแก้ไขคำตอบก่อนหน้านี้ - คำสั่งนั้นเป็นคำสั่งของชื่อทั้งหมดแทนที่จะเป็นคำสั่งในประเภทชื่อเพราะในบางวัฒนธรรมชื่อครอบครัวมาก่อนคุณอาจแยก ชิ้นส่วนชื่อเรื่อง "Sir John Smith II"

อ่านเพิ่มเติม


2
+1 แต่โปรแกรมเมอร์นี้ได้ทำงานกับสมาชิกในทีมต่างประเทศจำนวนมาก แต่ชื่อที่ยาวที่สุดที่ฉันเคยเห็นก็คือ "Pablo Diego Joséซานฟรานซิสโกเดอพอลล่า Juan Nepomuceno María de los Remedios การล่วงละเมิดเด็กหรือไม่?
Elliott Frisch

@Darkhogg utnapistim เป็นลิงก์แรกในคำตอบของเขา มันเป็นหนึ่งในบรรดา 'คู่มือที่ชัดเจน'

ฉันชอบแนวคิดที่เป็นแนวคิด แต่ไม่ยากที่จะนำเสนอให้กับผู้ใช้ที่จะเขียนชื่อจริงหรือไม่ สิ่งเดียวที่ฉันสามารถเกิดขึ้นได้คือบางอย่างเช่นช่องทางการติดต่อ "GMail" ที่ให้คุณ "เพิ่ม" บางส่วนของชื่อ คุณเคยคิดบ้างหรือไม่ว่าคุณสามารถใช้ตัวแบบข้อมูลชนิดนั้นจริง ๆ ได้อย่างไร
Pablo Olmos de Aguilera C.

1
@Peteris มักจะอยู่ในแอปพลิเคชันทางการแพทย์ (คำถามเดิมที่กล่าวถึง 'ผู้ป่วย') คุณต้องผ่านชื่อที่มีโครงสร้างสำหรับการทำงานร่วมกับระบบอื่น ๆ การมีข้อมูลที่ไม่มีโครงสร้างหมายความว่าคุณจะมีปัญหาอย่างมากในการรวมเข้ากับระบบอื่น ๆ แม้กระทั่งสิ่งต่าง ๆ เช่นการถ่ายโอนผู้ป่วยจากโรงพยาบาลแห่งหนึ่งไปยังอีกโรงพยาบาลหนึ่ง ดังนั้นปัญหาเกี่ยวกับวิธีจัดโครงสร้างข้อมูลในแบบที่ช่วยให้คุณสามารถจัดการกับข้อมูลได้ทุกวิธี

1
@Ben เขตข้อมูลอิสระไม่ทำงานได้ดีเมื่อแอปพลิเคชันเรียกเรียงตามชื่อครอบครัวหรือเมื่อพยายามเชื่อมต่อกับระบบ EDI เก่าสำหรับถ่ายโอนผู้ป่วยจากรถพยาบาลไปยังโรงพยาบาล (หรือในทางกลับกัน) หรือกรอก ฟิลด์ที่เหมาะสมในแบบฟอร์มการเรียกร้องค่าประกันต่าง ๆ สิ่งเหล่านี้ล้วนเป็นพื้นที่สำคัญที่ง่ายต่อการมีบิตของข้อมูลที่กำหนดแต่ละส่วนของชื่อได้ง่ายกว่าการพยายามกำหนดความหมายหลังจากข้อเท็จจริง เขตข้อมูลข้อความฟรีนั้นดี แต่บางครั้งก็ไม่ใช่ตัวเลือกสำหรับการทำงานกับระบบอื่น

10

สิ่งนี้อาจช่วยได้ โพสต์มีอารมณ์ขัน แต่ลึกซึ้ง

[ชื่อ] [นามสกุล] ไม่ใช่กฎสากลสำหรับชื่อ มันเป็นเรื่องธรรมดาที่คุณอาศัยอยู่ หากคุณกำหนดกฎในเรื่องนี้ไม่ช้าก็เร็วคุณจะมีคนที่ไม่สามารถเพิ่มในระบบของคุณได้

โดยทั่วไปตรวจสอบให้แน่ใจว่าคุณกำหนดข้อ จำกัด ให้น้อยที่สุดเท่าที่จะเป็นไปได้และให้ความยืดหยุ่นระหว่างชื่อที่จัดเก็บจริงกับชื่ออื่น ๆ

ฉันจะไปกับสิ่งนี้:

  • ชื่อที่แสดง (สำหรับชื่อที่สอดคล้องกันเมื่อแสดงฟอร์ม / ข้อมูล): (ควรเป็น [แรก] [ล่าสุด])
  • ชื่ออื่น ๆ / ชื่อเต็ม (สำหรับการค้นหาการจับคู่ที่แม่นยำยิ่งขึ้น ฯลฯ ) ที่นี่อนุญาตให้ผู้ใช้เขียนอะไรก็ได้ตามความยาวที่กำหนด ความยาวควรมากกว่าที่คุณคิดว่าควรจะเพียงพอ - เช่นถ้าคุณคิดว่า 40 ตัวอักษรควรจะเพียงพอให้ใส่ 500 :))
  • ที่อยู่ (Mr, Mrs, Ms, Jr, Sr, -san, ค่าที่กำหนดเอง (เช่น Tov.) ฯลฯ )
  • ID ภายใน (ID นี้ควรระบุทุกคนในแอปพลิเคชันของคุณโดยไม่ซ้ำกันเพื่อป้องกันการชนชื่อ)

ตัวอย่างเช่นชื่อของฉันไม่สามารถเขียนได้อย่างถูกต้องในภาษายุโรปส่วนใหญ่เนื่องจากการออกเสียงกำกับเฉพาะของโรมาเนีย (ดังนั้นเมื่อใดก็ตามที่ฉันเขียนชื่อของฉันนอกประเทศบ้านเกิดของฉันฉันใช้เทคนิคในทางที่ผิดเพื่อให้ผู้คนอ่านและออกเสียง)

ตัวอย่างชื่อและลิงก์ที่น่าสนใจ:

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


สิ่งที่ต้องพิจารณาอีกอย่างหนึ่งคือการเรียงลำดับ บ่อยครั้งเป็นที่พึงปรารถนาที่จะสามารถเรียงลำดับรายชื่อบุคคลตามนามสกุล (หรือเฉพาะชื่อหรือคำแรกในนามสกุล ฯลฯ ) หากแอปพลิเคชันต้องทำเช่นนั้นเราจำเป็นต้องมีวิธีการระบุ "เรียงลำดับชื่อ" ของพวกเขา
BenM

แต่ฉันชอบความคิดนี้โดยรวม แทนที่จะเป็นตัวแทนของชื่อตามสมมติฐานทางวัฒนธรรมเราเป็นตัวแทนของพวกเขาตามหน้าที่ที่พวกเขาจำเป็นต้องดำเนินการในระบบ
BenM

ฉันชอบคำตอบของคุณ ฉันไม่เข้าใจว่าสิ่งนี้จะช่วยให้ฉันตั้งชื่อได้อย่างไร ฉันต้องการเรียงลำดับตัวอย่างเช่นปกติแล้วเราจะใช้นามสกุล การวางลงในฟิลด์ / คอลัมน์ที่เรียกว่า "ชื่ออื่น" หรือ "ชื่อที่แสดง" จะช่วยฉันได้อย่างไร ความรุ่งโรจน์สำหรับชื่อพม่าแม้ว่า น่ากลัว
Pablo Olmos de Aguilera C.

@pablox ประเด็นของฉันคือแนวคิดคุณไม่ควรปฏิบัติต่อชื่อของบุคคลในฐานะตัวตน แต่เป็นข้อมูลเมตาสำหรับข้อมูลประจำตัว (และรหัสควรเป็นรหัสที่ไม่ซ้ำกัน) คุณสามารถพิจารณาข้อมูลเมตานั้นได้รับการจัดระเบียบตามความต้องการของแอปพลิเคชันของคุณ ตัวอย่างเช่นคุณสามารถเลือกบทบาทของ "การเรียงชื่อ" กับชื่อที่สอง (ถ้ามี) ใน "กลุ่มของชื่อโทเค็น", บทบาทของ "ชื่อที่แสดง" เป็นโทเค็นแรกและบทบาทของ "ชื่อที่อยู่" เป็น "Dr. | Mr. | Ms. | etc" + "ชื่อที่แสดง"
utnapistim

การเรียงลำดับชื่อมักจะเป็น "การจัดเรียงสมุดโทรศัพท์" ซึ่งคุณจะไม่สนใจส่วนต่าง ๆ ของชื่อและจัดเรียงในส่วนที่สำคัญ เช่น "van de Bogart" จะถูกจัดเรียงใน "Bogart" ไม่ใช่ "van" การจัดการชื่อฮิสแปนิกหลายส่วนนั้นขึ้นอยู่กับวัฒนธรรม - มันถูกใช้ที่ไหนและการใช้งานนั้นเหมาะสมอย่างไร
Phil Perry

0

มันไม่ใช่เรื่องซับซ้อน ..... หรือฉันขาดอะไรไป

มีฟิลด์เหล่านี้: name(varchar), lastname(varchar)

แล้วแบบฟอร์มเพื่อกรอกชื่อที่สมบูรณ์เช่น: และชื่อสุดท้ายJorge PatricioPèrez Gonzáles

ในการค้นหาคุณมีโอเปอเรเตอร์การเปรียบเทียบจำนวนมากเช่นใน MySQL likeซึ่งจะช่วยให้คุณมองหา

ส่วนใหญ่ชื่อสุดท้ายที่แต่งมักจะเป็นระเบียบ Pérez Gonzálezส่วนใหญ่บอกนามสกุลของมันด้วยวิธีนี้และไม่ใช่ในลำดับที่กลับกัน

คุณจะออกแบบฐานข้อมูลของคุณด้วยวิธีอื่น


1
เกิดอะไรขึ้นถ้าให้นามสกุลก่อน ลิงก์

1
@MichaelT แล้วมันล่ะ? ระเบิดฟิลด์และค้นหาในชื่อและตารางนามสกุลสำหรับการเกิดขึ้นของค่าใด ๆ สมมติว่าคุณมีช่องค้นหาเหมือน Google เสมอ ๆ นอกจากนี้คุณสามารถมีรูปแบบเช่น "ชื่อ:" และ "นามสกุล:"
JorgeeFG

0

มีสามประเภทของชื่อส่วนบุคคล: Polynyms (ชื่อที่มีองค์ประกอบหลายอย่าง) ชื่อเดี่ยว (ชื่อมีเพียงองค์ประกอบหนึ่งอดีต "เฌอ") และPictonyms (ชื่อตัวแทนจากภาพอดีตศิลปิน )

บุคคลสามารถมีหลายชื่อมีบทบาทตัวอย่างเช่นชื่อกฎหมายและชื่อที่ต้องการ

polynym มีองค์ประกอบหลายอย่างซึ่งจำเป็นต้องใช้ชื่อและนามสกุล มีนามสกุลไม่กี่ชนิด:

  1. นามสกุลปกติ (โจนส์)
  2. นามสกุลถังคู่ ("Vaughn Williams" หรือ "Louis-Dreyfus")
  3. นามสกุลทรูผสม {ระบุชื่อ: นามสกุล "Juan Pablo": "Fernández de Calderón", ชื่อรอง: "García-Iglesias"}

3 มีความสำคัญเพราะเขาคาดว่าจะได้รับการกล่าวถึงในฐานะ Mr. Fernández de Calderónไม่ใช่ Mr. Fernández de CalderónGarcía-Iglesias

ดังนั้นโดยทั่วไปมีฟิลด์นามสกุลที่จำเป็นและฟิลด์สำรองที่ไม่สามารถเปลี่ยนได้


0

คุณจำลองส่วนประกอบต่าง ๆ ของชื่อของใครบางคนได้อย่างไร ที่คุณทำไม่ได้ แทนที่จะสร้างแบบจำลองแยกฟิลด์สำหรับส่วนประกอบทั้งหมดของชื่อทางกฎหมายของใครบางคนรวมทั้งคำทักทาย, ชื่อ, ชื่อทางการชื่อผู้ใช้ชื่อเล่นและหมายเลขอ้างอิงที่ต้องการ

ราคาต่อรองเป็นระบบของคุณจริง ๆ แล้วใส่ใจมากที่สุด "ชื่อ" สำหรับใครบางคน:

  1. ชื่อที่แสดงซึ่งช่วยให้พวกเขารู้ว่าพวกเขาจะถูกบันทึกไว้ในระบบ
  2. ชื่ออย่างไม่เป็นทางการโดยที่คุณจะอยู่กับพวกเขาในโทรศัพท์
  3. ชื่ออย่างเป็นทางการที่คุณจะอ้างถึงพวกเขาในการติดต่อ
  4. ชื่อเรียงซึ่งเป็นการแสดงออกถึง # 2 ในทางที่มันจะสั่งซื้อได้ในรายการ

ระบบจำนวนมากจะใช้ชื่อทางการของใครบางคนสำหรับ # 1 และ # 2 โดยปล่อยชื่อเดียวที่คุณสนใจว่าเป็น "สตริงที่แทนชื่อผู้ใช้" และ "สตริงที่แสดงถึงวิธีการเรียงลำดับแบบเก่า"

จากมุมมองการสร้างแบบจำลองข้อมูลกำหนดเฉพาะค่าที่คุณต้องการจริงๆ วิธีที่ดีที่สุดในการปรับการจัดเก็บค่าเหล่านี้ให้ดีที่สุดคือรายละเอียดการนำไปใช้งาน - สิ่งที่คุณจะทำให้เกิดอาการปวดหัวหากคุณเพิ่มประสิทธิภาพมากเกินไป (แน่นอนคุณ "สามารถ" เก็บชื่อและนามสกุลได้ แต่คุณจะทำอย่างไรกับคนที่มีเพียงชื่อเดียว?)


-1

ลองพิจารณาเรื่องนี้ในอีกทางหนึ่ง

ระบบของคุณต้องเชื่อมต่อกับระบบอื่น ๆ มันไม่สำคัญว่าคุณจะมีความยืดหยุ่นแค่ไหนหากไม่ใช่ ดังนั้นระบบที่คุณต้องถ่ายโอนข้อมูลด้วยควรทำอย่างไร?

เมื่อฉันโทรหาแพทย์เพื่อขอนัดพวกเขาถามฉันถึงวันเดือนปีเกิดระบบจะแสดงรายชื่อคนที่ตรงกันจากนั้นพวกเขาก็ถามชื่อฉันและสุดท้ายขอที่อยู่ของฉันเพื่อยืนยันว่าพวกเขาเลือก บุคคลที่ถูกต้อง

แพทย์จำเป็นต้องรู้ชื่อที่อยู่ของฉันเมื่อพูดกับฉัน พวกเขายังจำเป็นต้องรู้ชื่อเพื่อที่จะใส่ตัวอักษรถ้าพวกเขาเขียนถึงฉัน

ดังนั้นไม่ใช่แค่ฟิลด์ข้อความเดียวที่อนุญาตให้มีช่องว่าง ไม่มีเหตุผลที่จะแยกชื่อแรกออกจากนามสกุลเว้นเสียแต่ว่าคุณจะดำเนินการด้วยวิธีเดียวกัน


3
คุณกำลังกรอกแบบฟอร์มในการเรียกร้องประกัน มันมี "นามสกุล" บุคคลนั้นมาจากญี่ปุ่น ในขณะที่คุณมีเวอร์ชันทับศัพท์คุณจะต้องใส่นามสกุลที่ถูกต้องในฟิลด์ คำไหน

@MichaelT สิ่งที่จะบอกว่าทุกคนมีชื่อสกุล?
เอียน

2
การได้รับชื่อจากบุคคลจากญี่ปุ่น (หรือประเทศอื่น ๆ อีกมากมายที่มีการตั้งชื่อตะวันออกคือชื่อแรกนั่นคือวิธีการแก้ไขอย่างไรก็ตามเมื่อกรอกแบบฟอร์มทางการแพทย์หนึ่งอาจต้องการชื่อครอบครัวและชื่อที่แตกต่างกัน สาขา? - วิธีการที่คุณจะใช้หนึ่งฟิลด์และตรงไปยังเขตข้อมูลที่เหมาะสมตัวอย่างอื่น ๆ ที่ได้รับคือถ้าคุณกำลังเรียงลำดับที่ชื่อครอบครัวและได้รับ "Joséคาร์ลเฟอร์นันโดAlmodóvar Soto" คุณจำเป็นต้องเรียงลำดับในAlmodóvarมากกว่าFernando.

@MichaelT ดังนั้นจึงจำเป็นต้องประมวลผลชื่อครอบครัวแยกต่างหากดังนั้นให้เป็นฟิลด์ของตัวเองและหวังว่าบุคคลที่พิมพ์รายละเอียดจะเข้าใจการตั้งชื่อตะวันออก
เอียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.