Re: How to make mulitlingual website?



Jeff North wrote:


Normalisation is good.

But there are databases that are more efficient when not normalised.

http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ssceqpop.mspx
and scroll to "Consider Database De-normalization".

IOW there are times when you should normalise and there are times when
you shouldn't normalise.


Jeff,

Yes, I am QUITE familiar with database normalization and denormalization. I've been doing relational databases for over 20 years, starting with DB2 on mainframes. (I was working for IBM at the time). I've designed hundreds of databases, from small one or two tables ones to databases with dozens of tables and multiple foreign keys in each table. The largest I remember doing had upwards of 80 tables, over 600 columns and, when populated, exceeded five terabytes in size.

About the only *valid* reason for denormalizing is performance. The more you normalize, the more you need to join tables, causing potential performance problems. This is why most relational database never go beyond 3rd normal form. In larger database, some tables might only be at 2nd normal form, creating a hybrid "2.5 normal" database.

But proper normalization also limits changes to the database structure. No, in your case you do not have any duplicate data at this time. However, you do have poor design because adding a new language requires you to change the database structure. This should also be avoided, because changes to the database structure potentially affect every program using the database - and all code using the database must be examined. This can be a long process when there is a lot of code. My solution prevents this.

And yes, you could have duplicate data. For instance - you might have a message "I'm sorry, this item is not available in your country" in French and Spanish, but not English or Italian. No, my design won't cure that either - which is why it's not a 3rd normal design. But this I didn't think it would be necessary in this instance - the amount of duplicate data, if any, is minimal.


Now lets throw the cat amongst the pidgeons :-)


True. But (there's always a but isn't there :-) ) what if there are multiple areas on the page? What if the page is a form with multiple fields?

A (slightly) different table structure will need to be used.
I've shown one method, you've shown another.
Which is better - depends upon your requirements.

Lets consider another common layout.
You have a page with 3 columns.
Column 1 is the menu.
Column 2 is the content.
Column 3 is adverts specific to that country.

In the above case neither of our table designs would be suitable.

I also gave a slightly more complex design (3 of them, actually) which do solve that problem. And they are normalized.



I think you are making the assumption that I'm returning all fields
from the table, I'm not.


No, but the database still fetches the entire row before selecting which ones to return.





-- ================== Remove the "x" from my email address Jerry Stuckle JDS Computer Training Corp. jstucklex@xxxxxxxxxxxxx ================== .



Relevant Pages

  • Re: How to make mulitlingual website?
    ... >| Jeff North wrote: ... >|> you shouldn't normalise. ... This is why most relational database never go beyond 3rd normal form. ... my design won't cure that either - which is why ...
    (comp.lang.php)
  • Re: Databinding - Best Practice (object-oriented)
    ... >>ADO.NET is one way of mapping a relational database into an object ... >>mapping that means your application code is very exposed to the actual ... The actual database structure is hidden by the SQL ... design tends to produce ugly object oriented code). ...
    (microsoft.public.dotnet.framework.windowsforms.databinding)
  • Re: Databinding - Best Practice (object-oriented)
    ... >>ADO.NET is one way of mapping a relational database into an object ... >>mapping that means your application code is very exposed to the actual ... The actual database structure is hidden by the SQL ... design tends to produce ugly object oriented code). ...
    (microsoft.public.dotnet.framework.windowsforms)
  • Re: Logical data design, Pick style
    ... It's always worried me how you can design a database without worrying about ... normalise it and only then say "What do you want the application to do...?" ... Your point about static and dynamic data is really important. ...
    (comp.databases.pick)
  • Re: Question about table design
    ... You won't have 4200 descriptions either and if you normalise the ... Each product group will have a table which ... master attributes per product if you think about it. ... But it's the database structure we're interested in. ...
    (microsoft.public.sqlserver.programming)