2016-11-06 84 views
0

我在構建接口之前爲學校創建了一個作爲原型數據庫的測試數據庫。有一張桌子叫做hand,有5個不同的手,主鍵爲hand_id。下一個表稱爲會話,其會話包含一個會在其中包含多個hand_id的字段。用於範圍值的SQL插入

插入會話(session_id,手) values(0000001,????????);

我希望手的價值包括一個像001-005這樣的範圍有沒有一種方法可以把它放入一個像「001,002,003,004,005」這樣的字符串中,還有一種方法可以引用範圍內的單個值與選擇語句?

實施例:

會話表: SESSION_ID(PK)手 001 01,02,03,04 002 05,06,07 003 08,09

手錶: Hand_id。 Hand_data1。 Hand_data2 01.「有些數據」。 「某些數據」 02「某些數據」。 「有些數據」 03「有些數據」。 「某些數據」 04「某些數據」。 「有些數據」 05「有些數據」。 「一些數據」

基本上動手包括外鍵的手錶的陣列使用hand_id

+0

這是一個經典的理貨(或數字)表問題。如果您有一個表格,其中包含1-1000的數字(數字或統計表格),並且您可以使用它們加入它,則會得到5條記錄。有很多方法可以在SQL中輕鬆生成數據,但也許可以發佈更多示例數據,這樣就不會浪費時間發佈不適合的解決方案。 –

+0

如果您處於設計驗證階段,我建議您停止將數組存儲在單個數據庫字段中。這幾乎總會在以後引起問題。在這種情況下,我不明白你的申請或'手'的性質,所以我不能確定它是否適合1%的一部分。 –

回答

0

你問什麼 - 一個符號插入值的範圍爲記錄的列 - 是不是普遍支持。這裏有一個爲什麼的背景:

你所描述的是一對多的關係。 (好吧,除非多個會話可以包含同一隻手;那麼這是一種多對多的關係。)

對於程序員來說,很自然的用數組來考慮這個問題;但通常情況下,這不是在關係數據庫中完成的方式;所以標準的sql沒有陣列支持。

一些關係數據庫確實有不同程度的支持的數組類型,但通常規則是每列每行有一個值。

如果每手屬於只有一個會話,然後而不是把一個handssession你會放一個session_id列上hand表。否則(如果一隻手可能涉及多個會話),您只需要一個hand_idsession_id的交叉引用表。然後這個交叉引用對於有5個手的會話將有5行。

以下這些模式涉及最基本的規範化規則之一:沒有多值列。遵循規範化規則將使所有事情變得更加容易

+0

謝謝,這解釋了它。我有我的模式搞砸了,我會重新設計 –