簡述:目前我們的表設計,最高級別是6NF,對于PHP程序而已,表設計滿足3NF即可
如何滿足3NF,首先得滿足1NF,再滿足2NF,再滿足3NF即可。更高級別依次類推。
一、1NF定義
(1)、表的列不能再次被拆分(表的列具有原子性)
(2)、表中不能有重復的列
特殊:
(1)、只要是關系型數據,就天然滿足1NF
(2)、常見數據庫
關系型數據庫(Mysql,Oracle,Sql Server,Informix,DB2,Postgres)
非關系型數據庫(NoSql,Redis,MongoDB)
二、2NF定義
(1)、表中的行數據,不可以有兩條一模一樣的行數據,一般表通過設計主鍵自增字段來進行解決這個問題
三、3NF定義
(1)、表的列信息可以被隱形或者顯示的推導出來
假設:一個學生表,一個學生班級表,通過讀取學生表中存儲的班級表ID,進行左查詢學生表中的學生班級表的詳細信息,既滿足學生班級表的詳細信息
(2)、反3NF思維
假設:一個相冊詳情頁,每張圖片切換顯示都需要記錄每張圖片的點擊數,以及所有圖片點擊綜合
表設計:
album 表
id title viewclick
album_pics
id title viewclick album_id
表這樣設計即可,按照正常3NF設計標準,album是不需要viewclick,而是直接讀取album_pics中的數據然后count,但是album_pics是一個海量數據表,如果進行select操作是非常消耗資源的,所以我們使用反3NF設計標準,增加一個viewclick字段,每次圖片增加一次記錄數的時候album表的viewclick對應+1,可以通過PHP程序控制執行SQL語句,當然也可以創建觸發器進行觸發操作
- 前端
- 技巧匯總
- 構建 Node + Webpack + React 熱加載開發環境
- React
- Redux
- Webpack
- ES6
- HTML5+CSS3
- Javascript
- JS超簡潔拖動代碼
- jQuery
- 后端
- 技巧匯總
- 代碼中特殊的注釋技術——TODO、FIXME和XXX的用處
- PHP
- Xdebug不解之謎
- PHP時間獲取
- PHP遞歸優化 使用匿名函數進行遞歸
- PHP 發起POST請求
- PHP獲得數組的交集與差集
- PHP遞歸獲取下級數組,可指定ID,一維數組
- PHP 判斷是否為Get/Post/Ajax提交
- PHP實現分流隊列平均顯示信息
- PHP多維數組 指定列排序
- PHP 類Class詳解 筆記記錄
- PHP取整函數詳解
- Node
- Elasticsearch
- 數據庫
- 技巧匯總
- Mysql
- Mysql分區表實現
- Mysql union與union all 查詢
- Mysql 表中表查詢
- Mysql 分組查詢 與 分組條件查詢
- MySQL 添加列,修改列,刪除列
- Mysql優化之:構建海量表,定位慢查詢
- Mysql優化之:表的設計滿足3NF
- Mysql優化常見方法
- Mysql存儲過程詳解
- 運維
- 技巧匯總
- Linux
- Linux Centos系統下 設置代理服務器上網
- Centos7增加開機啟動腳本
- centos 掛載windows共享目錄
- CentOS設置SSH Key登錄
- Linux/CentOS單網卡綁定多個IP
- Windows
- Win10開機啟動項設置全解攻略
- PuTTY連接Linux服務器經常斷線解決方案
- Docker
- Docke啟動文件 docker-compose.yml
- Docker命令簡介(未完)
- Docker閑雜筆記
- Apache
- Nginx
- Nginx配置upstream實現負載均衡
- Nginx負載均衡學習
- IDE
- 技巧匯總
- WebStorm
- PHPStorm
- 協作
- 技巧匯總
- Git
- git 放棄本地修改 強制更新
- git編譯安裝與常用命令
- Svn