2010-10-11 25 views
1

所以這裏的基本問題是:我想能夠將各種字段存儲在數據庫中。這些可以是簡短的文本字段(可能最多150個字符,一般可能更像50個字符)和長文本字段(可以存儲整個文本的整個頁面)。理想情況下,稍後可以添加更多類型。在表中存儲多種格式

這些字段是按普通field_group id s,而它們的類型真的不應該有任何與分類。

那麼在MySQL中表示這個最好的方法是什麼?一個表有short_textlong_text不同類型的列,其中之一是NULL?還是有更優雅的解決方案?

(我想這是便於將主要驅動選擇與給定field_group_id所有字段。)

澄清

我基本上是試圖允許用戶創建他們自己的表,但沒有實際創建表格。

所以,你就會有一個「書」字段組,這將有場「名稱」(短文本),「摘要」(長文本)。然後你就可以在這本書中創建條目。我意識到這基本上是MySQL的全部要點,但我需要很多這些,並且不希望用戶在我的數據庫中創建整個表。

+0

對不起,我還沒有關注。你需要你的用戶1)創建_table_,然後在其中輸入數據,或者2)只將_data_輸入到預定義的表中?在1的情況下:他們可以輸入組名(這將成爲表格)和字段名稱(以及不同的設置)。在2的情況下:稱爲「書籍」的表格,並且用戶可以通過填寫標題和摘要來輸入添加新書。 – Alec 2010-10-11 01:46:45

+0

我需要用戶能夠創建像表格一樣的功能,然後能夠在其中輸入數據(如果您願意,可以使用'行')。 – 2010-10-11 02:28:10

+0

您是否計劃使用多租戶架構? – 2010-10-11 20:17:48

回答

3

你要找的是所謂的EAV。使用EAV模型,只需插入就可以構建世界上任何令人震驚的數據庫。但是,由於很多原因,這真的很糟糕,但你的聲音聽起來很瘋狂,它可以奏效。

建立一個實體表

在這裏你會列出

  • 植物

建立一個屬性表。

這裏您將列出來自實體的PK和屬性列表。

我會用這個詞代替數字PK。

  • 汽車|發動機氣缸
  • 汽車|門
  • 汽車|製造
  • 人|名字
  • 人物|姓氏

然後在第三個表格中,您將列出每個表格的實際值,再次使用單詞,但您會有數字。

  • 汽車|發動機氣缸| 4
  • 汽車|門| 4
  • 汽車|製作|本田
  • 人|名字| Stephanie
  • 人物|姓氏|第

如果你想變得棘手,而不是對值一列,你可以有4列

  • 一些
  • 一個varchar
  • 日期
  • 一個CLOB

然後在屬性表中,您可以添加一列指出將數據放入哪一列。

如果您計劃將此數據庫設置爲「Multitenent」,則需要添加OWNER表作爲實體表的父項,這樣您和我都可以擁有一個Car實體。

但是這個SUCKS查詢,SUCKS索引,SUCKS用於除玩具應用程序以外的其他任何東西。

+0

很好的答案,特別是SUCKS部分。 – 2010-10-31 17:16:39

0

我完全不知道你所說的「場羣」的意思,但如果該信息(短文本,長文本)都屬於某個條目,您可以創建一個表,包括所有那些列。

假設你有一個標題和摘要一堆書:

table: `books` 
- id, int(11) // unique for each book 
- title, varchar(255) 
- writer, varchar(50) 
- summary, text 
- etc

字段不一定需要設置可以被默認設置爲NULL。

爲了獲取信息,簡單地選擇所有的字段:

SELECT * FROM books WHERE id = 1

,或一些字段的:

SELECT title, writer FROM books ORDER BY title ASC
+0

對不起,請看上面的說明。 – 2010-10-11 01:34:58