|
This is probably a really basic database design question, but for some reason, I'm struggling with it.
The real world problem I'm trying to solve is a little too escoteric to describe, so I'll try to use a generic example that presents the same problem.
Say a store sells two kinds of cogs. Each type of cog is represented in the database with its own table (they have sufficiently different characteristics to warent different table schemas). A customer can buy both kinds of cogs, and we want to keep track of their purchases. So we have a sales table that's associates the customer with the cogs he/she buys. One foreign key points to the customer, and another foreign points to the cog.
What's got me stumped is that the foreign key that points to the cog could be associated with either type of cogs. How do we know which? Do we create an additional field that tells us the type of cog the customer purchased? That rings alarms for me in that it's surely unnormalized.
So instead do we have seperate sales table for each type of cog? But wouldn't this lead to an explosion of tables as we add more cogs types to our inventory?
This must seem like a beginner's question; I'm an old C++ audio programmer who's become a 'web developer', so occasionally I get stumped on DB basics. Any help is appreciated. 
|
|
|
|
|
You need to find a way of describing n widgets from a single table so that the problem of new widgets does not require more tables which means a nightmare in maintenance and changing application pages that add, edit and display the data. Even if you can break it down to tables of classes of widgets you might be able to have a widget type table that keys into a widget class table. Even then you may find that you need to add new widget classes to cope but if you can make the table columns generic enough this may not be an issue. Just a quick thought.
"If you think it's expensive to hire a professional to do the job, wait until you hire an amateur." Red Adair.
nils illegitimus carborundum
me, me, me
|
|
|
|
|
Thanks for your reply.
The solution I've settled on uses part of your answer. I have a 'base' table for all items. Then I have tables where needed for 'derived' sub types. These derived tables have a 'zero to one' relationship to the base table. The derived tables are a way of extending the properties of items in the base table.
So the items table could look like this:
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | wheel | $1.23 |
+----+--------+-------+
| 2 | wire | $1.50 |
+----+--------+-------+
Then if there are more than one kind of cogs, I can subclass them in 'derived' tables (like derived classes in object oriented programming).
wheels table
+----+--------+--------+
| id | cog_id | radius |
+----+--------+--------+
| 1 | 1 | 50" |
+----+--------+--------+
wires table
+----+--------+--------+
| id | cog_id | length |
+----+--------+--------+
| 1 | 2 | 12" |
+----+--------+--------+
I can then do joins to get back only wheels, and another join to get just wires.
I'm not sure if this is a common approach. I know the joins will cost more processing, but at least the schema makes sense to me.
|
|
|
|
|
Leslie Sanford wrote: I'm not sure if this is a common approach.
It is. And it's one that I strongly prefer over a solution where one "extends" the record by linking to a table with "custom fields" (most often key/value pairs of strings).
Leslie Sanford wrote: I know the joins will cost more processing, but at least the schema makes sense to me.
..just a little extra overhead. Other alternatives would only make it worse, you'd end up with a lot of empty fields or with weird join-constructions.
Bastard Programmer from Hell
|
|
|
|
|
Leslie Sanford wrote: (they have sufficiently different characteristics
How are thos charactistics used?
In the right situation you can use a meta-data solution to represent the additional attributes.
|
|
|
|
|
today I discuss with my friends .we conculde that there is two ways design base class .
1 .we design the method whether belongs to all class or only belongs to sub-class into base-class
the code writed like that
class CVehicle
{
public:
virtual void fly()
{
cout<<"I'm sorry I don't have method fly"<<endl;
}
virtual void Ride()
{
cout<<"I'm sorry I don't have method Ride"<<endl;
}
virtual void Run()
{
cout<<"I'm sorry I don't have method Run"<<endl;
}
};
class CAeroplane:public CVehicle
{
public:
void fly()
{
cout<<"I am a Aeroplane i can fly "<<endl;
}
};
class CBike:public CVehicle
{
public:
void Ride()
{
cout<<"I am a Bike i can Ride "<<endl;
}
};
class CCar:public CVehicle
{
public:
void Run()
{
cout<<"I am a Car i can Run "<<endl;
}
};
2 .we think that sub class has its own method so we should design like that
class CVehicle
{
public:
};
class CAeroplane:public CVehicle
{
public:
void fly()
{
cout<<"I am a Aeroplane i can fly "<<endl;
}
};
class CBike:public CVehicle
{
public:
void Ride()
{
cout<<"I am a Bike i can Ride "<<endl;
}
};
class CCar:public CVehicle
{
public:
void Run()
{
cout<<"I am a Car i can Run "<<endl;
}
};
so which way will the best way we should order ?
|
|
|
|
|
wan.rui@qq.com wrote: so which way will the best way we should order ?
2.
A base class should only contain members that are common to those which will derive it.
Signature construction in progress. Sorry for the inconvenience.
|
|
|
|
|
The answer is neither. The aim of the base class should be to encapsulate operations that are common to all derived classes. In your first example, having the ability to fly makes no sense in the case of a class like CBike unless you are modelling scenes out of ET. In your second example, there's no reason to have a base class at all (btw, people run, car's don't). A better example would be:
class CVehicle
{
public:
virtual void Move();
}
class CCar: public CVehicle
{
public:
void Move()
{
cout << "I am a car. I can be driven" << endl;
}
}
class CBike: public CVehicle
{
public:
void Move()
{
cout << "I am a bike. I can be ridden" << endl;
}
}
class CAeroplane: public CVehicle
{
public:
void Move()
{
cout << "I am an aeroplane. I can be flown" << endl;
}
}
|
|
|
|
|
I mean there are some different action in different subclass ,where i can't conclude a common interface like move() .
my question is when we at this situation we write all different method in base class?or put the different method in different sub-class?
|
|
|
|
|
If you can't ask a common question, how can you interact with the base class? Answer: you can't. If you want something to move, no further questions asked, provide a move() method (possibly abstract/pure virtual) and override it to do the actual movement in subclasses. If you need to know the type of something before asking it the question, then you're probably asking the wrong question.
|
|
|
|
|
and i would like to store subclass with baseclass pointer.maybe we can dynamic_cast it to subclass and then to visit his method?or we could use base class pointer to visist method.
|
|
|
|
|
+5. That solution is working safe.
|
|
|
|
|
So anybody know what dscorepropagationdata means. Well I have a lot of user with the same date and time stamp value of this attribute. Do anybody know what could have trigger this?
I do know that every user that does not have the dscorepropagationdata <notset> can logon to sharepoint and the one that does has this value can. I do know it's not a sharepoint issue. Trying to see if it is some type of propagation thing or even group policy coming do from the top level.
EX: 5> dSCorePropagationData: 1/25/2012 16:25:47 Greenwich Standard Time Greenwich Standard Time; 1/25/2012 16:21:28 Greenwich Standard Time Greenwich Standard Time; 1/25/2012 16:14:6 Greenwich Standard Time Greenwich Standard Time; 1/25/2012 16:12:28 Greenwich Standard Time Greenwich Standard Time; 7/14/1601 22:36:49 Greenwich Standard Time Greenwich Standard Time;
|
|
|
|
|
Not sure what the question is but Active Directory propagates data between servers. You can google for Active Directory Replication.
Active Directory impacts login so if someone can't login then a replication timeliness issue would certainly be possible.
|
|
|
|
|
We are trying to come to a conclusion on a SaaS product architecture, We want to discuss which architecture and development style should be preferred
options
Single web app : This will have a HTML5 based responsive/fluid layout making it possible to adjust / run on all devices like desktop, tablet and phones
VS
Web application for desktops + web mobile app using Kendo or similar controls
We are actually doing POC to check if responsive layout has any restriction when it comes to web application development, any suggestions or points would be welcome
Basic criteria
1. Development time + learning curve
2. Utilization of built in functionality of controls
3. Full browser vs mobile browsers limitations and functionality loss caused by one
and others
Any thoughts will be appreciated.
Thanks
Sagar
|
|
|
|
|
Well, it largely depends on the kind of service you want to deliver.
I have developed a few games on HTML5 and would say, the learning curve is not much if you are not new to the programming world. There are large number of resources from beginner to pro to help you move forward.
With HTML5, the biggest challenge will be the user base with IE. Apart from that, customizing for different screens and devices isn't much of a issue.
Audio tags doesn't work in Android 2.1 and below, but guess most of the devices are now 2.2+
Depending upon your layouts and design, you may want to keep your resize variables in check.
Also, the cool thing is you can force users to use portrait/landscape view if you want to. Helps in layout customization.
Imagination is the one weapon in the war against reality!!!
http://aniruddhaloya.blogspot.com
|
|
|
|
|
Thanks for reply,
I was more concerned about Single solution vs Web App + mobile web app approach
Yes IE is going to be challenging specially when we are building a business application.
but question is would single solution be better over other frameworks like Kendo, ExtJS etc
Sagar
|
|
|
|
|
As I said, the final design will largely depend upon the service model and requirements.
For instance, if your app requires user to be connected to internet to be able to use it... then it might as well serve better to have a web app. Its not possible to comment which one will serve better w/o knowing what functionality they are going to have.
Biggest Adv of HTML5 app is a uniform code-base and you will not have to worry (about user upgrades) when adding/upgrading to new features.
A native app allows you to store information locally which can be retrieved easily in offline mode.
HTML5, with local storage, does allow data storage... but that may not be as much as native app (I'm not very sure about data storage details as I haven't used them for HTML5 app)
Imagination is the one weapon in the war against reality!!!
http://aniruddhaloya.blogspot.com
|
|
|
|
|
If it's SaaS the web is really your only option. To compete with others in the mobile device environment and provide a SaaS, you'll need to be providing something unique. The mobile market is competitive and users typically have short attention spans. Unless its a service users can't get elsewhere, it has to offer a platform-specific UX to succeed.
Regarding mobile development, from my experience if you focus on one mobile platform and develop the app to its potential. Writing for the second platform is a lot cheaper because, to a larger extent, the problem domain has been resolved.
"You get that on the big jobs."
|
|
|
|
|
I am working on an SDI application (MFC) using the standard DOC/View/Mainframe created by Visual Studio 10. The application requires a special type of "Switchboard" consisting of basically CButtons.
For whatever reason, I do not want to place the buttons in a conventional Dialog Box, but rather have them as children of DOC or View or Mainframe.
This is my first time using DOC/View/Mainframe and my question is: Who should be the parent of these buttons, or does it matter at all from a program architecture convention standpoint?
I am sure that Microsoft has this detailed, but I haven't a clue as to where to start looking.
Thanks,
Barry 
|
|
|
|
|
The view would ow the buttons. The document is, effectively, your model, so it will contain any data that you need.
|
|
|
|
|
Kindly find the below doubt and do his needful on the earliest of tomorrow..... Thx
Make a simple Web form for registration of students and courses. The form should accept first name, last name, faculty number, university (drop-down list), specialty (drop-down list) and a list of courses (multi-select list). Use the appropriate Web server controls. After registration you should display summary of the entered information as formatted HTML. use dynamically generated tags (h1, p, …).
|
|
|
|
|
1) We do not do your homework: it is set for a reason. It is there so that you think about what you have been told, and try to understand it. It is also there so that your tutor can identify areas where you are weak, and focus more attention on remedial action.
Try it yourself, you may find it is not as difficult as you think!
2) Wrong location - try posting questions in appropriate forum or on QA - but don't expect an answer in it's present form. See (1) above.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Take a look at what I wrote in the ASP.NET forum, then add repost and wrong forum.
Again, this is only urgent to you, stop spamming all the forums with your homework.
|
|
|
|
|
Doubt not found exception.
What I have found instead is piece of work that is supposed to be done by you and you only.
There is not doubt about that.
Sorry!
"With sufficient thrust, pigs fly just fine."
Ross Callon, The Twelve Networking Truths, RFC1925
|
|
|
|