当我们在django中添加数据库字段时,我们通常会写models.CharField(max_length=100, null=True, blank=True).同样是用ForeignKey,DecimalField等等.有什么基本的区别
null=True 只要blank=True 只要null=True, blank=True在相对于不同的(CharField,ForeignKey,ManyToManyField,DateTimeField)字段.使用1/2/3有哪些优点/缺点?
软删除是个好主意还是坏主意?
您只需将其标记为IsDeleted = true,而不是实际删除数据库中的记录,并且在恢复记录后,您可以将其标记为False.
这是一个好主意吗?
最好是物理删除记录,然后将其移动到存档数据库,如果用户想要记录回来,那么软件会在存档中查找记录并重新创建它吗?
我不认为我是唯一一个对此感到疑惑的人.您通常对数据库行为进行什么练习?您是否希望从数据库中删除记录?或者,仅使用"已删除"标志或布尔列标记记录以表示记录处于活动还是非活动状态更好?
我参与的项目的首席开发人员表示依靠级联删除相关行是不好的做法.
我不知道这有多糟糕,但我想知道你对它是否/为什么的看法.
说我有两张桌子,user而且comment.它们的表定义如下所示:
CREATE TABLE `user` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`deleted` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`username`)
) ENGINE=InnoDB;Run Code Online (Sandbox Code Playgroud)
CREATE TABLE `comment` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL,
`comment` TEXT,
`deleted` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
CONSTRAINT `fk_comment_user_id` FOREIGN KEY (`user_id`)
REFERENCES `user` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;Run Code Online (Sandbox Code Playgroud)
这非常适合强制执行数据完整性以及所有这些,但我希望能够"删除"用户并保留其所有注释(供参考).
为此,我已添加,deleted以便我可以SET deleted = 1 …
有时您想将数据库表记录标记为已删除而不是永久删除它,对吧?
你是怎样做的?
到目前为止,我一直在使用布尔"删除"字段,但我不确定它是否是一个很好的评论.
我想保留数据 delete
而不是soft-delete(使用is_deleted字段),我想将数据移动到另一个表(对于已删除的行)
我也不知道这个策略的名称是什么.叫档案?两表删除?
为了使这项工作,
我需要能够做到
对于给定对象(将被删除),查找具有该对象的外键或一对一键的所有其他对象.(这可以通过/sf/answers/162053741/完成,实际上比这更难,代码不够)
插入一个新对象并让#1中找到的所有对象指向这个新对象
删除对象
(essentiall我正在做级联移动而不是级联删除,1~3步应该以递归方式完成)
这将是最方便的,以弥补这方面,它支持一个mixin delete()和undelete()一个对象和一个查询集.
有人创造过这样的吗?
我从Liferay UI中删除了用户.有时候它要求停用然后删除.有些时候只能停用.并且用户不会始终使用db.因此,不可能重新创建同一个用户,因为它会抛出诸如"已存在电子邮件地址或存在用户名alreasdy"之类的错误.
从UI删除后为什么用户没有从数据库中删除?
我正在使用liferay-portal-6.1.1-ce-ga2.
如何解决这个问题?
database ×3
django ×2
mysql ×2
soft-delete ×2
sql ×2
cascade ×1
constraints ×1
foreign-keys ×1
liferay ×1
liferay-6 ×1
python ×1