One-To-One relation is this a good practice? I have a table "Place" (id_place, name, address,coor_x, coor_y)

I would like to add for a place their "facebook page" "twitter page" "wesbite" and telephone

My first idea was to create a table let's say social_contact that contains these fields and add an extra column in the place table (social_contact_id) which would have been a 1 to 0..1 relation (these 4 fields are optional and could be blank) 

Is this good practice? Or Am I better to stuff these 4 new files directly in the place table?

thank you!
I hope I don't get marked down for this simplistic answer, but I think the answer is "it depends".


Are you always going to join the tables? Bad
Does your main table have ONLY columns that are fixed-width (not VARCHAR
or TEXT) and you are going to separate the variable columns from the
fixed columns? Good (unless you are joining on every query)


AT least in the MySQL world (and it would make sense to be true everywhere), a table with ONLY fixed-width columns are faster to find, so for the main table to be fixed width and putting the less-frequently needed and variable-width columns in another table...it can be a good design for speed.

On the other hand, if this is never going to be a big table, and you're usually going to grab the extra data anyway...this may just be increasing your maintenance cost for no reason...so might be best to keep it simple.

[UPDATE 2015-02-13]

At 20 fields, your table is still tiny. But, in your defense, I wish someone had thought to split some of the tables that I work with because 80% of the data (a couple hundred columns) aren't needed on every query, and we probably could have made the main table fixed-width if we had put some forethought into it. So, it's a good thing to always ask the question of whether you should split. But, at the same time try to keep YAGNI in mind so that you don't split tables when you don't need to.

If you ever expand your table to have a separate 'resume' for your users, and then a 'personal profile', and a complex mapping of user's 'view settings'...each of these might have a lot of data on their own, and each would be loaded completely separately. The resume only loads when people are viewing it, and the same with the personal profile, and the 'view settings' only load when the user is navigating the site. So, these would make 3 logically separate tables because you would query them at separate times and never together. Splitting the table isn't wrong, you just have to ask if it's worthwhile.