在表格中存储多种格式

时间:2010-10-11 01:16:03

标签: sql mysql database database-design

所以这是基本问题:我希望能够在数据库中存储各种字段。这些可以是短文本字段(可能最多150个字符,通常可能更像50个)和长文本字段(可以存储整页文本的东西)。理想情况下,以后可以添加更多类型。

这些字段按常见的field_group id分组,其类型与分类无关。

那么在MySQL中表示这个的最佳方法是什么?一个表格中包含不同类型的short_textlong_text列,其中一列是NULL?还是有更优雅的解决方案?

(我希望这主要是通过轻松选择具有给定field_group_id的所有字段来驱动的。)

澄清

我实际上是在尝试允许用户创建自己的表,但没有实际创建表。

所以你有一个'Book'字段组,它有字段'Name'(短文本),'Summary'(长文本)。然后,您就可以在该书中创建条目。我意识到这基本上是MySQL的重点,但我需要有很多这些,并且不希望用户在我的数据库中创建整个表。

2 个答案:

答案 0 :(得分:3)

您正在寻找的是一种EAV。使用EAV模型,您可以在世界上构建任何只有插入的怪异数据库。但是由于很多原因它真的很可怕,但你的声音听起来很糟糕,它可以奏效。

构建实体表

在这里你要列出

  • 汽车
  • 植物

构建属性表。

在这里,您将列出来自实体的PK和属性列表。

我会使用这个词而不是数字PK。

  • 汽车|发动机气缸
  • 汽车|门
  • 汽车|使
  • 人物|名字
  • 人物|姓氏

然后在第三个表中,您将列出每个表的实际值,再次使用单词,但您有数字。

  • 汽车|发动机气缸| 4
  • 汽车|门| 4
  • 汽车|制作|本田
  • 人物|名字|斯蒂芬妮
  • 人物|姓氏|页

如果你想在一列上变得棘手,你可以有4列

  • 一个数字
  • a varchar
  • 约会
  • 一个clob

然后在属性表中添加一列,说明要放置数据的列。

如果您计划将此数据库设置为“Multitenent”,则需要添加一个OWNER表作为实体表的父级,因此您和我都可以拥有Car实体。

但是这个SUCKS要查询,SUCKS要索引,SUCKS除了玩具应用之外什么都不用。

答案 1 :(得分: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