Mysql

InnoDB 的規範化和分解表

  • May 14, 2012

我正在設計一個 Web 應用程序,它很小但處理大量讀取和插入。假設 60% 讀取和 40% 寫入。我的儲存引擎是 MySQL 上的 InnoDB。我有一個名為 User 的表,裡面有很多東西。我將其分解為較小的表,例如地址表和生物表。這是一個例子:

原表

User table
----------
user_id   PK
user_email
user_pass
user_dob
user_gender
user_country
user_state
user_city

拆開之後

User table
----------
user_id   PK
user_email
user_pass

Bio Table
----------
user_dob
user_gender

Address Table
-------------
user_country
user_state
user_city

那麼你們認為,擁有較小的表,但其中幾個更適合高流量數據庫,還是我應該將它們全部放在一張表中?

我是這樣看的,還是分開比較好,就是關係型數據庫

如果 N 個使用者可以有 1 個地址,那麼設計應該是:

在此處輸入圖像描述

如果 N 個使用者可以有 M 個地址(地址更多的使用者,以及多個使用者的地址),應該是: 在此處輸入圖像描述

對於這兩種設計,表 USER,列 ID 是該表的主鍵,而 User_id 只是一個 FK。在第二個設計中,表地址,列 ID,它是另一個 PK,它與使用者建立關係 N:M,並使用 2 個外鍵(使用者 PK 和地址 PK)創建“user_has_table”。

引用自:https://dba.stackexchange.com/questions/17849