On Mar 22, 2011, at 6:27 AM, Jacopo Cappellato wrote: > Thanks David, > > they are all good points; here are a few more from my wish list: > > - Remove TechData* entities and use WorkEffort
Yeah, that's a good idea that would simplify the data model and make things more flexible (though make the manufacturing scheduling code somewhat more complex). > - get rid of all the different GlAccount Default mappings entities and design > a cleaner and central entity As a start we could at least move all of these entities to the accounting component (ie put them all in a single package, and in a single file). If we consolidate various of these to a single entity would we use a generic related key column? It's always a bummer to lose foreign keys, but there are quite a few entities that follow the same pattern and it certainly could be simplified... > - move return type from the return item and to the header Yes, this is a mess of bad design, we have: ReturnHeaderType ReturnItemType ReturnReason ReturnType IMO ReturnItem.returnTypeId should go to returnResponseEnumId (since it's really where the response is selected, and not a type for the return or the return item... at all), ReturnHeader.returnHeaderTypeId -> returnTypeEnumId, ReturnItem.returnItemTypeId -> itemTypeEnumId (use the shared item types mentioned in another item below to consolidate these so the same set are used for OrderItem, OrderAdjustment, InvoiceItem, ReturnItem, RequestItem, QuoteItem (irrelevant if/when Order* entities are used for quotes) > - redesign following a more standard approach > PartyClassificationGroup/PartyClassificationType/PartyClassification Yes, this is another good one. This the pattern I had in mind: <entity entity-name="PartyClassification" package-name="mantle.party.party"> <field name="partyClassificationId" type="id" is-pk="true"/> <field name="classificationTypeEnumId" type="id"/> <field name="parentClassificationId" type="id"/> <field name="description" type="text-long"/> <relationship type="one" title="PartyClassificationType" related-entity-name="Enumeration"> <key-map field-name="classificationTypeEnumId"/> </relationship> <relationship type="one" title="Parent" related-entity-name="PartyClassification"> <key-map field-name="parentClassificationId"/> </relationship> </entity> <entity entity-name="PartyClassificationAppl" package-name="mantle.party.party"> <field name="partyId" type="id" is-pk="true"/> <field name="partyClassificationId" type="id" is-pk="true"/> <field name="fromDate" type="date-time" is-pk="true"/> <field name="thruDate" type="date-time"/> <relationship type="one" related-entity-name="Party"/> <relationship type="one" related-entity-name="PartyClassification"/> </entity> > - instead of OrderItemShipGrpInvRes we could use InventoryItemDetail > (expanded) This one I'm not sure about. I like the idea of changing "OrderItemShipGrpInvRes" to just InventoryReserveration and moving it to the product.inventory package, but the InventoryItemDetail entity is used to keep a history of changes to the quantities/etc on an InventoryItem and the reservation records are created and removed as needed for the actual reservations needed, so I'm not sure it would be a good fit. -David > > Kind regards, > > Jacopo > > On Mar 20, 2011, at 4:33 AM, David E Jones wrote: > >> >> I'm writing this to start a thread to discuss: >> >> If you could change ANYTHING in the OFBiz data model, what would it be? >> >> To kick this off here are some ideas I've compiled that have come up over >> the years (many based on feedback from people on this mailing list), or that >> I thought of recently will working on this topic. You can see them below... >> >> -David >> >> ======================================================== >> >> - Rename *Role entities to *Party >> - Remove *Attribute and *TypeAttr entities (not generally a good practice to >> use) >> - Remove all status history (*Status) and just using audit on the statusId >> field >> - ProductPrice add quantity breaks, change PK to single field sequenced >> - Get rid of QuantityBreak and use the two simple fields instead in each >> place used >> - Get rid of ProdCatalog*, rework it to ProductStoreCategory, ie directly >> associate to the store >> - Change OrderItemShipGrpInvRes to InventoryReservation, change PK to single >> field sequenced >> - Change Quote to be other types of Order >> - Make Return more like Invoice (ie no adjustment, just use items for >> everything) >> - Instead of OrderItemType, OrderAdjustmentType, InvoiceItemType, >> ReturnItemType just use Shared ItemType everywhere >> - PartyRelationship simplify (single sequenced ID) >> >> - Make prefixes consistent (no suffixes), ie toPartyId instead of partyIdTo, >> etc >> - Change all relationships to PartyRole to be type one-nofk; use plain one >> for Party and RoleType >> - Move most *Type entities to Enumeration values (update seed data, referring >> entities, remove *Type) (after this remove all remaining hasTable fields) >> - Rework PhysicalInventory and InventoryVariance to simplify, reduce >> dependency on InventoryItem >> - Review use of Appl, Assoc (look at book, make sure consistent) >> - Add PartyIdentification entity, get rid of various fields and other >> entities (maybe even PartyTaxAuthority...) >> - Change GoodIdentification to ProductIdentification >> - Combine PartyContactMechPurpose and PartyContactMech (remove, only use >> entity with purpose, name PartyContactMech) >> - Get rid of NoteData, put noteText very-long field directly on various >> *Note entities >> - Review all entities with large PKs (esp 4+ fields) >> - Review and do something with all createOn/By lastUpdateOn/By fields, maybe >> add an auditing flag for the entity instead of just for a field >> - CustRequest to Request >> - FinAccount to FinancialAccount >> - Invoice handle recurrence? (was using RecurrenceInfo) >> - Get rid of optional ProductFeature concept (conf/etc products much better >> model) >> - Instead of various *Term entities and mapping, just use OrderTerm >> everywhere >> - Cleanup/reorg ShipmentCostEstimate, CarrierShipmentMethod, etc, etc >> - Agreement - make price list easier/cleaner >> - Remove all createdDate, createdByUserLogin, lastModifiedDate, >> lastModifiedByUserLogin fields (use framework defaults, audit-log) >> - Product clean up: move dimenstions to new entity, remove content fields, >> etc >> - Trim down big entities like Product, WorkEffort, etc; for groups of >> similar fields use a more normalized structure >> >> >