Skip to content

Commit

Permalink
Add primary and foreign key designations
Browse files Browse the repository at this point in the history
  • Loading branch information
sualeh committed May 3, 2023
1 parent 7cfcdd9 commit 08107ce
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
erDiagram

PUBLIC-BOOKS-AUTHORS {
INTEGER ID
PUBLICBOOKSAUTHORS {
INTEGER ID PK
VARCHAR FIRSTNAME
VARCHAR LASTNAME
VARCHAR ADDRESS1
Expand All @@ -12,96 +12,96 @@ erDiagram
VARCHAR COUNTRY
}

PUBLIC-BOOKS-BOOKS {
INTEGER ID "Unique (internal) id for book"
PUBLICBOOKSBOOKS {
INTEGER ID PK "Unique (internal) id for book"
VARCHAR TITLE "Book title"
VARCHAR DESCRIPTION "Book description (Usually the blurb from the book jacket or promotional materials)"
INTEGER PUBLISHERID "Foreign key to the book publisher"
DATE PUBLICATIONDATE "Book publication date"
DOUBLE PRICE "Current price for the book"
INTEGER PREVIOUSEDITIONID
INTEGER PREVIOUSEDITIONID FK
}

PUBLIC-BOOKS-"Celebrities" {
INTEGER Id
PUBLICBOOKSCelebrities {
INTEGER Id PK
VARCHAR NAME
}

PUBLIC-BOOKS-COUPONS {
INTEGER ID
PUBLICBOOKSCOUPONS {
INTEGER ID PK
CLOB DATA
INTEGERARRAY COUPONS
VARCHARARRAY BOOKS
VARCHAR20ARRAY10 BOOKS
}

PUBLIC-BOOKS-CUSTOMERDATA {
INTEGER ID
VALID_STRING DATA
PUBLICBOOKSCUSTOMERDATA {
INTEGER ID PK
VALIDSTRING DATA
}

PUBLIC-BOOKS-CUSTOMERS {
INTEGER ID
NAME_TYPE FIRSTNAME
NAME_TYPE LASTNAME
AGE_TYPE AGE
PUBLICBOOKSCUSTOMERS {
INTEGER ID PK
NAMETYPE FIRSTNAME
NAMETYPE LASTNAME
AGETYPE AGE
}

PUBLIC-BOOKS-PUBLISHERS {
INTEGER ID "Unique (internal) id for book publisher"
PUBLICBOOKSPUBLISHERS {
INTEGER ID PK "Unique (internal) id for book publisher"
VARCHAR PUBLISHER "Name of book publisher"
}

PUBLIC-"PUBLISHER SALES"-REGIONS {
PUBLICPUBLISHERSALESREGIONS {
VARCHAR CITY
VARCHAR STATE
VARCHAR POSTALCODE
VARCHAR COUNTRY
VARCHAR POSTALCODE PK
VARCHAR COUNTRY PK
}

PUBLIC-"PUBLISHER SALES"-SALESDATA {
INTEGER SALESDATAID
PUBLICPUBLISHERSALESSALESDATA {
INTEGER SALESDATAID UK
DOUBLE YEARLYAMOUNT
}

PUBLIC-BOOKS-BOOKAUTHORS {
INTEGER BOOKID
INTEGER AUTHORID
PUBLICBOOKSBOOKAUTHORS {
INTEGER BOOKID FK
INTEGER AUTHORID FK
VARCHAR SOMEDATA
}

PUBLIC-BOOKS-"Celebrity Updates" {
INTEGER Celebrity Id
PUBLICBOOKSCelebrityUpdates {
INTEGER CelebrityId PK
VARCHAR UPDATE
}

PUBLIC-BOOKS-ΒΙΒΛΊΑ {
SMALLINT ΜΟΝΑΔΙΚΌΣ
VARCHAR ΤΊΤΛΟΣ
VARCHAR ΠΕΡΙΓΡΑΦΉ
SMALLINT ΕΚΔΌΤΗΣ
PUBLICBOOKS {
SMALLINT UNKNOWN PK
VARCHAR UNKNOWN
VARCHAR UNKNOWN
SMALLINT UNKNOWN FK
}

PUBLIC-"PUBLISHER SALES"-SALES {
VARCHAR POSTALCODE
VARCHAR COUNTRY
INTEGER BOOKID
INTEGER COUPON_ID
PUBLICPUBLISHERSALESSALES {
VARCHAR POSTALCODE FK
VARCHAR COUNTRY FK
INTEGER BOOKID FK
INTEGER COUPONID
DATE PERIODENDDATE
DOUBLE TOTALAMOUNT
INTEGER SALESDATAID
INTEGER SALESDATAID FK
}

PUBLIC-BOOKS-AUTHORSLIST {
PUBLICBOOKSAUTHORSLIST {
INTEGER ID
VARCHAR FIRSTNAME
VARCHAR LASTNAME
}

PUBLIC-BOOKS-AUTHORS ||--o{ PUBLIC-BOOKS-BOOKAUTHORS : "foreign key"
PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-BOOKS-BOOKAUTHORS : "foreign key"
PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-BOOKS-BOOKS : "foreign key"
PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key"
PUBLIC-BOOKS-"Celebrities" ||--o{ PUBLIC-BOOKS-"Celebrity Updates" : "foreign key"
PUBLIC-BOOKS-PUBLISHERS ||--o{ PUBLIC-BOOKS-ΒΙΒΛΊΑ : "foreign key"
PUBLIC-"PUBLISHER SALES"-REGIONS ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key"
PUBLIC-"PUBLISHER SALES"-SALESDATA ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key"
PUBLICBOOKSAUTHORS ||--o{ PUBLICBOOKSBOOKAUTHORS : "foreign key"
PUBLICBOOKSBOOKS ||--o{ PUBLICBOOKSBOOKAUTHORS : "foreign key"
PUBLICBOOKSBOOKS ||--o{ PUBLICBOOKSBOOKS : "foreign key"
PUBLICBOOKSBOOKS ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key"
PUBLICBOOKSCelebrities ||--o{ PUBLICBOOKSCelebrityUpdates : "foreign key"
PUBLICBOOKSPUBLISHERS ||--o{ PUBLICBOOKS : "foreign key"
PUBLICPUBLISHERSALESREGIONS ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key"
PUBLICPUBLISHERSALESSALESDATA ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key"
29 changes: 23 additions & 6 deletions schemacrawler-scripting/src/test/resources/mermaid.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
from __future__ import print_function
import re


# Mermaid only allows alphanumeric identifiers
def cleanname(name):
namepattern = r'[^0-9a-zA-Z]'
cleanedname = re.sub(namepattern, '', name)
if not cleanedname:
cleanedname = "UNKNOWN"
return cleanedname


print('erDiagram')
print('')
for table in catalog.tables:
print(' ' + re.sub(r'\.', '-', table.fullName) + ' {')
print(' ' + cleanname(table.fullName) + ' {')
for column in table.columns:
print(' ' + re.sub(r'\([\d ,]+\)|\[[\d ,]+\]|\s+', '',
column.columnDataType.name) + ' ' + column.name, end='')
print(' ' + cleanname(column.columnDataType.name) + ' ' + cleanname(column.name),
end='')
if column.isPartOfPrimaryKey():
print(' PK', end='')
elif column.isPartOfForeignKey():
print(' FK', end='')
elif column.isPartOfUniqueIndex():
print(' UK', end='')
if column.hasRemarks():
print(' "' + ' '.join(column.remarks.splitlines()) + '"', end='')
print(' "' + ' '.join(column.remarks.splitlines()) + '"',
end='')
print()
print(' }')
print('')

for table in catalog.tables:
for childTable in table.referencingTables:
print(' ' + re.sub(r'\.', '-', table.fullName) + ' ||--o{ ' +
re.sub(r'\.', '-', childTable.fullName) + ' : "foreign key"')
print(' ' + cleanname(table.fullName) + ' ||--o{ ' +
cleanname(childTable.fullName) + ' : "foreign key"')

0 comments on commit 08107ce

Please sign in to comment.