-
为每个表增加一个标记删除的字段好么10
最近在做一个项目,表关系比较复杂,而且以后可能会有很大扩展。我想为每一个表建立一个表征是否可用的字段,“1”为可用,“0”为禁用,默认为“1”,用户在前台所做的“删除”仅能改变此字段的值,真正的删除只能通过后台实现,请问这样做的优缺点是什么?2008年11月23日 20:11
14个答案 按时间排序 按投票排序
-
采纳的答案
因为你上面说到了你们做的东西的表结构比较复杂,那么这点就很明确了。做逻辑删除(设标记)比物理删除要好的多,因为你在多表进行操作的时候一定是有关联的,如果你物理删除了这个字段,在你下次再跑程序的时候,你关联的方法会因为找不到你的这条记录而报错误,这样你的维护起来就很不好维护了。
但是逻辑删除和物理删除也要分情况,如果是末级的记录,经常更新的,为了维护起来方便可以设置成物理删除的,如果是标题类的,或者是菜单中的比较重要的关联表中的记录,那么最好就打上标记,以防以后操作中因没有了关联记录而报错误。
我不知道这些能否帮助你解决问题,但是应该会有一些帮助吧,呵呵!2008年11月25日 12:27
-
比方说A表中存在有BID。
你显示A表的时候需要把B表的信息显示出来。
如果你删了你的B表记录,那么你的程序要么是报错,要么是显示为空。这样子的情况做为一些数据记录的表来讲是很好的一件事情。
所以就会有active这种字段的产生。
一般用于数据档案表。2008年11月26日 10:08
-
这个方法非常好,我发现有不少系统都是这样做的。
LZ的业务逻辑很复杂的话,删除一条记录可能会牵连到很多其他表的修改,这时如果实时操作的话很可能导致数据库并发度下降。 标记删除后可以在晚上运行一个回收数据的任务,这样可以比较好的解决残余数据的问题。2008年11月23日 20:11
-
这个要看业务的,业务是否需要逻辑删除,做某种特殊效果考虑这种方式。
不然你很容易让整个系统都是过期的数据,没有一个表是可以删除数据的。
增大的麻烦性你都可以感到恐怖。
历史数据可以考虑移动到别的表。
在一个万一怕用户删除失误需要恢复,不是还有数据库恢复功能的嘛,不用
自己吭哧吭哧吧2008年11月23日 20:11
相关推荐
在Oracle数据库中,如果一个表中存在某个字段已经不再被使用或者该字段需要被替换,那么可以通过`ALTER TABLE`语句来删除该字段。这一操作会永久地从表中移除指定的列,因此在执行之前需要确保该字段的数据确实不再...
**示例**:向表`test1`中添加一个名为`name`的字段,数据类型为`VARCHAR2(30)`,默认值为`'prg'`,并且不允许为空。 ```sql ALTER TABLE test1 ADD (name VARCHAR2(30) DEFAULT 'prg' NOT NULL); ``` 如果需要同时...
假设有一个名为`employees`的员工信息表,现在我们需要增加一个字段`email`用于存储员工的电子邮箱地址: ```sql ALTER TABLE employees ADD COLUMN email VARCHAR(255); ``` 如果还需要设置默认值,则可以在创建...
在Oracle中若删除一个不存在的表,如 “DROP TABLE tableName”,则会提示: ORA-00942:表或视图不存在 若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER;...
`DROP TABLE`命令用来删除一个已存在的表结构。 **语法示例:** ```sql DROP TABLE 表名; ``` #### 三、插入数据 (Insert Into) `INSERT INTO`命令用于向表中插入新的数据记录。 **语法示例:** ```sql INSERT ...
- 当创建一个带有AUTO_INCREMENT属性的表时,可以使用`AUTO_INCREMENT=n`选项指定自增字段的初始值。 - 对于已存在的表,可以使用`ALTER TABLE table_name AUTO_INCREMENT=n`命令来更改自增字段的起始值。 2. **...
1. 创建两个转换:一个用于获取表信息(方法1、方法2),另一个用于处理单个表并添加字段(方法1或方法2的子转换)。 2. 在获取表信息的转换中,使用`Table Input`查询源数据库中的表名,并通过`Filter Rows`和`...
例如,如果你有一个名为`employees`的表,并且你想知道该表中有多少个字段,那么你应该这样写: ```sql SELECT COUNT(*) FROM `information_schema`.`COLUMNS` WHERE `TABLE_NAME` = 'employees' ORDER BY COLUMN_...
例如,可以创建一个名为`metadata`的JSON字段,用来存储用户特定的信息,如用户头像URL、生日等。这种方法的优点是灵活,但缺点是查询复杂,且可能影响数据库的性能。 另一种策略是使用EAV(实体-属性-值)模型。在...
假设我们要向名为`users`的表中增加一个`email`字段,可以这样写: ```java @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion ) { // 如果是从版本1升级到...
例如,要创建一个包含id、创建时间(createtime)等基础字段的表,可以编写如下代码: ```php M()->execute("CREATE TABLE `users` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `createtime` DATETIME DEFAULT ...
S4 HANA MSEG 增加自定义字段和MSEG扩展字段.docx
在上面的代码中,我们创建了一个名为 `getstr` 的 UDF,该函数接受一个 `@单位名称` 参数,并返回一个字符串类型的结果。在函数体中,我们使用了一个 WHILE 循环来遍历表中的记录,并将每个记录的 `收费类别` 字段值...
这个函数接收INPUT参数(可能是一个结构体或表),并根据其中字段的值来设置OUTPUT参数的对应字段的标记。如果INPUT中的字段非空,那么在OUTPUT中对应的字段将被设置为FLAG的值,通常是'X'。 函数内部首先获取INPUT...
- **示例场景**:假设我们要在VA05这个标准报表中增加“欠交货数量”、“客户物料”等字段。 - **操作步骤**: - 打开VA05报表。 - 在报表显示的字段列表中,找到需要添加字段的位置。 - 按下F1键,弹出的帮助...
用python sqlite3给已经有的表增加字段。sql语句的写法,表名用自己的,其他的请严格区分大小写,要不然不会成功。
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...使用alter table 来增加、删除和修改一个列的例子。 创建表结构:create table test1(id
3. 选择VBA脚本:在弹出的“计算字段”对话框中,选择“高级”(Advanced)选项,这将打开一个编辑框,允许我们输入VBA代码。 接下来,我们将详细讨论每个字段的VBA代码实现: 1. 点坐标X:使用IGeometry接口获取...
在示例中,一次性删除三个字段比分别删除每个字段所需时间更短。 在进行表结构修改时,需要注意的是,直接编辑`.frm`文件是一种风险较高的方法,因为它可能导致数据不一致或表损坏,除非你非常清楚自己在做什么,...
资源名称:Asp代码增加、删除access数据表和字段资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。