I am curious regarding this. Is it a better practice to have static html pages displaying the current inventory? This would obviously entail having to manually update these pages when items go in/out of stock, adding new items, etc.
Or is it a more common practice to use dynamic pages to load your store's inventory directly from a database?
If your products never change, and you only have a few products, than you can probably get by without using a database. But if you need to update new products every so often, or if you want to add features like filtering, search, sorting, etc., than having a database is the way to go. It also has the added benefit of organizing your product line in a rational way. If you have more than a dozen products though, you'll want to use a database so that you can code one view that populates according to the product selected. Otherwise, if you want to change the layout, you'll have to do with each product.
Related
I've been trying to get my head around NoSQL, and I do see the benefits to embedding data in documents.
What I can't understand, and hope someone can clear up, is how to store data if it must be relational.
For example.
I have many users. They are all buying a product. So everytime that they buy a product, we add it under the users document in mongo, so its embedded and its all great.
The problem I have is when something in reference to that product changes.
Lets say user A buys a car called "Porsche". Then, we add a reference to that under the users profile. However, in a strange turn of events Porsche gets purchased by Ferrari.
What do you do now, update each and every record and change to name from Porsche to Ferrari?
Typically in SQL, we would create 3 tables. One for users, one for Cars (description, model etc) & one for mapping users to purchases.
Do you do the same thing for Mongo? It seems like if you go down this route, you are trying to make Mongo do things SQL way, which is not what its intended for.
I can understand how certain data is great for embedding (addresses, contact details, comments, etc) but what happens when you need to reference data that can and needs to change at a regular basis?
I hope this question is clear
DBRefs/Manual References were made specifically to solve this issue. Instead of manually adding the data to each document and then needing to update when something changes, you can store a reference to another collection. Here is the mongoDB documentation for details.
References in Mongo
Then all you would need to do is update the reference collection and the change would be reflected in all downstream locations.
When i used the mongoose library for node js it actually creates 3 tables similar to how you might do it in SQL, you can use object id's as foreign keys and enrich them either on the client side or on the backend, still no joining but you could do an 'in' query for the ID's then enrich the objects that way, mongoose can do this automatically by 'populating'
Is there a way to merge two data in one row?
I have a gridview, within it, there are products that can be sold as a bundle. If I have it as it is right now, the user can delete one of the product bundle, and still receive a bundle price. That's not good. So how can I merge the two rows into one?
Or is it possible to add a row that indicates that the following two rows are a bundle? See picture, where there's an extra row. My other thoughts are having a cgridview in a cgridview?
My database has a column that indicates whether the product is a bundle or not. Let me know if there are any information needed.
you can also use CListView for custom view and also having filters and sorts.
for creating custom html based on dataproviders, I think it's the best solution, since you only care about the layout and yii provides the data.
You are over complicating things I believe. Why not just create the html yourself? that would be the easiest solution by far.
If you really want to do what you want then you have to extend cgridview and create some rendering yourself.
If you really want to go that route then try to study this http://yiibooster.clevertech.biz/extendedGridView#groupgridview some of the features are almost exactly what you need.
I am creating a sales invoicing program which has an access database as a backend for storing product and customer information so that the user can choose a customer from a dropdown, select products from dropdowns, etc. What I'm struggling with at the moment is deciding what is the best way of taking input from the user when it comes to products quantity, unit price and total price. Should I just use a bunch of rows of textboxes? But then if the user runs out of rows, I'm screwed. Another option would be to use datagrid view, but then that means no comboboxes and auto-completion resulting in slower input. Keeping in mind that an invoice would obviously need to be stored and then recalled later, what is the best way to go about doing this?
BTW keep in mind I'm quite inexperienced (as you can probably tell by now) with coding in VB so try to keep it simple so I can follow through and understand.
Much thanks for your time and help.
P.S. Here's a link to my relational DB model - a screenshot from access.
Database relationship diagram - MS Access
Your relational design is fine, but what you are looking for is a Main-form sub-form setup.
Per your diagram: 1st Create an invoice form that contains just the information in your invoice table. I would use a combo box to populate the customerID from your customer table.
Next, create a second form for your line items table, and it should be set to display as "continuous forms" so that it will show multiple line items. Once again, use a combo box to enter productIDs from your Product table.
Finally, go back to your Invoice form and use the subform control to add the line item form to it, linking it with the InvoiceID field.
This is really a common setup, there are tons of examples. If you can get a copy of the venerable Northwind.mdb (tons of places it can be found on the internet), you can see how it is done.
The templates for these HTML emails are all the same, but there are just different variables for say, first name, last name and such.
Would it just make sense to store the most minimal of data that I need, and load the template in and replace the variables everytime?
Another option would be to actually create the HTML file and store a reference to it, which probably would be the easiest to do except it might be a pain managing the files, and it adds complexity in regards to migrating, file permissions, et cetera.
Looking for opinions from people who've done this before...
GOAL/PURPOSE/USE:
I have a booking engine. When users make a booking, they are sent a confirmation email, generated from the sessionized booking data.
This email provides a "Cannot view this email? See it here" link which provides a web view of the email, in addition to a plaintext view.
I need to display the same email that was sent out, in addition to the plaintext view.
The template is subject to change, but I think because of that very fact I should have a table of templates and map the data to a template.
That's what I would do, because the template layout may change over the time, but the person information should remain the same. So, it makes sense to just store the person information in the database and leave the template out from the database.
In fact, it would be even better if you use template engine such as Velocity (in Java) to construct your HTML emails... very easy, by the way.
On the one hand cpu is more expensive then memory, so mostly it is better to save more data to reduce cpu power used by computation.
But in your case, I would save the minimal data, the emails or what you are tying to save, because it allows you to easily remodel your templates, and to reuse the data at multiple places of your application.
You persist redundant data (especially because of the template) which is in no way normalized. I would not suggest to do that. But mentioned in the comment it is important what you want to do with that data.
If you only save the data you need you could for example exchange that template easy and use another one.
Yea, your right on track. I did a similar thing. All dynamic/runtime variables were starting from ##symbol.
So in database you would have one Template table. One table would be for dynamic/runtime variables. One table for Mapping between Template and dynamic/runtime variables.
tblTemplate - TemplateID, TemplateValue
tblRuntimeVariables - RuntimeVariableID, VariableString, VariableSQL
tblMapping - TemplateID, RuntimeVariableID, RuntimeVariableValue
Advantage of using an extra mapping table is that on adding new dynamic variables to existing change would mean making no change to existing database. Only more rows would be added to tblMapping.
In my case I was also having one extra column for storing SQL Statements in tblRuntimeVariables in case the value for a runtime variable is fetched from database.
We have a CMS built entirely in house. I'm the new web developer guy with literally 4 weeks of ColdFusion Experience. What I want to do is add version control to our dynamic pages. Something like what Wordpress does. When you modify a page in Wordpress it makes some database entires and keeps a copy of each page when you save it. So if you create a page and modifiy it 6 times, all in one day you have 7 different versions to roll back if necessary. Is there a easy way to do something similar in Coldfusion?
Please note I'm not talking about source control or version control of actual CFM files, all pages are done on the backend dynamically using SQL.
sure you can. just stash the page content in another database table. you can do that with ColdFusion or via a trigger in the database.
One way (there are many) to do this is to add a column called "version" and a column called "live" in the table where you're storing all of your cms pages.
The column called live is option but might make it easier for your in some ways when starting out.
The column "version" will tell you what revision number of a document in the CMS you have. By a process of elimination you could say the newest one (highest version #) would be the latest and live one. However, you may need to override this some time and turn an old page live, which is what the "live" setting can be set to.
So when you click "edit" on a page, you would take that version that was clicked, and copy it into a new higher version number. It stays as a draft until you click publish (at which time it's written as 'live')..
I hope that helps. This kind of an approach should work okay with most schema designs but I can't say for sure either without seeing it.
Jas' solution works well if most of the changes are to one field, for example the full text of a page of content.
However, if you have many fields, and people only tend to change one or two at a time, a new entry in to the table for each version can quickly get out of hand, with many almost identical versions in the history.
In this case what i like to do is store the changes on a per field basis in a table ChangeHistory. I include the table name, row ID, field name, previous value, new value, and who made the change and when.
This acts as a complete change history for any field in any table. I'm also able to view changes by record, by user, or by field.
For realtime page generation from the database, your best bet are "live" and "versioned" tables. Reason being keeping all data, live and versioned, in one table will negatively impact performance. So if page generation relies on a single SELECT query from the live table you can easily version the result set using ColdFusion's Web Distributed Data eXchange format (wddx) via the tag <cfwddx>. WDDX is a serialized data format that works particularly well with ColdFusion data (sorta like Python's pickle, albeit without the ability to deal with objects).
The versioned table could be as such:
PageID
Created
Data
Where data is the column storing the WDDX.
Note, you could also use built-in JSON support as well for version serialization (serializeJSON & deserializeJSON), but cfwddx tends to be more stable.