> Under your proposed data import integration, you’ll have to maintain
descriptions, titles, content, pricing, associations, variants, etc FOR
EVERY SUPPLIER.  You’ll go insane.

Awesome advice Paul, and a great example.  It's definitely better to just
use the UPC (in my case), and maintain the supplier table. For stuff that
*I* control (like products, descriptions, content, electronictext, etc), I
prefer to use primary keys that I control.  For all other stuff (sales
orders, invoices, etc.) ofbiz can take care of that.  Thanks a lot.

On Thu, Apr 6, 2017 at 10:59 AM, Paul Mandeltort <p...@marcospec.com> wrote:

> While I don’t know the details of your application, sounds like you are
> trying to hardcode a join into the ProductID primary key which is just
> going to lead you to a world of pain down the road.
>
> OFbiz supports composite/compound primary keys which in many cases
> eliminates the need for an arbitrary unique identifier.
> https://en.wikipedia.org/wiki/Compound_key <https://en.wikipedia.org/
> wiki/Compound_key> OFbiz uses these extensively in sub entities. Look in
> the entity reference (/webtools/control/entityref) you’ll see the primary
> keys in red.
>
> The supplierProduct entity is already setup with a composite primary key
> OOTB.
> Product.ProductID-PartyID-MOQ-Currency guarantees uniqueness within the
> entity.
>
> Why crap up your Product entity with redundant information that should be
> kept in the supplier table? Products should be things that are, to an
> end-user, unique. A hardware store, for example, sells framing 2x4’s from
> thousands of suppliers, but the same end-user Product number is applied to
> them. Under your proposed data import integration, you’ll have to maintain
> descriptions, titles, content, pricing, associations, variants, etc FOR
> EVERY SUPPLIER.  You’ll go insane.
>
> Need to select, delete, etc all your products from a supplier? Just do the
> simple joined query:
>
> SELECT FROM supplierProduct WHERE
>         supplierProduct.productId=10000 AND
>         supplier.productManufacturerCode=798936836182.
>
> That’s the same.
>
> supplier.productManufacturerCode is currently not part of the
> SupplierProduct composite key but you could make it one if you’d like.
>
> The 20 character limit is there for a reason - IDs (such as productId) are
> used in MANY areas of Ofbiz, including forms like invoices, sales orders,
> purchase orders, barcodes, receipts, etc, so having a known sane limit
> there enables consistency throughout the business processes.  I wouldn’t
> mess with it.
>
> You gotta remember that Ofbiz is far from “finished”, In many areas,
> human-readable values are “encoded” into ID fields as a shortcut to avoid
> creating lookup entities for that information and to simplify programming
> for things that only ever have a handful of values in the entity like with
> the roleTypeId=“INTERNAL_ORGANIZATIO” that was mentioned originally,
>
> As a general rule, if you find yourself trying to change the framework for
> your convenience, take a real good hard look as to why you’re doing that.
> Every time I try to take shortcuts with the data model because I’m too lazy
> to get my data cleaned up to fit it, I ALWAYS regret it,100% of the time,
> often years later.
>
> Hope that helps!
> —P
>
>
>
> > On Apr 6, 2017, at 12:34 AM, Mike <mz4whee...@gmail.com> wrote:
> >
> > Apologies for the absurd reference.  Certainly the screen real estate is
> > the biggest issue.  Sure, it is nice to display primary keys within 20
> > characters...
> >
> > But let me give you a working example.  In fact, this was a real issue
> with
> > me, considering the import of products.  Sure, I could have assigned a
> > non-meaningful sequential number, but I like real reference, like a part
> > number or UPC code.  In my case, multiple suppliers may carry the same
> UPC,
> > so I elected to create the primary key as "SUPPLIER_CODE-UPC".  This way
> I
> > can always work on a set of P/Ns from a given supplier.  So, the primary
> > key becomes: "10000-798936836182", already 18 characters.
> >
> > <Product productId="10000-798936836182" ...  CHR=18
> > <ProductCategoryMember productId="10000-798936836182"
> > productCategoryId="10002"...
> > <ProductPrice productId="10000-798936836182"...
> > <SupplierProduct productId="10000-798936836182"...
> > <GoodIdentification productId="10000-798936836182"
> idValue="798936836182"...
> > <ProductFacility productId="10000-798936836182"...
> > <DataResource dataResourceId="10000-798936836182Den"... CHR=21 **FAIL**
> > <ElectronicText dataResourceId="10000-798936836182Den"... CHR=21
> **FAIL**
> > <Content dataResourceId="10000-798936836182Den" ...
> > <ProductContent productId="10000-798936836182"
> > contentId="10000-798936836182Den" ...
> > <ContentAssoc contentId="10000-798936836182Den"
> > contentIdTo="10000-798936836182Den"/> ...
> > <DataResource dataResourceTypeId="ELECTRONIC_TEXT"
> > dataResourceId="10000-798936836182Len" ...
> > <ElectronicText dataResourceId="10000-798936836182Len" ...
> > <Content dataResourceId="10000-798936836182Len"
> > contentId="10000-798936836182Len" ...
> > <ContentAssoc contentId="10000-798936836182Len" ...
> > ...etc...
> >
> > And this is a relatively short part number sequence.  If I WANT to pad
> > extra info into the primary key.. for MY convenience, I don't have to
> worry
> > about the import failing due to a 20 character limit somewhere.
> >
> > In addition, setting up the data import as above allows me to quickly
> blow
> > away the product, because all primary keys on all affected tables were
> > created using a consistent pattern.
> >
> > That is all that I am saying.  Once you set up a database, you have to to
> > live with it.
> >
> > On Wed, Apr 5, 2017 at 3:12 PM, Scott Gray <scott.g...@hotwaxsystems.com
> >
> > wrote:
> >
> >> Perhaps lookup performance isn't the only consideration?
> >>
> >> A few things come to mind:
> >> - screen realestate when PKs need to be displayed
> >> - bandwidth for syncing to slaves and transporting data to/from the
> client
> >> - file size for export/import be it XML or whatever
> >>
> >> Given that PKs shouldn't perform any function beyond guaranteeing
> >> uniqueness within a given table, and that we use numeric sequences for
> >> nonstatic tables, I struggle to see where it makes sense to use anything
> >> bigger than 20 characters. So we have to abbreviate some seed data to
> fit,
> >> not really a big deal and certainly not "absurd".
> >>
> >> Like any other code base in the world, OFBiz contains opinionated
> design.
> >> Everyone is free to discuss those opinions ad nauseam, but using strong
> >> language such as "absurd" because you have a different opinion is
> >> unnecessary and not constructive to the conversation.
> >>
> >> Regards
> >> Scott
> >>
> >>
> >>
> >> On 6/04/2017 09:33, "Mike" <mz4whee...@gmail.com> wrote:
> >>
> >>> Well, with postgresql, and localpostnew, there are no worries about
> UTF8
> >>> compatibility, or lengths of *ANY* fields.  It works just fine, and the
> >>> performance is fast.
> >>>
> >>> One may argue that you SHOULD limit your primary ID fields.  OK:  Maybe
> >> to
> >>> 255, using VARYING(255)...  But never use VARCHAR(255), because you are
> >>> physically storing 255 characters... but never just 20.
> >>>
> >>> On Wed, Apr 5, 2017 at 12:42 PM, Jacques Le Roux <
> >>> jacques.le.r...@les7arts.com> wrote:
> >>>
> >>>> For history sake: I committed localpostnew.
> >>>>
> >>>> After a discussion (on dev ML or somewhere else? Unfortunately I can't
> >>>> find) it was commonly agreed that we should merge localpostnew in
> >>>> localpostgres and then remove localpostnew.
> >>>>
> >>>> Later we commonly decided http://markmail.org/message/
> op2yl3pcbj3lgxpg
> >>> to
> >>>> revert some changes in the new (merged) localpostgres
> >>>>
> >>>> Feel free to use localpostnew. We could even put it back in, as
> >> suggested
> >>>> Nicolas, but I believe it should be then named otherwise to avoid
> >>> confusion
> >>>>
> >>>> Jacques
> >>>>
> >>>>
> >>>> Le 05/04/2017 à 19:32, Mike a écrit :
> >>>>
> >>>>> Pierre, here is an example from the demo data:
> >>>>>
> >>>>> accounting_OrganizationData.xml:    <PartyRole partyId="RECEIVING"
> >>>>> roleTypeId="INTERNAL_ORGANIZATIO"/>
> >>>>>
> >>>>> The default of ID (20 chrs) is so small that you can't even properly
> >>> spell
> >>>>> "INTERNAL_ORGANIZATION"... I work with databases every day, and I
> >> would
> >>> be
> >>>>> so limited if I had to work with such small primary IDs.
> >>>>>
> >>>>> The thing is you don't want to not limit yourself when you first
> >> build a
> >>>>> database.  The jira is interesting, and GUIDs are a good example.
> >>>>>
> >>>>> Personally, I use postgresql, using the "localpostnew" type...
> Removed
> >>>>> from
> >>>>> trunk for some reason.. It has unlimited primary ID sizes (ok, 2.1G),
> >>>>> which
> >>>>> allows me to create any sort of primary key I want.
> >>>>>
> >>>>>     <field-type-def type="id"         sql-type="TEXT"
> >>>>> java-type="String"/>
> >>>>>     <field-type-def type="id-long"  sql-type="TEXT"
> >>> java-type="String"/>
> >>>>>     <field-type-def type="id-vlong" sql-type="TEXT"
> >>> java-type="String"/>
> >>>>>
> >>>>> If you think that type=TEXT is slow or less efficient..  Here is what
> >>>>> postgres says about type "TEXT"..
> >>>>>
> >>>>> https://www.postgresql.org/docs/9.3/static/datatype-character.html
> >>>>>
> >>>>> *Tip:* There is no performance difference among these three types,
> >> apart
> >>>>>
> >>>>> from increased storage space when using the blank-padded type, and a
> >> few
> >>>>> extra CPU cycles to check the length when storing into a
> >>>>> length-constrained
> >>>>> column. While character(n) has performance advantages in some other
> >>>>> database systems, there is no such advantage inPostgreSQL; in fact
> >>>>> character(n) is usually the slowest of the three because of its
> >>> additional
> >>>>> storage costs. In most situations text or character varying should be
> >>> used
> >>>>> instead.
> >>>>>
> >>>>> Mysql has a similar type... I personally haven't tested it.
> >>>>>
> >>>>> On Wed, Apr 5, 2017 at 10:06 AM, Pierre Smits <
> pierre.sm...@gmail.com
> >>>
> >>>>> wrote:
> >>>>>
> >>>>> HI Mike, all,
> >>>>>>
> >>>>>> Re 2: Talk about adjustment of default key size
> >>>>>> Why is that absurd? You believe it is too long/too short?
> >>>>>> Following JIRA issue may be of interest:
> >>>>>> https://issues.apache.org/jira/browse/OFBIZ-8343
> >>>>>>
> >>>>>> Best regards,
> >>>>>>
> >>>>>> Pierre Smits
> >>>>>>
> >>>>>> ORRTIZ.COM <http://www.orrtiz.com>
> >>>>>> OFBiz based solutions & services
> >>>>>>
> >>>>>> OFBiz Extensions Marketplace
> >>>>>> http://oem.ofbizci.net/oci-2/
> >>>>>>
> >>>>>> On Wed, Apr 5, 2017 at 5:10 PM, Mike <mz4whee...@gmail.com> wrote:
> >>>>>>
> >>>>>> Nice videos.  Regarding the mysql setup, you may want to include two
> >>>>>>>
> >>>>>> items:
> >>>>>>
> >>>>>>> 1) Make sure mysql is setup as UTF8, discussed earlier in this mail
> >>>>>>>
> >>>>>> group.
> >>>>>>
> >>>>>>> Requires tweaking:
> >>>>>>>
> >>>>>>> framework/entity/config/entityengine.xml
> >>>>>>> /etc/mysql/my.cnf
> >>>>>>>
> >>>>>>> 2) Talk about adjusting the default sizes of primary keys (ID).
> The
> >>>>>>> default is an absurd 20 characters:
> >>>>>>>
> >>>>>>> framework/entity/fieldtype/fieldtypemysql.xml
> >>>>>>>
> >>>>>>>     <field-type-def type="id" sql-type="VARCHAR(20)"
> >>>>>>> java-type="String"/>
> >>>>>>>     <field-type-def type="id-long" sql-type="VARCHAR(60)"
> >>>>>>> java-type="String"/>
> >>>>>>>     <field-type-def type="id-vlong" sql-type="VARCHAR(250)"
> >>>>>>> java-type="String"/>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On Wed, Apr 5, 2017 at 6:03 AM, Pranay Pandey <
> >>>>>>> pranay.pan...@hotwaxsystems.com> wrote:
> >>>>>>>
> >>>>>>> Thanks so much Deepak!
> >>>>>>>>
> >>>>>>>> Best regards,
> >>>>>>>>
> >>>>>>>> Pranay Pandey
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Wed, Apr 5, 2017 at 5:51 PM, Deepak Dixit
> >>>>>>>>
> >>>>>>> <deepak.dixit@hotwaxsystems.
> >>>>>>
> >>>>>>> com
> >>>>>>>>
> >>>>>>>>> wrote:
> >>>>>>>>> Hi Team,
> >>>>>>>>>
> >>>>>>>>> Here are some more videos from Pranay
> >>>>>>>>>
> >>>>>>>>> -  Setup OFBiz in IntelliJ IDEA IDE - Release 16.11 and Trunk
> >>>>>>>>> <https://youtu.be/mxToh2rX7NY>
> >>>>>>>>> - Setup OFBiz with MySQL <https://youtu.be/Lzmv0DCC5N4>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Thanks Pranay for your effort.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Thanks & Regards
> >>>>>>>>> --
> >>>>>>>>> Deepak Dixit
> >>>>>>>>> www.hotwaxsystems.com
> >>>>>>>>>
> >>>>>>>>> On Wed, Mar 22, 2017 at 7:07 PM, akash jain <
> >> akash1.ja...@gmail.com
> >>>>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>> Nice videos, thanks Pranay!
> >>>>>>>>>>
> >>>>>>>>>> Thanks and Regards
> >>>>>>>>>> --
> >>>>>>>>>> Akash Jain
> >>>>>>>>>>
> >>>>>>>>>> On Thu, Mar 9, 2017 at 6:18 PM, Deepak Dixit
> >>>>>>>>>>
> >>>>>>>>> <deepak.dixit@hotwaxsystems.
> >>>>>>>>
> >>>>>>>>> com
> >>>>>>>>>>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>> Hi Everyone,
> >>>>>>>>>>>
> >>>>>>>>>>> Pranay has created two video tutorials, these have been
> >> published
> >>>>>>>>>>>
> >>>>>>>>>> on
> >>>>>>>
> >>>>>>>> our
> >>>>>>>>>
> >>>>>>>>>> OFBiz YouTube channel <https://www.youtube.com/user/ofbiz>:
> >>>>>>>>>>> 1 - Apache OFBiz Mailing Lists <https://www.youtube.com/
> >>>>>>>>>>> watch?v=bIS2kftvsq4>
> >>>>>>>>>>> 2 - OFBiz Beginners Tutorial - Basic Setup Release16.11
> >>>>>>>>>>> <https://youtu.be/efkB_aN-ODw>
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks Pranay for these helpful videos.
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks & Regards
> >>>>>>>>>>> --
> >>>>>>>>>>> Deepak Dixit
> >>>>>>>>>>> www.hotwaxsystems.com
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>
> >>>
> >>
>
>

Reply via email to