Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Representation for Deleted Entities: difficult question
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  10 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Robert Brown  
View profile  
 More options May 13 2004, 2:32 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: robertbrown1...@yahoo.com (Robert Brown)
Date: 13 May 2004 11:32:21 -0700
Local: Thurs, May 13 2004 2:32 pm
Subject: Representation for Deleted Entities: difficult question
Our customer (of our ecommerce system) wants to be able to preserve
deleted entities in the database so that they can do reporting,
auditing etc.

The system is quite complex where each end user can belong to multiple
institutional affiliations (which can purchase on behalf of the user).
The end user also has a rich trail of past transactions affiliations
etc. Thus in the schema each user entity is related to many others
which in turn relate to yet others and so on.

In the past when a user was deleted all of his complex relationships
were also deleted in a cascading fashion. But now the customer wants
us to add a "deleted" flag to each user so that a user is never
_really_ deleted but instead his "deleted" flag is set to true. The
system subsequently behaves as if the user did not exist but the
customer can still do reports on deleted users.

I pointed out that it is not as simple as that because the user entity
is related to many, many others so we would have to add this "deleted"
flag to every relationship and every other entity and thus have
"deleted" past purchases, "deleted" affiliations - a whole shadow
schema full of such ghost entities. This would overtime degrade
performance since now each query in the system has to add a clause:
"where deleted = 0".

I assume this is a standard problem since many organizations must have
this need of preserving deleted records (for legal or other reasons).
I tried to talk them into creating a simple audit file where all the
deletions will be recorded in XML but they were not too happy with
that.

Is there a more satisfying solution to this than have this "deleted"
flag?

Thanks for your help,

- robert


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
NetComrade  
View profile  
 More options May 13 2004, 3:32 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: andreyNS...@bookexchange.net (NetComrade)
Date: Thu, 13 May 2004 19:32:28 GMT
Local: Thurs, May 13 2004 3:32 pm
Subject: Re: Representation for Deleted Entities: difficult question
You didn't post database you're using.

In Oracle you could partition the main table (from where all
'cascaded' is coming from) into deleted/undeleted records. Put a view
on top of the table just as original table would look like with where
clause 'undeleted' and the undeleted partition would always be used.
Only certain versions of oracle allow rows to migrate from partition
to partition, u can look it up.

However, you would still suffer from 'performance' issues on the other
tables, if your data is truly huge.

Best solution would probably be to separate all deleted/undeleted data
into separate tables, and built a union view on top of them for
reporting purposes.

my2c
Someone might have a better idea.

On 13 May 2004 11:32:21 -0700, robertbrown1...@yahoo.com (Robert

.......
We use Oracle 8.1.7.4 on Solaris 2.7 boxes
remove NSPAM to email

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Leandro Guimarães Faria Corsetti Dutra  
View profile  
 More options May 13 2004, 3:40 pm
Newsgroups: comp.databases.theory
From: Leandro Guimarães Faria Corsetti Dutra <lean...@dutra.fastmail.fm>
Date: Thu, 13 May 2004 16:40:55 -0300
Local: Thurs, May 13 2004 3:40 pm
Subject: Re: Representation for Deleted Entities: difficult question
Em Thu, 13 May 2004 11:32:21 -0700, Robert Brown escreveu:

> I pointed out that it is not as simple as that because the user
> entity is related to many, many others so we would have to add this
> "deleted" flag to every relationship and every other entity and thus
> have "deleted" past purchases, "deleted" affiliations - a whole
> shadow schema full of such ghost entities.

        I really see no problem.  It is just a few entities that are,
not quite deleted but actually 'deactivated'.  All the others exist in
relation to these, thus a simple join with a selection clause will do.

        There is a performance hit, but this is the price of doing
business...

        The alternative would be to have a real shadow database or
schema where data would be moved when deleted from the main one, but I
guess the performance hit would be worse, besides all the application
changes and added maintainance.

--
Leandro Guimarães Faria Corsetti Dutra           +55 (11) 5685 2219
Av Sgto Geraldo Santana, 1100 6/71               +55 (11) 5686 9607
04.674-000  São Paulo, SP                                    BRASIL
http://br.geocities.com./lgcdutra/


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mikito Harakiri  
View profile  
 More options May 13 2004, 3:43 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: "Mikito Harakiri" <mikharak...@iahu.com>
Date: Thu, 13 May 2004 12:43:46 -0700
Local: Thurs, May 13 2004 3:43 pm
Subject: Re: Representation for Deleted Entities: difficult question
"Robert Brown" <robertbrown1...@yahoo.com> wrote in message

news:240a4d09.0405131032.6c2e9802@posting.google.com...

> I pointed out that it is not as simple as that because the user entity
> is related to many, many others so we would have to add this "deleted"
> flag to every relationship and every other entity and thus have
> "deleted" past purchases, "deleted" affiliations - a whole shadow
> schema full of such ghost entities. This would overtime degrade
> performance since now each query in the system has to add a clause:
> "where deleted = 0".

Blanket statements like this are rarely true.

> I assume this is a standard problem since many organizations must have
> this need of preserving deleted records (for legal or other reasons).
> I tried to talk them into creating a simple audit file where all the
> deletions will be recorded in XML but they were not too happy with
> that.

So you think file is better than DBMS?

> Is there a more satisfying solution to this than have this "deleted"
> flag?

Can I suggest that there is a modelling problem? I can imagine customer
having multiple timestamp columns, for example

table customer (
   ...
   DOB       DATE,
   married     DATE,
   divorced   DATE,
   died        DATE
)

but can't possibly see why you need "is_alive",  "is_married" boolean
columns.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Robert Brown  
View profile  
 More options May 14 2004, 12:14 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: robertbrown1...@yahoo.com (Robert Brown)
Date: 14 May 2004 09:14:47 -0700
Local: Fri, May 14 2004 12:14 pm
Subject: Re: Representation for Deleted Entities: difficult question

andreyNS...@bookexchange.net (NetComrade) wrote in message <news:40a3cbf2.428366208@localhost>...
> You didn't post database you're using.

Thanks for your answer. This particular customer is using Oracle but
our software is supported on SQL server as well.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Steve Jorgensen  
View profile  
 More options May 14 2004, 12:20 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: Steve Jorgensen <nos...@nospam.nospam>
Date: Fri, 14 May 2004 16:20:13 GMT
Local: Fri, May 14 2004 12:20 pm
Subject: Re: Representation for Deleted Entities: difficult question
Note that SQL Server 2000 EE does support partitioned views.

On 14 May 2004 09:14:47 -0700, robertbrown1...@yahoo.com (Robert Brown) wrote:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mike Nicewarner  
View profile  
 More options May 14 2004, 12:41 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: "Mike Nicewarner" <psyclo@nospam_datamodel.org>
Date: Fri, 14 May 2004 11:41:18 -0500
Local: Fri, May 14 2004 12:41 pm
Subject: Re: Representation for Deleted Entities: difficult question
This solution is not specific to Oracle.  Most DBMS support partitions and
views.

--
Mike Nicewarner [TeamSybase]
http://www.datamodel.org
mike@nospam!datamodel.org
Sybase product enhancement requests:
http://www.isug.com/cgi-bin/ISUG2/submit_enhancement

"NetComrade" <andreyNS...@bookexchange.net> wrote in message

news:40a3cbf2.428366208@localhost...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mike Nicewarner  
View profile  
 More options May 14 2004, 12:46 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: "Mike Nicewarner" <psyclo@nospam_datamodel.org>
Date: Fri, 14 May 2004 11:46:41 -0500
Local: Fri, May 14 2004 12:46 pm
Subject: Re: Representation for Deleted Entities: difficult question
As Leandro and Mikito point out, you have flaws in your design.
First, deleting the user entity is the only thing that is logically deleted,
but rather than make it an indicator, use a date, as in DELETE_DATE as
nullable.  Non-null entities are to be ignored.
In addition, all relationships to the user entity should be evaluated to
determine if they need to be sensitive to the user entity's status.  Some
may, and others may not.  This is a business question, not a technical
question.  For instance, if there are invoices and inventory tables linked
in some way to the user entity, would you really want to *not* display that
information just because an associated user entity had been deleted?

I'd really need to see your design and talk to your business to know exactly
what impact this design change would have on your database.

--
Mike Nicewarner [TeamSybase]
http://www.datamodel.org
mike@nospam!datamodel.org
Sybase product enhancement requests:
http://www.isug.com/cgi-bin/ISUG2/submit_enhancement

"Robert Brown" <robertbrown1...@yahoo.com> wrote in message

news:240a4d09.0405131032.6c2e9802@posting.google.com...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
ctc...@hotmail.com  
View profile  
 More options May 14 2004, 8:55 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: ctc...@hotmail.com
Date: 15 May 2004 00:55:34 GMT
Local: Fri, May 14 2004 8:55 pm
Subject: Re: Representation for Deleted Entities: difficult question

robertbrown1...@yahoo.com (Robert Brown) wrote:
> Our customer (of our ecommerce system) wants to be able to preserve
> deleted entities in the database so that they can do reporting,
> auditing etc.

> The system is quite complex where each end user can belong to multiple
> institutional affiliations (which can purchase on behalf of the user).
> The end user also has a rich trail of past transactions affiliations
> etc. Thus in the schema each user entity is related to many others
> which in turn relate to yet others and so on.

> In the past when a user was deleted all of his complex relationships
> were also deleted in a cascading fashion.

Users are not deleted.  They may die, they may be incarcerated, they may
be fired, but they cannot be deleted.  Only data is deleted.

> But now the customer wants
> us to add a "deleted" flag to each user so that a user is never
> _really_ deleted but instead his "deleted" flag is set to true. The
> system subsequently behaves as if the user did not exist but the
> customer can still do reports on deleted users.

> I pointed out that it is not as simple as that because the user entity
> is related to many, many others so we would have to add this "deleted"
> flag to every relationship and every other entity and thus have
> "deleted" past purchases,

If I am hit by a bus tomorrow, will the office furniture I ordered (but
which is owned by the company) disappear?  Will the patents I've generated
for the company no longer be valid?

> "deleted" affiliations - a whole shadow
> schema full of such ghost entities.

Why would each of these need it's own deleted flag?  If they are being
joined against the user table, then they can just rely on the user table to
provide the necessary logic.  If they are not being joined against the user
table, then why would you want them to be excluded based on a condition of
a user?

> This would overtime degrade
> performance since now each query in the system has to add a clause:
> "where deleted = 0".

Do they want the reporting to go back indefinately, or would they like
the data to be "really" deleted after a certain time of "virtual" deletion?

> I assume this is a standard problem since many organizations must have
> this need of preserving deleted records (for legal or other reasons).

It is a standard problem, but there is not a standard solution.

Xho

--
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service                        $9.95/Month 30GB


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Erland Sommarskog  
View profile  
 More options May 15 2004, 6:22 pm
Newsgroups: comp.databases.theory, comp.databases.sybase, comp.databases.oracle.server, comp.databases.ms-sqlserver
From: Erland Sommarskog <som...@algonet.se>
Date: Sat, 15 May 2004 22:22:52 +0000 (UTC)
Local: Sat, May 15 2004 6:22 pm
Subject: Re: Representation for Deleted Entities: difficult question

Indeed, this is quite a big change if this was not in the system from
the beginning.

In our system, many items are not deletable, because even if an item
goes away, there might still be plenty of references to it. So in these
tables - accounts, customers, instruments, currencies, to name a few - there
is a deregdate column. This column serves the double purpose of telling
us if the item is still active, and if it is not, when the entity was
deregistered. And, yes it happens that deregistered entities are revived
too!

A non-trivial issue here is to know when a deregistered item should be
included and when it should not. If you are producing a list of last
month's tranactions, it obviously should. But if you are populating a
list of available products to order, deregistered products should not be
included. So when you introduce this concept in your system, you have
a lot to write in your functional specification too.

Another issue which becomes complicated, is referential integrity.
accounts.accresponsible may refer to the users table, but if the account
is active, the user must be too. Currently we do this in triggers, which
is a bit complex, and more difficult than foreign-key constraints. One
thought I've been playing with is to have tables like active_accounts,
active_users etc. This would not be the partition suggested by others,
since active_accounts would only hold the account number, and foreign
keys to other deregisterable items. Thus, active_accounts.accresponsible
would refer to active_users.userid. The full data would still be in
acconts and users, for both active and deregistered items.

I have never considered the performance cost for "AND deregdate IS NULL",
but I would suggest that if you need to access that column, you probably
already access some column which is not in any index, so there is
already a bookmark lookup, so I would not expect any particular penalty.
(This applies to MS SQL Server. Not that I really expect Oracle to be
different, but I don't know Oracle.)

--
Erland Sommarskog, SQL Server MVP, som...@algonet.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »