看板 Soft_Job 關於我們 聯絡資訊
既然提到id這件事 沒人帶的本菜鳥就想借問一下相關的問題 可能也發生了很低能的錯誤 (PHP + MYSQL) 給大家笑笑 1.目前我手上的資料庫大多數table都用mysql的auto increment int來當id。 然後 因為目前table間的relationships 都是用php去取 (laravel的ORM) 而不是用sql的foreign key 直接delete單一會讓系統崩潰,網頁500。 所以我在有可能要刪除的table 都會加一個名為status的tinyinteger 來判斷這筆資料是不是被刪掉了 ((想說日後可能可以做個資源回收桶之類的功能 目前公司沒有人會直接刪除資料 但如果之後有了 那我這種做法有什麼解套的方式嗎? ================== 2.方才提到大部分是increment integer 事實上有一個table的id是char 而且更糟糕的是這個id還兼當名稱使用 然後此id也被其他table用來建立關係 想請問各位大大 先前因為塞入的字串太大讓這個id 溢位 導致使用php的ORM建立的relationships時 直接觸發SQL Exception,讓系統掛掉 最後直接在前後端都設定名稱長度限制解決這個問題 除了這個情況之外 還有可能會遇到什麼問題? 是不是要想辦法修改資料庫的架構比較好 =================== 3.最近公司想要做一個動態表單的功能 我發現MYSQL有json型態可以用 就大膽放心地把所有表單的內容全都塞到這個欄位中 測試下來沒遇到什麼大問題 請問這個是合理的做法嗎? 小的目前基本上是一人做前後端 畢業不滿一年,所以還真很多東西不知道 拜託各位給個意見,面對日後越來越多人用我真心怕自己踩到什麼雷 ----- Sent from JPTT on my Asus ASUS_Z017DA. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.119.119 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1557917474.A.0F8.html
stevekevin10: 1.這是設計問題,要馬不要用ORM的關聯不然就不要隨 05/15 19:19
stevekevin10: 意删資料,大型的系統建議都不要有FK 05/15 19:19
stevekevin10: 2.建議pk就乖乖做pk的事情就好 05/15 19:20
stevekevin10: 3.可能的問題在於你之後改表單json內容改變時,過去 05/15 19:21
stevekevin10: 的資料跟新的資料用同一個邏輯層去跑可能會出錯。 05/15 19:21
1.我該慶幸當初因為覺得fk在laravel不好管才不用嗎哈哈 2.好的。之後另外寫邏輯將其矯正過來 3.會用json的地方不多。且目前系統不打算讓使用者更動舊的資料,所以還可以應付 謝謝您的建議
ashlikewing: 沒事不要用fk,用狀態值記錄刪除是可以的,但是如果 05/15 19:36
ashlikewing: 你的資料成長級數太快那最好評估一下這些留滯的資料 05/15 19:36
ashlikewing: 比例有沒有意義 ,表大是會影響效能的 05/15 19:36
效能問題之後可能會慢慢浮現。謝謝建議。
localhost: 都用ajax最簡單 05/15 19:38
ashlikewing: 不確定MYSQL的json支不支援索引,如果你要拉裡面的 05/15 19:39
ashlikewing: 資料做join要小心 05/15 19:39
zelda123: 1. Laravel 有支援 deleted_at 做 soft delete 05/15 22:15
目前預計整個系統僅有表單資料庫與其格式的設定檔的儲存會是json,能不用我也不想再用,畢竟用起來沒其他預設類別順
zelda123: 3. JSON 之後很難維護,不建議濫用 05/15 22:15
pseudoman: 沒事不用fk?資料庫都不正規化嗎@@ 05/15 22:49
lemon651: 大型系統不用fk的話,那用關連式資料庫的用意何在? 05/15 23:52
ashlikewing: 正規化和fk有什麼必要關係嗎?沒有fk就不能做了? 05/16 00:30
ashlikewing: 這篇文章 http://bit.ly/2Ypz2o2 參考一下 05/16 00:30
blackie1019: 大型資料庫真的不要亂用與濫用FK,懂得就懂。不懂硬 05/16 01:12
blackie1019: 要來學術派戰文字的就對他笑笑就好 05/16 01:12
yaya517: 看過很多大型CRM確實都沒有在用FK的 05/16 07:15
alan3100: soft delete是基本,join key是長字串在某些情況效能很差 05/16 07:23
好的。我會看看soft delete. 目前系統沒啥用到join.日後有需求時會多注意 ※ 編輯: newhandfun (223.136.119.119), 05/16/2019 08:31:00 ※ 編輯: newhandfun (223.136.119.119), 05/16/2019 08:35:05 ※ 編輯: newhandfun (223.136.119.119), 05/16/2019 08:37:57 ※ 編輯: newhandfun (223.136.119.119), 05/16/2019 08:40:06
silent5566: 大型系統不推薦設FK 表格間相關太多時會被FK制肘 05/16 10:46
lwtech: 他掛掉的原因一定有Log,然後優化它 05/16 11:24
lwtech: 通常都是人下錯SQL,導致很慢,然後mySQL只能玩到GB級 05/16 11:27
謝謝您的數據。 之後如果有要儲存大量資料,打算換成postgresSQL ※ 編輯: newhandfun (223.136.119.119), 05/16/2019 22:32:24
lwtech: PSQL一樣,高併發高可用高網路本來就是三個不一樣的選擇 05/16 23:26
lwtech: 你要會db tunning 才重要,所以才會需要DBA 05/16 23:27
Tony427: 正規化用久了,還會聽過反正規化喔XD 05/28 17:57