2010-08-05 66 views
29

我剛給一個我創建給我們的頭數據庫人員的數據庫圖,她在它上面放了一堆筆記,這表明我重命名了某些表,因此很清楚它們是查找表(將「lu」添加到表名)。什麼是查找表?

我的問題是,這些不符合我認爲查找表的定義。我一直認爲查找表基本上是一組沒有定義任何關係的選項。例如:

luCarMake 
----------- 
id Make 
-- --------- 
1  Audi 
2  Chevy 
3  Ford 

數據庫個人在我的工作是在暗示我重命名幾個表這只是ID的馬坪一個表到另一個查找表。示例(以下Location_QuadMap):

Location 
---------- 
LocationId 
name 
description 

Location_QuadMap <-- suggesting i rename this to luLocationQuad 
---------------- 
QuadMapId 
LocationId 

luQuadMap 
--------- 
QuadMapId 
QuadMapName 

它是安全的假設,她誤讀了圖或者是有沒有我不知道的另一個定義是什麼?

回答

28

你在那裏有什麼叫做junction table。它也被稱爲:

  • 交叉引用表
  • 橋表
  • 加入表
  • 映射表
  • 交集表
  • 連結表
  • 鏈路表

但我從來沒有看到用於此目的的術語「查找表」。

+5

我最後的經理不斷地將他們稱爲查找表。這是我在看到佈局之前知道桌子的唯一原因。 – 2010-08-05 23:10:57

+0

我也聽說過這叫做「通過桌子」。 – siliconrockstar 2016-06-28 02:04:58

4

有些人使用術語查找表作爲位於多對多關係中間的表。

+0

我通常聽到多對多表作爲橋表。而且,安倍對查找表的定義。那很有意思。 – bobs 2010-08-05 23:08:13

+0

很高興知道。從來沒有聽說過。 – 2010-08-06 04:44:45

20

選擇你的戰場,但我問的人明確的命名慣例看,他們已經使用相同的約定一個一對多和多對多一對多關係建議。看起來像任何外鍵關係意味着有一個「查找」表參與。

如果這是其他數據庫的命名約定,那麼我不會推我的運氣。

+0

說得好。有更重要的事情可以挖掘你的高跟鞋。 – 2010-08-06 00:09:26

+1

不能同意你的「挑戰」評論。 – 2010-08-06 04:17:09

9

查找表通常是一個充當某個「主列表」的表,您可以使用它來查找業務鍵值(如「Make」)以查找其標識符(如id列)在其他某個表的外鍵列中使用。

基本上,你有東西來「查找」並交換其他東西。

另一方面,location_quadmap是一個橋表,正如其他人已經說過的那樣,當您在兩個實體之間存在多對多關係時使用該橋表。如果你稱之爲查找表,那麼我會說任何表可以被稱爲查找表。這些表只包含其他表的標識符,因此您必須先查找一個表上的標識,查找橋表中匹配的標識,然後查找其中的匹配行。第三桌?似乎將這個術語稍微過分一點。

+0

感謝帕特里克,我正在研究父母 - 孩子的命名約定,我總是發現主查找更易於使用(因爲您提到查找的確切原因是主列表)。這個古老的術語「查找」讓我想起了VB和Delphi的日子,「查找」表是用於查找用戶可以輸入的值的可視化組件的屬性。您的描述完全適合,並且這些較早的開發人員可能會記住它是IDE的一部分。 – Petar 2017-02-08 09:55:31

3

Mark Byers對該表有正確的定義。基本上是一個交叉表。查看任何數據庫教科書。

但實際上我已經和很多DBA /架構師一起工作過,他們大多數都是爲了做事而創造出自己的風格,並且不願意聽任何其他的東西。諸如縮進規則,SQL語句的情況,表格的命名約定(甚至是非常糟糕的),存檔策略等等......如果它們控制着數據庫,你基本上沒有選擇。你可以提到它是一個交叉表,指向正確的文獻,但最後如果她想把它稱爲MyStupidlyLongAndPointlessPrefixForTablesBecauseICan_Lookup_Location_Quadmap,並堅持那麼你就無能爲力。

所以儘量指出來給她,但如果她不隨它去,不要把它太當回事......

我只是想到了別的東西。查找表(我們的定義)通常也稱爲代碼表。因此,她可能會調用交叉表查找表和查找表代碼表。在這種情況下,您可能必須學會說她的語言......

1

查找表是隻包含ID,名稱和一些主題/對象/事物的描述的表。 ID是主鍵和auto_increment。沒有其他的。

0

查找表的一種用途是存儲否則enum值。

說,我們有一個Status枚舉。

不是保存數據庫中每個記錄中的「未開始」,「正在進行」,「已完成」,「已發回」......,而是僅保存整數1,2 ......。

在編程方面,像實體框架這樣的ORM可以很容易地將底層整數轉換爲枚舉類型。

這樣,缺點是整數值不能從數據庫端讀取。在解決這個問題,我們添加一個查找表

Id Status 
1 Not Started 
2 In Progress 
... 

這樣能讓我們的DBA的字典,以「查找」,表示與此查找表加入狀態文本。