iT邦幫忙

0

使用json檔案當作DB欄位對照用

  • 分享至 

  • xImage

各位大大好
小弟有個問題很好奇想問問大家
就是在撰寫後端的時候
常會遇到一個欄位用英文名稱記 但要顯示中文給使用者看
像是下拉選單,table表格標頭
以往我是直接在DB中開一個table,當作欄位對照表,把每個代號和中文都當作data寫進去
要顯示的時候就去搜這個table

但現在小弟有個想法
就是寫成json檔案
類似這樣

{
    "name": "姓名",
    "amt": "收入",
    "sign_status": {
        "Y": "已審核",
        "N": "未審核"
    }
}

這樣的好處就是

  1. 我還能建立巢狀結構,在後端只要call這支就可以取得對應的轉換
  2. 做一些狀態的增減只要微調這檔案就好

而缺點目前想到就是會讀到用不到的資料
可能會有空間的浪費

想請問各位大大們
這方法是可行的嗎?
還是會依據專案大小來決定呢?

看更多先前的討論...收起先前的討論...
Han iT邦研究生 1 級 ‧ 2021-06-15 15:48:50 檢舉
你講的這個很像i18n,可以往這方面涉略看看,因為不清楚你使用的語言,所以就不貼其他的資訊給你看
st474ddr iT邦新手 2 級 ‧ 2021-06-15 15:54:32 檢舉
@Han 大大 感謝回覆
是的其實蠻接近在地化這種概念
小弟也是從撰寫Laravel後才有這種想法
所以想說能不能借巧運用在類似這種下拉bar的設計上
ckp6250 iT邦好手 1 級 ‧ 2021-06-15 16:23:32 檢舉
我覺得要看資料量大小來決定,
因為DB的table可以建索引檔,搜尋過濾比較快,
json就無此優勢了。
看資料大小 + 是否需要經常變更,如果資料不需要經常變更,就算資料量大使用 db 來記錄只要寫入 cache 讀取依然流暢
PPTaiwan iT邦好手 1 級 ‧ 2021-06-15 18:15:07 檢舉
當然可以,如果你使用的資料庫有支援 SQL TO JSON 的功能,寫 WebAPI 給 iOS , Android , Web 更輕鬆。

個人的作法就將 JSON 存在 Table Row ,結構與規格設計良好,更提供應用上的彈性作法
st474ddr iT邦新手 2 級 ‧ 2021-06-16 09:37:04 檢舉
先感謝各位大大的回覆
@ckp6250 大大
您說的有道理
這也是我考量的
DB就是能過濾快速 只找到自己想要的資料
  
@耿直小伙 大大
畢竟下拉欄位很少更動
看起來DB還是比較多優勢

@PPTaiwan 大大
可惜目前公司mysql版本太低
沒有支援到json格式的存放QQ
不過感謝提供另一個思考面向


從以上大大給的回覆
感覺DB的好處還是偏多
我小型專案可能會稍微嘗試json檔
而其他都已DB紀錄為主
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-06-15 21:36:48
最佳解答

你上面有說到使用 Laravel
其實 Laravel 的ORM(MODEL)裏面,可以幫忙你處理這件事。

就算不這樣用,單純用別稱的處理方式(AS)。也可以幫你處理成輸出中文欄位。

只是認真來說,一般還是由VIEW來處理這件事會比較好。
畢竟實體的欄位還是英文,轉換為中文欄位名,多少還是需要處理轉換的應用處理。
容易增加工作量。

大多數人只是不想增加工作量,但要做到這件事本身並不是很難。

st474ddr iT邦新手 2 級 ‧ 2021-06-16 09:26:46 檢舉

感謝大大回覆
使用Laravel在地化的確會擺在VIEW進行處理
好像我看過別人還有一種作法
是開facade去存放
不過我對此作法不是很了解
  
因為目前做的專案比較小 不用框架
純粹使用PHP
所以我才在考慮要不要參考使用這種方式來做
也想知道這種方式的可行性和優缺點
聽大大的講法 這種方法還是不錯的 只是比較費工?

因為你的做法,我早期也做過類似的。
不瞞你說,我曾經自創用JSON做的偽DB。
其中一個JSON就是用來存DB的結構。在裏面有存放KEY對應的中文字。
當時是用來在GRID上顯示用的。

大約還記得的是有一個是 table.json
節構是

{
    "dbName":{
        "dbStr":"表的名稱",
        "jsonFile":"對應的檔案名",
        "keyItme":{
            "itmeName1":{
                "itemName":"欄位中文名",
                "dataType":"int"
            }
        }
    } ,
}

然後資料是另外的JSON。
這當時是為了用在無後端語言的簡易DB處理方式。
為此還寫了一個很像下SQL碼的JS應用。

在還沒碰過框架之前,也為應用在PHP上。
不過這只能適合小型的就是了。
當時為了實驗。我試過塞1W筆左右的資料做搜尋。
就會有點問題了。

st474ddr iT邦新手 2 級 ‧ 2021-06-17 09:22:23 檢舉

感謝大大提供實作經驗
我大概明白拿捏的尺度了

我要發表回答

立即登入回答