# Column Names as Contracts

**URL:** <https://discuss.dataengineercafe.io/t/column-names-as-contracts/600>\
**Category:** 97 Things Every Data Engineer Should Know\
**Created:** [July 7, 2023, 1:07am UTC](https://discuss.dataengineercafe.io/t/column-names-as-contracts/600 "2023-07-07T01:07:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)\
**Post date:** [July 7, 2023, 1:07am UTC](https://discuss.dataengineercafe.io/t/column-names-as-contracts/600/1 "2023-07-07T01:07:40Z")

</div>

โดย [Emily Riederer](https://emilyriederer.netlify.app/)

เวลาเราพัฒนาซอฟต์แวร์ เราก็จะใช้พวก unit tests แล้วก็ service-level agreements (SLAs) เหมือนเป็นคำมั่นสัญญาในเรื่องของ performance และมี interfaces ที่เป็น common symbols และ labels

อย่างไรก็ตาม data tables (ตารางข้อมูล) มันจะเหมือนอยู่กลาง ๆ ระหว่างของที่เป็น service กับการออกแบบ application ทำให้ต้องมีการสื่อสารกับเพิ่มเติมระหว่างฝั่ง data producers กับฝั่น data consumers หรือเราจะเรียกการสื่อสารตรงนี้ว่า “contract” ซึ่งถ้าขาดตรงนี้ไปจะทำให้การคุยกันทั้ง 2 ฝั่งไม่เข้าใจกัน และปัญหาเรื่อง data quality ก็จะตามมา

เราสามารถที่จะมานิยาม และออกแบบส่วน data table กันได้ก่อนว่าเราจะใช้ศัพท์หรือข้อตกลงกันประมาณไหน เช่น

- ID – หมายถึง integer และเป็น unique identifier
- IND – หมายถึง binary
- N – หมายถึง integer ที่เป็นจำนวน
- AMT – หมายถึง numeric ที่เราสามารถหาผลรวมได้
- VAL – หมายถึง numeric เช่นกัน แต่หาผลรวมไม่ได้ เช่น rate หรือ latitude กับ longitude
- DT – หมายถึง date ที่อาจจะมีรูปแบบคือ YYYY-MM-DD
- TM – หมายถึง timestamp

ถ้าเป็นระบบ ride-share อย่าง Uber เราก็อาจจะออกแบบชื่อ column ได้คือ ID\_DRIVER, TM\_ORIG, VAL\_DEST\_LONG หรือ IND\_TRIP\_SURGE เป็นต้น

ซึ่งการตั้งชื่อแบบนี้ก็จะเป็น interface ที่เข้าใจง่ายกับผู้ใช้งาน แล้วก็จะช่วยให้เรา automate งานพวก data management ได้ด้วยเช่นกัน แล้วเรื่อง data quality ก็ทำได้ง่ายขึ้นด้วย อย่างน้อยเราก็รู้ว่า column ไหน หมายถึงอะไร และมี data type ประมาณไหน

ทีนี้ต้องบอกว่า “no silver-bullet” นะ ขึ้นอยู่กับปัจจัยหลาย ๆ อย่างที่เราต้องคำนึงถึงด้วย แต่อย่างน้อยการตั้งชื่อ column ก็เป็นการทำ contract ที่ง่าย และดีวิธีหนึ่งที่เราสามารถเอาไปประยุกต์ใช้งานต่อได้

---

<div class="post-metadata">

**Author:** ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)\
**Post date:** [July 7, 2023, 1:15am UTC](https://discuss.dataengineercafe.io/t/column-names-as-contracts/600/2 "2023-07-07T01:15:34Z")

</div>

ในหนังสือจะเป็นเวอร์ชั่นย่อ ๆ ส่วนเวอร์ชั่นเต็มอ่านได้ที่เว็บของ Emily เองเลย

> **[Column Names as Contracts | Emily Riederer](https://emilyriederer.netlify.app/post/column-name-contracts/)**
>
> Using controlled dictionaries for low-touch documentation, validation, and usability of tabular data
