![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hi everybody! I'm trying to model a photo gallery, and i have a doubt on how to implement it. I have a table for users. I have another table for pictures. And finally, i have a table for galleries (which are sets of pictures). Both galleries and pictures belongs to a single user, but a single picture can be used on many galleries. So, i have something like this: users --> pictures --> pictures_to_galleries --> galleries My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Thank you very much! |
#3
| |||
| |||
|
|
My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. |
#4
| |||
| |||
|
|
Hi everybody! I'm trying to model a photo gallery, and i have a doubt on how to implement it. I have a table for users. I have another table for pictures. And finally, i have a table for galleries (which are sets of pictures). Both galleries and pictures belongs to a single user, but a single picture can be used on many galleries. So, i have something like this: users --> pictures --> pictures_to_galleries --> galleries My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Thank you very much! |
#5
| |||
| |||
|
|
In message 16d72645-6a6b-4fd4-bccf-d5002970f... (AT) q2g2000vbr (DOT) googlegroups.com>, Spike <fau... (AT) gmail (DOT) com> writes My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Less is more. The database is fully normalised without adding an extra relationship. You shouldn't denormalise without a good reason. Denormalised systems are usually more fragile and will cost you more time in programming and maintenance. Of course if there is some other real-world relationship between galleries and users you may need to change the model. Do galleries have Owners, for instance and would those be Users? -- Bernard Peek |
#6
| |||
| |||
|
|
On 6 abr, 23:11, Bernard Peek <b... (AT) shrdlu (DOT) com> wrote: In message 16d72645-6a6b-4fd4-bccf-d5002970f... (AT) q2g2000vbr (DOT) googlegroups.com>, Spike <fau... (AT) gmail (DOT) com> writes My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Less is more. The database is fully normalised without adding an extra relationship. You shouldn't denormalise without a good reason. Denormalised systems are usually more fragile and will cost you more time in programming and maintenance. Of course if there is some other real-world relationship between galleries and users you may need to change the model. Do galleries have Owners, for instance and would those be Users? -- Bernard Peek Hi! I was thinking about system performance vs. normalization. By adding that extra relationship, three-level joins can be avoided, and so stressing the dbms too much. Do you think is a good idea in general to denormalize the data model by means of performance? Thanks! |
#7
| ||||
| ||||
|
|
On Apr 6, 3:40*pm, Spike <fau... (AT) gmail (DOT) com> wrote: On 6 abr, 23:11, Bernard Peek <b... (AT) shrdlu (DOT) com> wrote: In message 16d72645-6a6b-4fd4-bccf-d5002970f... (AT) q2g2000vbr (DOT) googlegroups.com>, Spike <fau... (AT) gmail (DOT) com> writes My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Less is more. The database is fully normalised without adding an extra relationship. You shouldn't denormalise without a good reason. Denormalised systems are usually more fragile and will cost you more time in programming and maintenance. Of course if there is some other real-world relationship between galleries and users you may need to change the model. Do galleries have Owners, for instance and would those be Users? -- Bernard Peek Hi! I was thinking about system performance vs. normalization. By adding that extra relationship, three-level joins can be avoided, and so stressing the dbms too much. Do you think is a good idea in general to denormalize the data model by means of performance? Thanks! Spike, I'm not sure if you're deliberately trying to be provocative, but I'd say it's fair to characterize this newsgroup as denormalization- hostile ;-). |
|
What's more important, I think, is to put first things first, and as I hinted at--and others made explicit--what's paramount is getting the requirements right and accurately modeling the problem domain. If users create galleries, and/or galleries can exist independently of any pictures being assigned to them, then model accordingly. Period. Bottom-line, IMHO: 1) model the domain accurately, and 2) deviate from the model only when *truly* warranted (NB that often denormalization is zero-sum--who cares when the data comes back faster when it's wrong or contradictory?). You might want to see if you can find a copy of "The Normal Is So... Interesting" by Chris Date (DBP&D 11/97) for more on the topic of denormalization. Many other sources abound. |
|
Regards, |
|
--Jeff |
#8
| |||
| |||
|
|
On 7 abr, 01:38, jefftyzzer <jefftyz... (AT) sbcglobal (DOT) net> wrote: On Apr 6, 3:40 pm, Spike <fau... (AT) gmail (DOT) com> wrote: On 6 abr, 23:11, Bernard Peek <b... (AT) shrdlu (DOT) com> wrote: In message 16d72645-6a6b-4fd4-bccf-d5002970f... (AT) q2g2000vbr (DOT) googlegroups.com>, Spike <fau... (AT) gmail (DOT) com> writes My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Less is more. The database is fully normalised without adding an extra relationship. You shouldn't denormalise without a good reason. Denormalised systems are usually more fragile and will cost you more time in programming and maintenance. Of course if there is some other real-world relationship between galleries and users you may need to change the model. Do galleries have Owners, for instance and would those be Users? -- Bernard Peek Hi! I was thinking about system performance vs. normalization. By adding that extra relationship, three-level joins can be avoided, and so stressing the dbms too much. Do you think is a good idea in general to denormalize the data model by means of performance? Thanks! Spike, I'm not sure if you're deliberately trying to be provocative, but I'd say it's fair to characterize this newsgroup as denormalization- hostile ;-). Its the very first time i post (and even read) this newsgroup, so no, im not deliberately provocative. What's more important, I think, is to put first things first, and as I hinted at--and others made explicit--what's paramount is getting the requirements right and accurately modeling the problem domain. If users create galleries, and/or galleries can exist independently of any pictures being assigned to them, then model accordingly. Period. Bottom-line, IMHO: 1) model the domain accurately, and 2) deviate from the model only when *truly* warranted (NB that often denormalization is zero-sum--who cares when the data comes back faster when it's wrong or contradictory?). You might want to see if you can find a copy of "The Normal Is So... Interesting" by Chris Date (DBP&D 11/97) for more on the topic of denormalization. Many other sources abound. The problem here is that users should be able to upload pictures without specifying a particular gallery (i will use a default one). In a similar way, the should be able to create an empty gallery. Thus, there are two options: make a relationship between users and galleries or create a record in the join table between pictures and galleries with null values on foreign keys. |
|
I dont really like any of the two options, but if one of them increases overall performance, that will be a good decision maker. |
#9
| |||
| |||
|
|
Spike wrote: On 7 abr, 01:38, jefftyzzer <jefftyz... (AT) sbcglobal (DOT) net> wrote: On Apr 6, 3:40 pm, Spike <fau... (AT) gmail (DOT) com> wrote: On 6 abr, 23:11, Bernard Peek <b... (AT) shrdlu (DOT) com> wrote: In message 16d72645-6a6b-4fd4-bccf-d5002970f... (AT) q2g2000vbr (DOT) googlegroups.com>, Spike <fau... (AT) gmail (DOT) com> writes My question is: Should i add a relationship between galleries and users? I would like to query which galleries a user has, and i don't really know if it is worth adding a foreign key rather than doing a three- level join query each time i want to obtain this data. Less is more. The database is fully normalised without adding an extra relationship. You shouldn't denormalise without a good reason. Denormalised systems are usually more fragile and will cost you more time in programming and maintenance. Of course if there is some other real-world relationship between galleries and users you may need to change the model. Do galleries have Owners, for instance and would those be Users? -- Bernard Peek Hi! I was thinking about system performance vs. normalization. By adding that extra relationship, three-level joins can be avoided, and so stressing the dbms too much. Do you think is a good idea in general to denormalize the data model by means of performance? Thanks! Spike, I'm not sure if you're deliberately trying to be provocative, but I'd say it's fair to characterize this newsgroup as denormalization- hostile ;-). Its the very first time i post (and even read) this newsgroup, so no, im not deliberately provocative. What's more important, I think, is to put first things first, and as I hinted at--and others made explicit--what's paramount is getting the requirements right and accurately modeling the problem domain. If users create galleries, and/or galleries can exist independently of any pictures being assigned to them, then model accordingly. Period. Bottom-line, IMHO: 1) model the domain accurately, and 2) deviate from the model only when *truly* warranted (NB that often denormalization is zero-sum--who cares when the data comes back faster when it's wrong or contradictory?). You might want to see if you can find a copy of "The Normal Is So... Interesting" by Chris Date (DBP&D 11/97) for more on the topic of denormalization. Many other sources abound. The problem here is that users should be able to upload pictures without specifying a particular gallery (i will use a default one). In a similar way, the should be able to create an empty gallery. Thus, there are two options: make a relationship between users and galleries or create a record in the join table between pictures and galleries with null values on foreign keys. The latter is wrong. Wrong in so many ways and on so many levels, it would be tedious to try to enumerate them. If a user can create and own empty galleries, then, obviously, gallery has some direct join path to user. Failure to capture that would lead to stupid errors like the inclusion of another person's picture in one's gallery suddenly conferring ownership of the gallery to the other person. That, in itself, is an obvious potential security flaw. I strongly recommend you learn at least some of the fundamentals before you start designing anything that might impact the public. I dont really like any of the two options, but if one of them increases overall performance, that will be a good decision maker. Like and dislike has nothing to do with acting like a professional. While performance is an important consideration, fast and incorrect is no better than slow and incorrect; it is simply incorrect. A responsible and competent designer starts with correct and works from there to achieve the required performance characteristics. Only an ignorant boob would design for performance without any consideration for the actual requirements. |
#10
| |||
| |||
|
|
Hi! I was thinking about system performance vs. normalization. By adding that extra relationship, three-level joins can be avoided, and so stressing the dbms too much. Do you think is a good idea in general to denormalize the data model by means of performance? |
![]() |
| Thread Tools | |
| Display Modes | |
| |