所以这是基本问题:我希望能够在数据库中存储各种字段。这些可以是短文本字段(可能最多150个字符,通常可能更像50个)和长文本字段(可以存储整页文本的东西)。理想情况下,以后可以添加更多类型。
这些字段按常见的field_group id
分组,其类型与分类无关。
那么在MySQL中表示这个的最佳方法是什么?一个表格中包含不同类型的short_text
和long_text
列,其中一列是NULL
?还是有更优雅的解决方案?
(我希望这主要是通过轻松选择具有给定field_group_id的所有字段来驱动的。)
澄清
我实际上是在尝试允许用户创建自己的表,但没有实际创建表。
所以你有一个'Book'字段组,它有字段'Name'(短文本),'Summary'(长文本)。然后,您就可以在该书中创建条目。我意识到这基本上是MySQL的重点,但我需要有很多这些,并且不希望用户在我的数据库中创建整个表。
答案 0 :(得分:3)
您正在寻找的是一种EAV。使用EAV模型,您可以在世界上构建任何只有插入的怪异数据库。但是由于很多原因它真的很可怕,但你的声音听起来很糟糕,它可以奏效。
构建实体表
在这里你要列出
构建属性表。
在这里,您将列出来自实体的PK和属性列表。
我会使用这个词而不是数字PK。
然后在第三个表中,您将列出每个表的实际值,再次使用单词,但您有数字。
如果你想在一列上变得棘手,你可以有4列
然后在属性表中添加一列,说明要放置数据的列。
如果您计划将此数据库设置为“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