你好,我在想这个。
我有两张table
Sessions
id_session
Session_Requests
id_session
id_request
url
如何在id\u会话之间建立一种关系,即当我删除会话时,请求仍将保留在该id\u会话中
EX:
Session id : 0923jguj45g8342
Request
id_session = 0923jguj45g8342
id_request = 1
url = https://example.com
当我用一个关系删除会话时,我有一个约束,即我不能再删除会话,或者用null代替不好的会话。
我想有关系,所以当我删除请求表将保持不变。
这可能吗?
2条答案
按热度按时间hjzp0vay1#
这可能吗?
假设该列上有外键:不,这是不可能的。不能让外键包含父表/列中不存在的值。
mysql提供了一组可能的引用操作,这些操作在删除引用行时自动发生:
cascade
放弃孩子的记录,set null
将子项设置为null
,或restrict
以防止删除。如果其中一个满足您的用例,您就可以使用它。一种可能的替代方法是在父表中创建一个表示会话状态的附加列,如
is_deleted
用一个boolean
数据类型,并且可以设置为某个特定值(例如1
)而不是删除记录。这样,您就可以存储信息而不必破坏密钥。9fkzdhlc2#
根据您的需求,考虑一个“连接表”(或“连接表”、“参考表”)(aside:does anyone 对这种关系使用其他术语?)
从requests表中删除“id\u session”,并包含一个额外的表,该表应该有两个引用-一个指向sessions,另一个指向session\u请求
无论何时插入加入会话的新请求,都必须插入相应的加入条目。无论何时删除会话,都必须删除该会话的联接表条目,并保留请求表
当您第一次听说这种方法时,它是违反直觉的,但是它是在关系数据库中表示多对多(以及非对多?)关系的最佳方法。你会发现这实际上使编码变得更容易。