日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主外键引用关系,关于mysql:数据主/外键关系

發布時間:2023/12/4 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主外键引用关系,关于mysql:数据主/外键关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想對于那些已經開發了許多數據庫模式的人來說,這將是一個簡單的答案,但是我最近發現自己承擔了優化(或嘗試優化)數據庫模式的任務,并且一直在閱讀"高性能MySQL",并且剩下一個關于在模式中使用或"過度使用"外鍵關系的問題。例如,假設我有以下表格:

CUSTOMERS:

__________________________________

|CustIDPK| ?Name ?| ? RegDate ? ?|

----------------------------------

| ? 1 ? ?| ?frank | ?01-30-2014 ?|

| ? 2 ? ?| ?terry | ?02-01-2014 ?|

| ? 3 ? ?| ?amber | ?02-02-2014 ?|

| ? 4 ? ?| ?sara ?| ?02-06-2014 ?|

PRODUCTS:

____________________________________

| ProdIDPK | ProdName | AddedDate ?|

------------------------------------

| ? ?1 ? ? ?| ?Phone ?| 01-01-2014 |

| ? ?2 ? ? ?| ? TV ? ?| 01-02-2014 |

| ? ?3 ? ? ?| Tablet ?| 01-02-2014 |

| ? ?4 ? ? ?| ? PC ? ?| 01-05-2014 |

PRODUCT_RATINGS:

__________________________________________________________________

| ProdRateIDPK | ?ProdIDFK | ?CustID | ?Rating | ? ?TimeRated ? ?|

------------------------------------------------------------------

| ? ? 1 ? ? ? ?| ? ? 1 ? ? | ? ?1 ? ?| ? 8 ? ? | ? 01-01-2014 ? ?|

| ? ? 2 ? ? ? ?| ? ? 1 ? ? | ? ?2 ? ?| ? 7 ? ? | ? 01-01-2014 ? ?|

| ? ? 3 ? ? ? ?| ? ? 1 ? ? | ? ?3 ? ?| ? 8 ? ? | ? 01-02-2014 ? ?|

| ? ? 4 ? ? ? ?| ? ? 2 ? ? | ? ?4 ? ?| ? 6 ? ? | ? 01-02-2014 ? ?|

| ? ? 5 ? ? ? ?| ? ? 2 ? ? | ? ?4 ? ?| ? 6 ? ? | ? 01-03-2014 ? ?|

| ? ? 6 ? ? ? ?| ? ? 2 ? ? | ? ?3 ? ?| ? 4 ? ? | ? 01-01-2014 ? ?|

| ? ? 7 ? ? ? ?| ? ? 3 ? ? | ? ?2 ? ?| ? 5 ? ? | ? 01-02-2014 ? ?|

| ? ? 8 ? ? ? ?| ? ? 3 ? ? | ? ?1 ? ?| ? 7 ? ? | ? 01-03-2014 ? ?|

| ? ? 9 ? ? ? ?| ? ? 3 ? ? | ? ?1 ? ?| ? 4 ? ? | ? 01-04-2014 ? ?|

| ? ? 10 ? ? ? | ? ? 4 ? ? | ? ?2 ? ?| ? 9 ? ? | ? 01-04-2014 ? ?|

| ? ? 11 ? ? ? | ? ? 4 ? ? | ? ?3 ? ?| ? 8 ? ? | ? 01-01-2014 ? ?|

| ? ? 12 ? ? ? | ? ? 4 ? ? | ? ?4 ? ?| ? 7 ? ? | ? 01-01-2014 ? ?|

CUSTOMERS表獨立于PRODUCTS表而存在,因此未定義任何關系。由于任何一種產品都可以具有許多等級,因此PRODUCTS表與PRODUCT_RATINGS表具有一對多的關系。這很明顯。

現在,在PRODUCT_RATINGS表中的現有架構中,CustID列是CUSTOMERS表的外鍵,代表與產品評分的一對多關系,因為任何用戶都可以在該表中擁有許多評分(每個評分代表一個單獨的產品)。

我的問題:" CustID"列是否應定義為與CUSTOMERS表建立一對多關系的外鍵?我看不到在哪里需要此數據的聯接。據我所知," CustID"列僅在應用程序中用于區分哪個客戶發布了評級...

請注意,在此模式下ProdRateIDPK是多余的-基于您在(prodid,cust)或(prodid,custid,timerated)上具有完全適當的PK

任何兩個表都可以連接。 它們之間存在FK只是意味著該聯接將為每個引用的表行包含一個結果行。 只需向它們聲明所有候選鍵(即最小的PK / UNIQUE列集,即不包含較小者的列集)和FK。 (SQL要求您聲明在FK中引用的PK / UNIQUE列集。因此,您還必須聲明那些非最小的PK / UNIQUE列集和與之對應的FK,因此它們實際上是外來超鍵。)

我不熟悉您提到的這個問題:"在架構中"過度使用"外鍵關系"。 通常問題是使用不足。

定義外鍵關系有幾件事情。 最重要的是,它保證PRODUCT_RATING s表中的CustId列在CUSTOMERS表中是有效的CustId。 那很有用。

這樣做有后果,但是要弄清楚這種關系的存在是好的模式設計的一部分。 不能通過不尋常的"優化"概念來消除它。

我認為通過我進行循環的事情是當他們開始談論針對您的特定需求進行規范化和非規范化,并開始認為如果沒有發生聯接,則無需在PRODUCT_RATINGs表中將CustID列作為外鍵進行索引。 。 我了解您對保證CustID有效的含義。 如果刪除客戶,但仍然存在不相關的數據,可能會導致嚴重的問題。

是,product_ratings表中的CustId字段應該是客戶表的外鍵。 這就是數據庫規范化的全部內容。 我沒有讀過與您讀過的同一本書,但是我聽說過有關Mere Mortals的數據庫設計的好消息。

總結

以上是生活随笔為你收集整理的mysql主外键引用关系,关于mysql:数据主/外键关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。