Usage ===== Entity Relationship Diagram allows the creation of Entity Relationship Diagrams to describe entities, their attributes and the relationships between them. Entities are created and attributes added to them. Attributes have a name and type and may be identified as a key. Entities are then added to the Entity Relationship Diagram. Relationships between entities are defined and added to the Entity Relationship Diagram, which is then rendered. Example ------- PHP +++ .. code-block:: php $customer = (new Entity('CUSTOMER')) ->withAttribute( (new Attribute('customerId', 'int'))->withKey(Key::primaryKey), new Attribute('name', 'string'), new Attribute('sector', 'string') ) ; $deliveryAddress = (new Entity('DELIVERY-ADDRESS')) ->withAttribute( (new Attribute('customerId', 'int'))->withKey(Key::foreignKey), new Attribute('streetAddress', 'string'), new Attribute('locality', 'string'), new Attribute('region', 'string'), new Attribute('postalCode', 'string'), new Attribute('country', 'string') ) ; $order = (new Entity('ORDER')) ->withAttribute( (new Attribute('orderNumber', 'int'))->withKey(Key::primaryKey), (new Attribute('customerId', 'int'))->withKey(Key::foreignKey) ) ; $lineItem = (new Entity('LINE-ITEM')) ->withAttribute( (new Attribute('orderNumber', 'int'))->withKey(Key::foreignKey), new Attribute('productCode', 'string'), new Attribute('quantity', 'int'), new Attribute('float', 'pricePerUnit') ) ; echo Mermaid::create(EntityRelationshipDiagram::class) ->withEntity($customer, $deliveryAddress, $order, $lineItem) ->withRelationship( new Relationship( $customer, Cardinality::oneOrMore, $deliveryAddress, Cardinality::oneOrMore, RelationshipType::nonIdentifying, 'uses' ), new Relationship( $customer, Cardinality::exactlyOne, $order, Cardinality::zeroOrOne, RelationshipType::identifying, 'places' ), new Relationship( $order, Cardinality::exactlyOne, $lineItem, Cardinality::oneOrMore, RelationshipType::identifying, 'contains' ), ) ->render() ; Generated Mermaid +++++++++++++++++ ::
    erDiagram
    direction TB
    CUSTOMER {
      int customerId PK
      string name
      string sector
    }
    DELIVERY-ADDRESS {
      int customerId FK
      string streetAddress
      string locality
      string region
      string postalCode
      string country
    }
    ORDER {
      int orderNumber PK
      int customerId FK
    }
    LINE-ITEM {
      int orderNumber FK
      string productCode
      int quantity
      float pricePerUnit
    }
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    
Mermaid Diagram +++++++++++++++ .. mermaid:: erDiagram direction TB CUSTOMER { int customerId PK string name string sector } DELIVERY-ADDRESS { int customerId FK string streetAddress string locality string region string postalCode string country } ORDER { int orderNumber PK int customerId FK } LINE-ITEM { int orderNumber FK string productCode int quantity float pricePerUnit } CUSTOMER }|..|{ DELIVERY-ADDRESS : uses CUSTOMER ||--o{ ORDER : places ORDER ||--|{ LINE-ITEM : contains