2015-12-19 15 views
0

我試圖發明在關係數據上施加層次結構的語法。 (我目前使用關係數據庫來存儲它,但這與問題無關)。我使用的示例是Fédération Cynologique Internationale(世界犬組織),其中列出了狗的品種。他們的數據組織如下:在關係數據上實施分層結構

  • 基本單位是一個品種。甲品種有:
    • 一個十組
    • 的組內的一個部分的(基團具有零到五段)
    • 部分
    • 一組可選的品種內可選的第
    • 甲集(一到兩個)的原籍地
  • 品種有一組可選的子簇的

我希望能夠表達放置品種的任何「合理」結構。下面是使用基於正則表達式語法一些實例中,用下面的解釋:

  1. 完整結構

    /組/(部分/(小節/)?)處/品種(/品種(/? subvariety)?)?

    • 該結構的頂層是組
    • 部分在下一級別,如果組具有任何
    • 如果組中包含的小節,這些是層級
    • 地方的下一級接下來,組,部分或分段內,因結構
    • 品種由地方
    • 如果品種有品種組織,這些都是未來
    • 如果一個品種有亞種,這些是下一個
  2. 按組和結構最小的名單列出。

    /group/place /(section /)?品種(/品種)?

    • 頂層是組
    • 地方去組
    • 節的地方
    • 品種是其部分中列出中列出內(無論他們是否有一個小節)
    • 如果一個品種有一個品種,它是下一個列表
  3. 列表組的每個原產地

    /位/組/品種

    • 排名第一
    • 場所內組羣

選項中

  • 品種:

    • 基於正則表達式的東西,如上所述。這很有吸引力,但我不確定如何表達「如果這個品種有一個品種,否則將它放在它所屬的品種中」,而不是「把這個品種放到它的組中」,而不管部分,如果有的話「。
    • XPath 2.0將是一種可能性,但它需要列舉所有可能性,如第一個示例所示:

      (/ group |/group/section |/group/section/subsection)/ place /(品種/品種/品種/品種)

      這似乎不雅觀。試想,如果地方是可選的,例如...
    • 東西基於Linux/UNIX命令行語法:

      組[/條[/款] /品種[/品種[/ subvariety]

    任何建議或想法?

  • +0

    我的經驗是,當我的關係數據將不適合一個漂亮的層次清晰,是時候重新考慮我的做法。通常我最終意識到我並不需要層次結構。有沒有什麼辦法可以解決你的問題而不使用層次結構? –

    回答

    0
    1. 有關可能的結構

    層次結構的幾點不能真正被徵收人關係數據庫(當時數據)。

    我嘗試把不同:

    • 層次是你的描述。它着手父母和孩子。舊的數據庫使用這個概念。關係數據庫使用不同的概念:由行(一組數據)和列(組的每個組件),關係(表間的相同字段)和查詢語言組成的表格,以便進行選擇,插入,更新,刪除:SQL。 SQL的力量在於他幾乎可以做所有事情,它是一個標準,每個產品幾乎都是兼容的。

    然後,你可以定義一個層次結構與關係數據庫,但它是由你(數據庫犯規知道你的想法)。

    例如:你可以創建一個像父親/孩子關係:

    品種:姓名+指數+的地方款+指數的指數

    款:姓名+部分

    指數+指標

    等等。

    XPATH不完全是一個層次結構,而是一個語法來指定XML文件中的路徑(用於選擇)。

    但是,正如您指出的那樣,XML定義了分層類型的數據結構。

  • 關於您的需求
  • 他們不會完全被定義。

    我想:

    • 要存儲DATAS

    • 你已經想過層次

    • 這似乎是 「只讀」 DATAS:一些字典,辭典,不是ERP :)

    • 數據量約爲數百或數千(狗品種),而不是數百萬

    • 表現如何?當然不是很重要

    • 那商店呢?有些東西要保存數據,並且可能會轉移它們。

    • 就這樣,最簡單的辦法可以是存儲在一個文件中

    XML結構您將能夠存儲和運輸移動它。

    您將能夠使用簡單的xpath檢索數據,並且路徑很容易理解,並且每個數據的文件也是如此。

    但是通過代碼修改它會更困難。如果你幾乎沒有修改,最好在文本文件中手工完成。

    如果您有多個層次結構,則必須有多個文件。

    希望它可以幫助你的工作