2010-08-06 86 views
1

我在確定什麼是爲以下(相當複雜的)數據結構創建數據庫表的最佳方法時遇到了一些麻煩,我希望有更多經驗的人比我能幫上忙。我的麻煩的主要原因是規範化和不惜一切代價來避免查詢內部循環。MySQL:複雜的數據結構化和查詢

location 1 (location_group_name, owner_id, admin_id) 
    location 1.1 (name, address) 
    location 1.1.1 (name) 
     // DEVICE LIST 
     device 1 (manufacturer_id, model_id, serial, purchase_date, service_date) 
      Battery (manufacturer_id, model_id, purchase_date, service_date) 
      Accesory 1 (manufacturer_id, model_id, purchase_date, service_date) 
      Accesory 2 (...) 
      Accesory n (...) 
     device 2 
      Battery 
      Accesory 1 
      Accesory 2 
      Accesory n 
     device n 

     // STAFF LIST 
     person 1 (name, email) 
      qualification 1 (type, date) 
      qualification 2 (...) 
      qualification n (...) 
     person 2 
     person n 
    location 1.1.2 
    location 1.1.n 
    location 1.2 
    location 1.n 
location 2 
location n 

我目前想將每個設備和人的作爲一個序列化多維數組的,但我不知道如何將工作,由於這樣的事實,一個cron作業腳本將檢查service_date場每如果符合某些標準,則會將自動發送的電子郵件發送給位置組的管理員和所有者。使事情進一步複雜化,設備數據應該可以通過model進行搜索,以備在召回的情況下或通過serial_number來快速查找以防用戶有大量設備被添加和/或不完全知道其位置。

如果沒有太多要求,我還希望看到提出的數據結構的查詢示例(僅僅因爲我認爲它可能會使用連接,我對它們很不熟悉)。

此外,如果有任何額外的信息,你需要,請隨時問,我會很樂意詳細說明。

預先感謝您,任何輸入都將超過讚賞!

+0

是否總會有正好3層的位置?也許有一個白板,並開始繪製你認爲你需要的關係(然後迭代它尋找問題)... – ircmaxell 2010-08-06 16:13:38

+0

是的,總是會有3層的位置。我已經繪製了它,但我總是最終在循環內查詢,因爲沒有辦法控制將插入多少個位置/設備/工作人員,除了查詢內部循環有缺陷的事實之外。 – 2010-08-06 16:21:10

+0

我不是SQL專家,我構建了少於10個基於數據庫的應用程序,但我沒有看到需要在這裏查詢內部循環;你的結構幾乎完全是「等級的」(不確定這是否只有一個父母的官方稱號)。你能否詳細說明你預見的問題? – MvanGeest 2010-08-06 16:35:56

回答

2

我不完全確定你想在這裏做什麼,但爲什麼所有的層次?這是某種商店/設備/員工模型,對不對?在關係數據庫中,您可以將離散信息分離到各自的部分,並將它們與其他表關聯起來。因此,如果您擁有商店/設備/員工,則可以擁有「商店」表,「設備」表,「所有者」表,「員工」表,「stores_employees」表,「owners_stores」表,「 「devices_stores」表(您可以跟蹤庫存),「employees_qualifications」表等等。

+1

+1同意,並且'JOIN'解決所有可能的查詢,據我所知。但是因爲商店 - >員工只有一個 - >很多,所以你不需要製造額外的類似'stores_employees'的混亂。如果你(@FreekOne)願意,我可以使用Dia勾畫出它,幷包括一些示例查詢... – MvanGeest 2010-08-06 17:04:44

+0

哦,請原諒我,如果我完全誤解了這個問題,這總是一種可能性... – MvanGeest 2010-08-06 17:06:27

+0

+我也是如此,正如我的問題所述,我確實需要加入JOIN,而這正是我所需要的,唯一的問題是我從未做過像這樣複雜的事情,而且我也沒有知道從哪裏開始。該層次結構實際上顯示了信息將如何呈現在前端,這實際上非常重要,因爲可能會顯示大量的數據。 MvanGeest:如果你能做到這一點,我將不勝感激! – 2010-08-06 17:16:03

0

看起來你在location1.1.1和device之間以及location1.1.1和person之間有一對多關係。我想你最終會在一個循環中查詢,或者你將要做一些大的查詢並循環將它們合併在一起。

不要在循環中查詢。有了準備好的陳述,他們不必那麼慢。