Whenever I want help on a query, I get told my design is wrong, So this
time I'm posting a message during the design phase: How am I going to
perfectly design the following?
We want to be able to track time for users for multiple modules, for
now a Schedule module and a Punchlist module. These modules already
exist and there are dozens of other modules which we will add to the
list as well, two or three at a time - so it should be possibly to add
to the list of related modules fairly easily.
In my mind the natural key is the UserOrContactId (an id for a
particular person), the date the time is for and ReferenceId to the
module it is in, either PunchlistItemId or ScheduleTaskId. I haven't
done the foreign keys yet and will do that once the table design is
settled. The MinutesSpent is going to be the minutes the person spent
doing a particular schedule task or punchlist item, which will be
converted from hours and minutes to just minutes for the database with
a constraint for total miuntes per day not being more than 24 hours.
Create and Update User/Time is a standard thing we put on all our
tables for auditing purposes. The ForDate will be the date the hours
happen so if the natural key is done right that will take care of
checking that two entries aren't made on the same day, i.e. the total
horus should just be updated if an entry exists.
The problem is that I can't make the natural key a primary key because
you can't have nulls in the primary key, i.e. it will be either a
PunchlistItem OR a Schedule Task, but not both for a particular record.
In the past I have done something like RefType = 'Schedule', RefId =
ScheduleTaskId, but then foreign keys can't be applied.
So what's the perfect solution so that I won't get heckled for design
when I ask a query question about it in a few months? Celko, get it all
out of your system - I don't understand database design, blah, blah,
blah, but show me the perfect solution.
CREATE TABLE [dbo].[TimeSpent](
[UserOrContactId] [int] NOT NULL,
[ForDate] [smalldatetime] NOT NULL,
[PunchlistItemId] [int] NULL,
[ScheduleTaskId] [int] NULL,
[MinutesSpent] [int] NOT NULL,
[Description] [varchar](100) COLLATE SQL_Latin1_Gene ral_CP1_CI_AS NOT
NULL,
[Notes] [text] COLLATE SQL_Latin1_Gene ral_CP1_CI_AS NOT NULL,
[CreateUser] [int] NOT NULL,
[CreateTime] [smalldatetime] NOT NULL,
[UpdateUser] [int] NOT NULL,
[UpdateTime] [smalldatetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[TimeSpent] WITH CHECK ADD CONSTRAINT [CK_RefIds]
CHECK (([PunchlistItemId] IS NOT NULL OR [ScheduleTaskId] IS NOT
NULL))
GO
Mar 15 '06
13 3216
>A user is going to do some work on a particular day and then they are
going to record the fact that they spent 30 minutes, 2 hours or
whatever on a *particular schedule task* and want to report on it
so, back to the subject line. The "natural key" is description, notes,
date, and module.
or, the identity key and display the rest of the junk.
BTDT.
>> Oh yeah.. And why are your dates created as integers?
It is supposed to be a temporal datatype like DATETIME or SMALLDATETIME
depending on your needs.
--
Anith
pb648174 (go****@webpaul .net) writes: Ok, so here is the final solution as I have it now, sans the start/stop stuff and references to other tables:
CREATE TABLE [dbo].[TimeSpentItem]( [Id] [int] IDENTITY(1,1) NOT NULL, [PunchlistItemId] [int] NULL, [ScheduleTaskId] [int] NULL, CONSTRAINT [PK_TimeSpentIte m] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
GO ALTER TABLE [dbo].[TimeSpentItem] WITH CHECK ADD CONSTRAINT [CK_TimeSpentIte m_ValidReferenc e] CHECK (([PunchlistItemId] IS NOT NULL OR [ScheduleTaskId] IS NOT NULL))
Can both be non-NULL? What does that mean? That you are working
on both in parallel?
Should there not be UNIQUE constraint on the two?
Having re-reread your original post a little better, I agree entirely
with anyone else tha you need a Modules table. You will have to change
that TimeSpentItem table for each new module that is added.
CREATE TABLE [dbo].[TimeSpentActual]( [UserOrContactId] [int] NOT NULL, [ForDate] [smalldatetime] NOT NULL, [TimeSpentItemId] [int] NOT NULL, [Minutes] [int] NOT NULL, [Notes] [text] COLLATE SQL_Latin1_Gene ral_CP1_CI_AS NOT NULL,
The users really need the ability to write novels? Would not a
varchar(8000) do? Text is fairly messy to deal with.
--
Erland Sommarskog, SQL Server MVP, es****@sommarsk og.se
Books Online for SQL Server 2005 at http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at http://www.microsoft.com/sql/prodinf...ons/books.mspx
You mean something different than TimeSpentItem or is TimeSpentItem
sufficient? I usually use varchar, but this time I'm experimenting with
not just to see how much of a hassle it is. No matter what we make the
text limit, someone, somewhere ends up complaining about it. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Sean Ross |
last post by:
Hi.
Recently I made a small script to do some file transferring (among other
things). I wanted to monitor the progress of the file transfer, so I needed
to know the size of the files I was transferring. Finding out how to get
this information took some time (reading the manuals - googling did not
prove worthwhile). Anyway, I did eventually figure out how to do it (there
are a few ways, including os.path.getsize(filename)).
My...
|
by: C. Barnes |
last post by:
Summary:
Sorts strings in a way that seems natural to humans.
If the
strings contain integers, then the integers are
ordered
numerically. For example, sorts
into the order .
Code:
|
by: Connelly Barnes |
last post by:
Summary:
Sorts strings in a way that seems natural to humans.
If the strings contain integers, then the integers are ordered
numerically. For example, sorts
into the order .
Code:
#---------------------------------------------------------
|
by: Twan Kennis |
last post by:
Hi,
I have a DB2 database on the IBM iSeries platform, on which I created
several Stored Procedures with the SQLCODE as a return-parameter.
These Stored Procedures are called from a Windows application (build in
Visual Basic) using an ADO/OLE DB Provider on a IBM Client Access ODBC
driver.
On the Internet I found a whitepaper "SQL messages and codes" provided
by IBM which describes a complete list of all SQLSTATEs, SQLCODEs and
|
by: sathyashrayan |
last post by:
(This is not a home work question)
Dear group,
I want a program to find one number between a set of
natural number.A program to guess a number in between a
Natural number set.This should be a simple task but my
mind suddenly got stuck.
I am trying to implement a square root function
as a practice. I am able to code for the perfect square
| |
by: Hendri Adriaens |
last post by:
Hi,
I have an onmouseover script that displays a div with some comment. There
are several links getting this onmouseover functionality, all with their own
comment text. Now I want the div to have a max width, but if the natural
width is smaller than the max width, it should get the natural width.
commentObj is the div and commentObj.offsetWidth returns the natural width,
as long as we didn't set it to anything else (it seems). As soon as...
|
by: Steven Bird |
last post by:
NLTK — the Natural Language Toolkit — is a suite of open source Python
modules, data sets and tutorials supporting research and development
in natural language processing. It comes with 50k lines of code,
300Mb of datasets, and a 360 page book which teaches both Python and
Natural Language Processing. NLTK has been adopted in at least 40
university courses. NLTK is hosted on sourceforge, and is ranked in
the top 200 projects.
...
|
by: joproulx |
last post by:
Hi,
I was wondering if there was a way with Reflection to find dynamically
if an object was referencing indirectly another object.
A simple example would be:
Object1
|
--Object2
|
|
by: Astley Le Jasper |
last post by:
Sorry for the numpty question ...
How do you find the reference name of an object?
So if i have this
bob = modulename.objectname()
how do i find that the name is 'bob'
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |