MySQL中的哈希字符串
MySQL中是否存在某种哈希字符串类型 假设我们有一张桌子MySQL中的哈希字符串,mysql,sql,Mysql,Sql,MySQL中是否存在某种哈希字符串类型 假设我们有一张桌子 user | action | target ----------------------- 1 | likes | 14 2 | follows | 190 我不想将“action”存储为文本,因为它占用大量空间,而且索引速度很慢。行动可能是有限的(我猜最多50个行动),但可以在将来添加/删除。因此,我希望避免在PHP中按数字存储所有操作。我希望有一张透明的桌子 例如,上面的表将在内部存储为(1,1,14)、(2,
user | action | target
-----------------------
1 | likes | 14
2 | follows | 190
我不想将“action”存储为文本,因为它占用大量空间,而且索引速度很慢。行动可能是有限的(我猜最多50个行动),但可以在将来添加/删除。因此,我希望避免在PHP中按数字存储所有操作。我希望有一张透明的桌子
例如,上面的表将在内部存储为(1,1,14)、(2,2190),键将存储在另一个表中(1=likes,2=follows)
这里“likes”解析为1
INSERT INTO table (23, "dislikes", 1245)
这里我们没有“不喜欢”的键,它被添加并作为3存储在内部
可能吗?您需要一个名为“actions”的表和一个名为“action\u id”的外键。这就是数据库规范化的工作原理:
用户操作:
user | action_id | target
-----------------------
1 | 1 | 14
2 | 2 | 190
行动:
id | name
--------------
1 | likes
2 | follows
至于让插入到用户的动作中(1,'likes',47)
起作用:你不应该在意。试图使SQL变得漂亮是一种毫无意义的追求;实际上,您不应该在应用程序代码中编写任何代码。数据库交互应该由一层模型/业务对象来处理,它们的内部实现对您来说并不重要
至于将插入到用户操作中(1,'不喜欢',47)
自动在操作表中创建新记录:这同样不是数据库的工作。您的模型应该能够处理这个问题。您需要一个名为“actions”的表和一个名为“action\u id”的外键。这就是数据库规范化的工作原理:
用户操作:
user | action_id | target
-----------------------
1 | 1 | 14
2 | 2 | 190
行动:
id | name
--------------
1 | likes
2 | follows
至于让插入到用户的动作中(1,'likes',47)
起作用:你不应该在意。试图使SQL变得漂亮是一种毫无意义的追求;实际上,您不应该在应用程序代码中编写任何代码。数据库交互应该由一层模型/业务对象来处理,它们的内部实现对您来说并不重要
至于将插入到用户操作中(1,'不喜欢',47)
自动在操作表中创建新记录:这同样不是数据库的工作。您的模型应该能够处理这个问题。是的,子查询如下:
INSERT INTO table (23, (SELECT id FROM actions WHERE action="dislikes") , 1245)
通过这种方式,可以不知道PHP端的ID,而只知道操作名称,并且仍然将其作为ID输入数据库
这是假设您有一个“操作”表
id | action
-----------
1 | like
2 | dislike
是的,有这样一个子查询:
INSERT INTO table (23, (SELECT id FROM actions WHERE action="dislikes") , 1245)
通过这种方式,可以不知道PHP端的ID,而只知道操作名称,并且仍然将其作为ID输入数据库
这是假设您有一个“操作”表
id | action
-----------
1 | like
2 | dislike
如果有一组固定(或合理固定)的值,则可以使用枚举字段。这在内部实现为位掩码,因此占用少量磁盘空间。以下是一个示例定义:
CREATE TABLE enum_test (
myEnum enum('enabled', 'disabled', 'unknown')
);
如果有一组固定(或合理固定)的值,则可以使用枚举字段。这在内部实现为位掩码,因此占用少量磁盘空间。以下是一个示例定义:
CREATE TABLE enum_test (
myEnum enum('enabled', 'disabled', 'unknown')
);
嗨,米加,我知道!这正是我想要的。我可以很容易地创建一个视图,允许获取(1,“likes”,14)元组,但我也希望在编写时有类似的包装。嗨,meagar,我知道!这正是我想要的。我可以很容易地创建一个允许获取(1,“likes”,14)元组的视图,但我也希望在编写时使用类似的包装器。这很好。但我可以创建类似于视图的东西,允许我将INSERT写入虚拟_表(23,“dislikes”,1245)
,并将其转换为您的示例吗?您可以使用存储函数,但这仍然意味着您必须以不同的方式编写它。您也可以使用PHP和正则表达式来更改它,但这不是您想要的方式。我认为这是最好的option@user1019812您可以做一些事情,将插入到虚拟_表中(23,(从actions中选择id,action='dislikes'),1245)
您不需要存储函数,但在这种情况下使用存储函数可能更易于维护。这很好。但我可以创建类似于视图的东西,允许我将INSERT写入虚拟_表(23,“dislikes”,1245)
,并将其转换为您的示例吗?您可以使用存储函数,但这仍然意味着您必须以不同的方式编写它。您也可以使用PHP和正则表达式来更改它,但这不是您想要的方式。我认为这是最好的option@user1019812您可以做一些事情,将插入虚拟_表(23,(从actions中选择id,其中action='dislikes'),1245)
您不需要存储函数,但在这种情况下使用存储函数可能更易于维护。