2010-10-11 23 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