Mysql 我如何处理希望SQL列允许不同类型的问题?

Mysql 我如何处理希望SQL列允许不同类型的问题?,mysql,sql,django,django-models,entity-relationship,Mysql,Sql,Django,Django Models,Entity Relationship,我基本上有一个表,其中包含一个rowid、person\u id(此处不重要)、键和值。我的问题是,我的应用程序需要能够支持不同类型的values:一些int、一些文本字段和一些包含多条信息的复合类型。我能想到的解决这个问题的唯一方法是将value更改为value\u table和value\u id,其中每种类型的值都有不同的表,value\u id是所需值的value\u table给出的表中的主键 不过,我对SQL还不熟悉,所以我想知道这是否是一个坏主意,因为我没有想到什么原因。将valu

我基本上有一个表,其中包含一个
rowid
person\u id
(此处不重要)、
键和
值。我的问题是,我的应用程序需要能够支持不同类型的
value
s:一些int、一些文本字段和一些包含多条信息的复合类型。我能想到的解决这个问题的唯一方法是将
value
更改为
value\u table
value\u id
,其中每种类型的值都有不同的表,
value\u id
是所需值的
value\u table
给出的表中的主键

不过,我对SQL还不熟悉,所以我想知道这是否是一个坏主意,因为我没有想到什么原因。将value_id作为一个外键放入多个表中似乎很奇怪,而且编写查询以启用数据访问似乎也很困难(特别是因为我是从Django的ORM执行此操作的)

编辑更多详细信息:

我的应用程序包含用户添加的字段,用户在其中设置字段的名称(如映射键)和值,以及值的类型。该值可以是任意值,从布尔值或整数到10000多个字符的文本字段或由多个SQL基元类型组成的复合类型


我可以在这里的文本字段中使用JSON,但我永远无法实现任何类型的按值排序或过滤,这是一项要求。

我认为您的列类型通常不应该更改。如果存在此问题,则可能存在潜在的设计问题。也就是说,
TEXT
可以支持数字和字母,因此如果需要,您可以随时转换为数字。TEXT | varchar类型可以保存字符串以及int、float、date等,但它是字符串类型。如果需要,您需要转换| cast类型。在这里,您似乎希望使用诸如Redis之类的键值存储,而不是RDBMS。但是在MySQL中存储不同类型的值的一种方法是将您的内容包装成JSON字符串,只要它们只是文本和数字谢谢您的评论,我已经编辑了这个问题,以提供更多的细节。我非常感谢你所有的建议!如果你不介意的话,你能简单地谈谈为什么我的建议不是一个好主意吗?看来大家一致认为我不应该走多表路线,我想知道原因。非常感谢。关于多表的想法:你自己回答你的问题——因为用普通SQL很难访问数据。您总是需要编写一些动态代码来构建查询,比如从表a中选择concat('SELECT which FROM',a.table_name,'WHERE…'),然后执行该查询。您也不能强制引用完整性,因为外键约束总是需要一个引用表。我认为您的列类型通常不应该更改。如果存在此问题,则可能存在潜在的设计问题。也就是说,
TEXT
可以支持数字和字母,因此如果需要,您可以随时转换为数字。TEXT | varchar类型可以保存字符串以及int、float、date等,但它是字符串类型。如果需要,您需要转换| cast类型。在这里,您似乎希望使用诸如Redis之类的键值存储,而不是RDBMS。但是在MySQL中存储不同类型的值的一种方法是将您的内容包装成JSON字符串,只要它们只是文本和数字谢谢您的评论,我已经编辑了这个问题,以提供更多的细节。我非常感谢你所有的建议!如果你不介意的话,你能简单地谈谈为什么我的建议不是一个好主意吗?看来大家一致认为我不应该走多表路线,我想知道原因。非常感谢。关于多表的想法:你自己回答你的问题——因为用普通SQL很难访问数据。您总是需要编写一些动态代码来构建查询,比如从表a中选择concat('SELECT which FROM',a.table_name,'WHERE…'),然后执行该查询。您还无法强制引用完整性,因为外键约束始终需要一个引用表。