activefacts-examples 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (262) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +10 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +22 -0
  8. data/Rakefile +6 -0
  9. data/activefacts-examples.gemspec +26 -0
  10. data/cql/Address.cql +44 -0
  11. data/cql/Astronomy.cql +35 -0
  12. data/cql/Blog.cql +54 -0
  13. data/cql/CinemaBookings.cql +64 -0
  14. data/cql/CinemaTickets.cql +127 -0
  15. data/cql/CompanyDirectorEmployee.cql +56 -0
  16. data/cql/Death.cql +17 -0
  17. data/cql/Diplomacy.cql +48 -0
  18. data/cql/Genealogy.cql +98 -0
  19. data/cql/Health.cql +78 -0
  20. data/cql/Insurance.cql +320 -0
  21. data/cql/Marriage.cql +18 -0
  22. data/cql/Metamodel.cql +567 -0
  23. data/cql/Monogamy.cql +24 -0
  24. data/cql/MultiInheritance.cql +22 -0
  25. data/cql/MultipleSubtyping.cql +30 -0
  26. data/cql/NonRoleId.cql +14 -0
  27. data/cql/OddIdentifier.cql +18 -0
  28. data/cql/OilSupply.cql +53 -0
  29. data/cql/OneRoleNesting.cql +38 -0
  30. data/cql/OneToOnes.cql +17 -0
  31. data/cql/Orienteering.cql +111 -0
  32. data/cql/PartyModel.cql +38 -0
  33. data/cql/PersonPlaysGame.cql +18 -0
  34. data/cql/RedundantDependency.cql +34 -0
  35. data/cql/SchoolActivities.cql +33 -0
  36. data/cql/SeparateSubtype.cql +30 -0
  37. data/cql/ServiceDirector.cql +276 -0
  38. data/cql/SimplestUnary.cql +12 -0
  39. data/cql/Supervision.cql +34 -0
  40. data/cql/VenueSeating.cql +45 -0
  41. data/cql/WaiterTips.cql +33 -0
  42. data/cql/Warehousing.cql +101 -0
  43. data/cql/WindowInRoomInBldg.cql +28 -0
  44. data/cql/unit.cql +474 -0
  45. data/diagrams/json/Address.json +41 -0
  46. data/diagrams/json/Astronomy.json +31 -0
  47. data/diagrams/json/Blog.json +46 -0
  48. data/diagrams/json/CinemaBookings.json +53 -0
  49. data/diagrams/json/CinemaTickets.json +101 -0
  50. data/diagrams/json/CompanyDirectorEmployee.json +44 -0
  51. data/diagrams/json/Death.json +20 -0
  52. data/diagrams/json/Diplomacy.json +34 -0
  53. data/diagrams/json/Genealogy.json +78 -0
  54. data/diagrams/json/Insurance.json +259 -0
  55. data/diagrams/json/Marriage.json +21 -0
  56. data/diagrams/json/Metamodel.json +318 -0
  57. data/diagrams/json/Monogamy.json +22 -0
  58. data/diagrams/json/MultiInheritance.json +25 -0
  59. data/diagrams/json/MultipleSubtyping.json +22 -0
  60. data/diagrams/json/OilSupply.json +49 -0
  61. data/diagrams/json/OneRoleNesting.json +37 -0
  62. data/diagrams/json/Orienteering.json +94 -0
  63. data/diagrams/json/PersonPlaysGame.json +22 -0
  64. data/diagrams/json/RedundantDependency.json +33 -0
  65. data/diagrams/json/SchoolActivities.json +28 -0
  66. data/diagrams/json/SeparateSubtype.json +29 -0
  67. data/diagrams/json/SimplestUnary.json +15 -0
  68. data/diagrams/json/Supervision.json +27 -0
  69. data/diagrams/json/VenueSeating.json +40 -0
  70. data/diagrams/json/WaiterTips.json +29 -0
  71. data/diagrams/json/Warehousing.json +86 -0
  72. data/diagrams/json/WindowInRoomInBldg.json +31 -0
  73. data/images/Address.SQL.png +0 -0
  74. data/images/Address.png +0 -0
  75. data/images/Blog.png +0 -0
  76. data/images/CinemaBookings.png +0 -0
  77. data/images/CinemaTickets.png +0 -0
  78. data/images/CompanyDirectorEmployee.png +0 -0
  79. data/images/Death.png +0 -0
  80. data/images/Diplomacy.png +0 -0
  81. data/images/DumpMetamodel.bat +2 -0
  82. data/images/Genealogy.png +0 -0
  83. data/images/Insurance/Claim.png +0 -0
  84. data/images/Insurance/Insurance.png +0 -0
  85. data/images/Insurance/Person.png +0 -0
  86. data/images/Insurance/Policy.png +0 -0
  87. data/images/Insurance/Related.png +0 -0
  88. data/images/Insurance/VehicleIncident.png +0 -0
  89. data/images/Marriage.png +0 -0
  90. data/images/Metamodel/Concepts.png +0 -0
  91. data/images/Metamodel/Constraints.png +0 -0
  92. data/images/Metamodel/ContextNote.png +0 -0
  93. data/images/Metamodel/Diagrams.png +0 -0
  94. data/images/Metamodel/Language.png +0 -0
  95. data/images/Metamodel/Legacy.png +0 -0
  96. data/images/Metamodel/Objects.png +0 -0
  97. data/images/Metamodel/Populations.png +0 -0
  98. data/images/Metamodel/Query.png +0 -0
  99. data/images/Metamodel/Units.png +0 -0
  100. data/images/Metamodel/ValueConstraints.png +0 -0
  101. data/images/Metamodel/ValueTypes.png +0 -0
  102. data/images/MetamodelER.bcp +1 -0
  103. data/images/MetamodelER.pdf +0 -0
  104. data/images/MultiInheritance.png +0 -0
  105. data/images/NorthwindER.png +0 -0
  106. data/images/OilSupply.png +0 -0
  107. data/images/Orienteering/Administration.png +0 -0
  108. data/images/Orienteering/Registration.png +0 -0
  109. data/images/Orienteering/Scoring.png +0 -0
  110. data/images/PersonPlaysGame.png +0 -0
  111. data/images/RedundantDependency.png +0 -0
  112. data/images/SchoolActivities.png +0 -0
  113. data/images/SeparateSubtype.png +0 -0
  114. data/images/SimplestUnary.png +0 -0
  115. data/images/Supervision.png +0 -0
  116. data/images/VenueSeating.png +0 -0
  117. data/images/WaiterTips.png +0 -0
  118. data/images/Warehousing.png +0 -0
  119. data/images/WindowInRoomInBldg.png +0 -0
  120. data/metadata/json/Astronomy.json +175 -0
  121. data/metadata/json/CinemaBookings.json +354 -0
  122. data/metadata/json/CinemaTickets.json +768 -0
  123. data/metadata/json/CompanyDirectorEmployee.json +270 -0
  124. data/metadata/json/Diplomacy.json +186 -0
  125. data/metadata/json/Metamodel.json +3214 -0
  126. data/metadata/json/OilSupply.json +411 -0
  127. data/metadata/json/SeparateSubtype.json +157 -0
  128. data/metadata/json/Supervision.json +128 -0
  129. data/metadata/json/VenueSeating.json +209 -0
  130. data/orm/.gitignore +11 -0
  131. data/orm/Address.orm +1268 -0
  132. data/orm/Astronomy.orm +925 -0
  133. data/orm/Blog.orm +1711 -0
  134. data/orm/CinemaBookings.orm +1998 -0
  135. data/orm/CinemaTickets.orm +5060 -0
  136. data/orm/CompanyDirectorEmployee.orm +2094 -0
  137. data/orm/Death.orm +386 -0
  138. data/orm/Diplomacy.orm +1478 -0
  139. data/orm/ExampleModels2010.csproj +764 -0
  140. data/orm/ExampleModels2010.sln +16 -0
  141. data/orm/Genealogy.orm +3209 -0
  142. data/orm/Health.orm +2407 -0
  143. data/orm/Insurance.orm +12727 -0
  144. data/orm/Marriage.orm +493 -0
  145. data/orm/Metamodel.orm +20998 -0
  146. data/orm/Monogamy.orm +328 -0
  147. data/orm/MultiInheritance.orm +537 -0
  148. data/orm/MultipleSubtyping.orm +347 -0
  149. data/orm/OilSupply.orm +2533 -0
  150. data/orm/OneRoleNesting.orm +1237 -0
  151. data/orm/Orienteering.orm +3976 -0
  152. data/orm/PersonPlaysGame.orm +426 -0
  153. data/orm/RedundantDependency.orm +844 -0
  154. data/orm/SchoolActivities.orm +961 -0
  155. data/orm/SeparateSubtype.orm +821 -0
  156. data/orm/SimplestUnary.orm +172 -0
  157. data/orm/Supervision.orm +734 -0
  158. data/orm/VenueSeating.orm +1289 -0
  159. data/orm/WaiterTips.orm +789 -0
  160. data/orm/Warehousing.orm +3792 -0
  161. data/orm/WindowInRoomInBldg.orm +772 -0
  162. data/rails/models/Astronomy.models +17 -0
  163. data/rails/models/CinemaBookings.models +123 -0
  164. data/rails/models/CinemaTickets.models +192 -0
  165. data/rails/models/Diplomacy.models +126 -0
  166. data/rails/models/Metamodel.models +894 -0
  167. data/rails/models/OneRoleNesting.models +18 -0
  168. data/rails/models/SeparateSubtype.models +49 -0
  169. data/rails/models/VenueSeating.models +70 -0
  170. data/rails/schema/Astronomy.schema.rb +25 -0
  171. data/rails/schema/CinemaBookings.schema.rb +78 -0
  172. data/rails/schema/CinemaTickets.schema.rb +132 -0
  173. data/rails/schema/Diplomacy.schema.rb +74 -0
  174. data/rails/schema/Metamodel.schema.rb +538 -0
  175. data/rails/schema/OneRoleNesting.rb +20 -0
  176. data/rails/schema/SeparateSubtype.schema.rb +35 -0
  177. data/rails/schema/VenueSeating.schema.rb +46 -0
  178. data/rails/schema/Warehousing.schema.rb +145 -0
  179. data/ruby/Address.rb +68 -0
  180. data/ruby/Astronomy.rb +55 -0
  181. data/ruby/Blog.rb +84 -0
  182. data/ruby/CinemaBookings.rb +109 -0
  183. data/ruby/CinemaTickets.rb +218 -0
  184. data/ruby/CompanyDirectorEmployee.rb +73 -0
  185. data/ruby/Death.rb +26 -0
  186. data/ruby/Diplomacy.rb +59 -0
  187. data/ruby/Genealogy.rb +173 -0
  188. data/ruby/Insurance.rb +562 -0
  189. data/ruby/Marriage.rb +21 -0
  190. data/ruby/Metamodel.rb +621 -0
  191. data/ruby/Monogamy.rb +27 -0
  192. data/ruby/MultiInheritance.rb +38 -0
  193. data/ruby/OilSupply.rb +112 -0
  194. data/ruby/OneRoleNesting.rb +66 -0
  195. data/ruby/Orienteering.rb +216 -0
  196. data/ruby/PersonPlaysGame.rb +31 -0
  197. data/ruby/RedundantDependency.rb +53 -0
  198. data/ruby/SchoolActivities.rb +49 -0
  199. data/ruby/SeparateSubtype.rb +46 -0
  200. data/ruby/SimplestUnary.rb +10 -0
  201. data/ruby/Supervision.rb +33 -0
  202. data/ruby/TwoValues.rb +14 -0
  203. data/ruby/VenueSeating.rb +64 -0
  204. data/ruby/WaiterTips.rb +49 -0
  205. data/ruby/Warehousing.rb +167 -0
  206. data/ruby/WindowInRoomInBldg.rb +45 -0
  207. data/sql/server/Address.sql +40 -0
  208. data/sql/server/Astronomy.sql +36 -0
  209. data/sql/server/Blog.sql +78 -0
  210. data/sql/server/CinemaBookings.sql +95 -0
  211. data/sql/server/CinemaTickets.sql +191 -0
  212. data/sql/server/CompanyDirectorEmployee.sql +104 -0
  213. data/sql/server/Death.sql +11 -0
  214. data/sql/server/Diplomacy.sql +66 -0
  215. data/sql/server/Genealogy.sql +138 -0
  216. data/sql/server/Health.sql +169 -0
  217. data/sql/server/Insurance.sql +484 -0
  218. data/sql/server/Marriage.sql +30 -0
  219. data/sql/server/Metamodel.sql +1000 -0
  220. data/sql/server/Monogamy.sql +20 -0
  221. data/sql/server/MultiInheritance.sql +27 -0
  222. data/sql/server/OilSupply.sql +105 -0
  223. data/sql/server/OneRoleNesting.sql +29 -0
  224. data/sql/server/Orienteering.sql +186 -0
  225. data/sql/server/PersonPlaysGame.sql +9 -0
  226. data/sql/server/RedundantDependency.sql +54 -0
  227. data/sql/server/SchoolActivities.sql +30 -0
  228. data/sql/server/SeparateSubtype.sql +33 -0
  229. data/sql/server/SimplestUnary.sql +9 -0
  230. data/sql/server/Supervision.sql +30 -0
  231. data/sql/server/VenueSeating.sql +54 -0
  232. data/sql/server/WaiterTips.sql +31 -0
  233. data/sql/server/Warehousing.sql +203 -0
  234. data/sql/server/WindowInRoomInBldg.sql +13 -0
  235. data/transform/surrogate/Address.absorption +2 -0
  236. data/transform/surrogate/Blog.absorption +5 -0
  237. data/transform/surrogate/CinemaBookings.absorption +7 -0
  238. data/transform/surrogate/CompanyDirectorEmployee.absorption +7 -0
  239. data/transform/surrogate/Death.absorption +1 -0
  240. data/transform/surrogate/Diplomacy-revised.absorption +6 -0
  241. data/transform/surrogate/Diplomacy.absorption +6 -0
  242. data/transform/surrogate/Genealogy.absorption +8 -0
  243. data/transform/surrogate/Insurance.absorption +18 -0
  244. data/transform/surrogate/Marriage.absorption +2 -0
  245. data/transform/surrogate/Metamodel.absorption +25 -0
  246. data/transform/surrogate/Monogamy.absorption +1 -0
  247. data/transform/surrogate/MultiInheritance.absorption +1 -0
  248. data/transform/surrogate/MultipleSubtyping.absorption +1 -0
  249. data/transform/surrogate/OilSupply.absorption +8 -0
  250. data/transform/surrogate/OneRoleNesting.absorption +1 -0
  251. data/transform/surrogate/Orienteering.absorption +11 -0
  252. data/transform/surrogate/PersonPlaysGame.absorption +1 -0
  253. data/transform/surrogate/RedundantDependency.absorption +3 -0
  254. data/transform/surrogate/SchoolActivities.absorption +3 -0
  255. data/transform/surrogate/SeparateSubtype.absorption +3 -0
  256. data/transform/surrogate/SimplestUnary.absorption +1 -0
  257. data/transform/surrogate/Supervision.absorption +2 -0
  258. data/transform/surrogate/WaiterTips.absorption +3 -0
  259. data/transform/surrogate/Warehousing.absorption +12 -0
  260. data/transform/surrogate/WindowInRoomInBldg.absorption +1 -0
  261. data/transform/surrogate/unit.absorption +0 -0
  262. metadata +374 -0
@@ -0,0 +1,20 @@
1
+ CREATE TABLE Person (
2
+ -- maybe Person is a Girl and maybe Girl is going out with Boy and Boy is a kind of Person and Person has Person ID,
3
+ GirlBoyfriendID int NULL,
4
+ -- Person is called Name,
5
+ Name varchar NOT NULL,
6
+ -- Person has Person ID,
7
+ PersonID int IDENTITY NOT NULL,
8
+ PRIMARY KEY(PersonID),
9
+ FOREIGN KEY (GirlBoyfriendID) REFERENCES Person (PersonID)
10
+ )
11
+ GO
12
+
13
+ CREATE VIEW dbo.GirlInPerson_BoyfriendID (GirlBoyfriendID) WITH SCHEMABINDING AS
14
+ SELECT GirlBoyfriendID FROM dbo.Person
15
+ WHERE GirlBoyfriendID IS NOT NULL
16
+ GO
17
+
18
+ CREATE UNIQUE CLUSTERED INDEX IX_GirlInPersonByGirlBoyfriendID ON dbo.GirlInPerson_BoyfriendID(GirlBoyfriendID)
19
+ GO
20
+
@@ -0,0 +1,27 @@
1
+ CREATE TABLE Person (
2
+ -- maybe Person is an Australian and maybe Australian has TFN,
3
+ AustralianTFN char(9) NULL,
4
+ -- maybe Person is an Employee and Employee has Employee ID,
5
+ EmployeeID int NULL,
6
+ -- Person has Person Name,
7
+ PersonName varchar NOT NULL,
8
+ PRIMARY KEY(PersonName)
9
+ )
10
+ GO
11
+
12
+ CREATE VIEW dbo.AustralianInPerson_TFN (AustralianTFN) WITH SCHEMABINDING AS
13
+ SELECT AustralianTFN FROM dbo.Person
14
+ WHERE AustralianTFN IS NOT NULL
15
+ GO
16
+
17
+ CREATE UNIQUE CLUSTERED INDEX IX_AustralianInPersonByAustralianTFN ON dbo.AustralianInPerson_TFN(AustralianTFN)
18
+ GO
19
+
20
+ CREATE VIEW dbo.EmployeeInPerson_ID (EmployeeID) WITH SCHEMABINDING AS
21
+ SELECT EmployeeID FROM dbo.Person
22
+ WHERE EmployeeID IS NOT NULL
23
+ GO
24
+
25
+ CREATE UNIQUE CLUSTERED INDEX PK_EmployeeInPerson ON dbo.EmployeeInPerson_ID(EmployeeID)
26
+ GO
27
+
@@ -0,0 +1,105 @@
1
+ CREATE TABLE AcceptableSubstitution (
2
+ -- Acceptable Substitution involves Product and Product has Product Name,
3
+ AlternateProductName varchar NOT NULL,
4
+ -- Acceptable Substitution involves Product and Product has Product Name,
5
+ ProductName varchar NOT NULL,
6
+ -- Acceptable Substitution involves Season,
7
+ Season varchar(6) NOT NULL CHECK(Season = 'Autumn' OR Season = 'Spring' OR Season = 'Summer' OR Season = 'Winter'),
8
+ PRIMARY KEY(ProductName, AlternateProductName, Season)
9
+ )
10
+ GO
11
+
12
+ CREATE TABLE Month (
13
+ -- Month has Month Nr,
14
+ MonthNr int NOT NULL CHECK((MonthNr >= 1 AND MonthNr <= 12)),
15
+ -- Month is in Season,
16
+ Season varchar(6) NOT NULL CHECK(Season = 'Autumn' OR Season = 'Spring' OR Season = 'Summer' OR Season = 'Winter'),
17
+ PRIMARY KEY(MonthNr)
18
+ )
19
+ GO
20
+
21
+ CREATE TABLE Product (
22
+ -- Product has Product Name,
23
+ ProductName varchar NOT NULL,
24
+ PRIMARY KEY(ProductName)
25
+ )
26
+ GO
27
+
28
+ CREATE TABLE ProductionForecast (
29
+ -- maybe Production Forecast predicts Cost,
30
+ Cost decimal NULL,
31
+ -- Production Forecast involves Product and Product has Product Name,
32
+ ProductName varchar NOT NULL,
33
+ -- Production Forecast involves Quantity,
34
+ Quantity int NOT NULL,
35
+ -- Production Forecast involves Refinery and Refinery has Refinery Name,
36
+ RefineryName varchar(80) NOT NULL,
37
+ -- Production Forecast involves Supply Period and Supply Period is in Month and Month has Month Nr,
38
+ SupplyPeriodMonthNr int NOT NULL CHECK((SupplyPeriodMonthNr >= 1 AND SupplyPeriodMonthNr <= 12)),
39
+ -- Production Forecast involves Supply Period and Supply Period is in Year and Year has Year Nr,
40
+ SupplyPeriodYearNr int NOT NULL,
41
+ PRIMARY KEY(RefineryName, SupplyPeriodYearNr, SupplyPeriodMonthNr, ProductName),
42
+ FOREIGN KEY (SupplyPeriodMonthNr) REFERENCES Month (MonthNr),
43
+ FOREIGN KEY (ProductName) REFERENCES Product (ProductName)
44
+ )
45
+ GO
46
+
47
+ CREATE TABLE Refinery (
48
+ -- Refinery has Refinery Name,
49
+ RefineryName varchar(80) NOT NULL,
50
+ PRIMARY KEY(RefineryName)
51
+ )
52
+ GO
53
+
54
+ CREATE TABLE Region (
55
+ -- Region has Region Name,
56
+ RegionName varchar NOT NULL,
57
+ PRIMARY KEY(RegionName)
58
+ )
59
+ GO
60
+
61
+ CREATE TABLE RegionalDemand (
62
+ -- Regional Demand involves Product and Product has Product Name,
63
+ ProductName varchar NOT NULL,
64
+ -- Regional Demand involves Quantity,
65
+ Quantity int NOT NULL,
66
+ -- Regional Demand involves Region and Region has Region Name,
67
+ RegionName varchar NOT NULL,
68
+ -- Regional Demand involves Supply Period and Supply Period is in Month and Month has Month Nr,
69
+ SupplyPeriodMonthNr int NOT NULL CHECK((SupplyPeriodMonthNr >= 1 AND SupplyPeriodMonthNr <= 12)),
70
+ -- Regional Demand involves Supply Period and Supply Period is in Year and Year has Year Nr,
71
+ SupplyPeriodYearNr int NOT NULL,
72
+ PRIMARY KEY(RegionName, SupplyPeriodYearNr, SupplyPeriodMonthNr, ProductName),
73
+ FOREIGN KEY (SupplyPeriodMonthNr) REFERENCES Month (MonthNr),
74
+ FOREIGN KEY (ProductName) REFERENCES Product (ProductName),
75
+ FOREIGN KEY (RegionName) REFERENCES Region (RegionName)
76
+ )
77
+ GO
78
+
79
+ CREATE TABLE TransportRoute (
80
+ -- maybe Transport Route incurs Cost per kl,
81
+ Cost decimal NULL,
82
+ -- Transport Route involves Refinery and Refinery has Refinery Name,
83
+ RefineryName varchar(80) NOT NULL,
84
+ -- Transport Route involves Region and Region has Region Name,
85
+ RegionName varchar NOT NULL,
86
+ -- Transport Route involves Transport Method,
87
+ TransportMethod varchar NOT NULL CHECK(TransportMethod = 'Rail' OR TransportMethod = 'Road' OR TransportMethod = 'Sea'),
88
+ PRIMARY KEY(TransportMethod, RefineryName, RegionName),
89
+ FOREIGN KEY (RefineryName) REFERENCES Refinery (RefineryName),
90
+ FOREIGN KEY (RegionName) REFERENCES Region (RegionName)
91
+ )
92
+ GO
93
+
94
+ ALTER TABLE AcceptableSubstitution
95
+ ADD FOREIGN KEY (AlternateProductName) REFERENCES Product (ProductName)
96
+ GO
97
+
98
+ ALTER TABLE AcceptableSubstitution
99
+ ADD FOREIGN KEY (ProductName) REFERENCES Product (ProductName)
100
+ GO
101
+
102
+ ALTER TABLE ProductionForecast
103
+ ADD FOREIGN KEY (RefineryName) REFERENCES Refinery (RefineryName)
104
+ GO
105
+
@@ -0,0 +1,29 @@
1
+ CREATE TABLE Party (
2
+ -- Party has Party Id,
3
+ PartyId int IDENTITY NOT NULL,
4
+ -- Party is involved in Party Moniker and Party Moniker has Accuracy and Accuracy has Accuracy Level,
5
+ PartyMonikerAccuracyLevel int NOT NULL CHECK((PartyMonikerAccuracyLevel >= 1 AND PartyMonikerAccuracyLevel <= 5)),
6
+ -- Party is involved in Party Moniker and Party Moniker involves Party Name,
7
+ PartyMonikerPartyName varchar NOT NULL,
8
+ -- maybe Party is a Person and Person is involved in Birth and maybe Birth was assisted by attending-Doctor and Doctor is a kind of Person and Person is a kind of Party and Party has Party Id,
9
+ PersonAttendingDoctorId int NULL,
10
+ -- maybe Party is a Person and Person is involved in Death and maybe Death occurred on death-Event Date and Event Date has ymd,
11
+ PersonDeathEventDateYmd datetime NULL,
12
+ -- maybe Party is a Person and Person is involved in Death,
13
+ PersonDied bit NULL,
14
+ -- maybe Party is a Person and Person is involved in Birth and Birth involves Event Date and Event Date has ymd,
15
+ PersonEventDateYmd datetime NULL,
16
+ PRIMARY KEY(PartyId),
17
+ FOREIGN KEY (PersonAttendingDoctorId) REFERENCES Party (PartyId)
18
+ )
19
+ GO
20
+
21
+ CREATE VIEW dbo.BirthInParty_PersonAttendingDoctorIdPersonEventDateYmd (PersonAttendingDoctorId, PersonEventDateYmd) WITH SCHEMABINDING AS
22
+ SELECT PersonAttendingDoctorId, PersonEventDateYmd FROM dbo.Party
23
+ WHERE PersonAttendingDoctorId IS NOT NULL
24
+ AND PersonEventDateYmd IS NOT NULL
25
+ GO
26
+
27
+ CREATE UNIQUE CLUSTERED INDEX PersonMustHaveSupertypeParty ON dbo.BirthInParty_PersonAttendingDoctorIdPersonEventDateYmd(PersonAttendingDoctorId, PersonEventDateYmd)
28
+ GO
29
+
@@ -0,0 +1,186 @@
1
+ CREATE TABLE Club (
2
+ -- Club has Club Code,
3
+ ClubCode varchar(6) NOT NULL,
4
+ -- Club is called Club Name,
5
+ ClubName varchar(32) NOT NULL,
6
+ PRIMARY KEY(ClubCode),
7
+ UNIQUE(ClubName)
8
+ )
9
+ GO
10
+
11
+ CREATE TABLE Entry (
12
+ -- Entry involves Course,
13
+ Course varchar(16) NOT NULL CHECK((Course >= 'A' AND Course <= 'E') OR Course = 'PW'),
14
+ -- Entry has Entry ID,
15
+ EntryID int IDENTITY NOT NULL,
16
+ -- Entry involves Event and Event has Event ID,
17
+ EventID int NOT NULL,
18
+ -- maybe Entry finished in finish-Placing,
19
+ FinishPlacing int NULL,
20
+ -- Entry involves Person and Person has Person ID,
21
+ PersonID int NOT NULL,
22
+ -- maybe Entry received Score,
23
+ Score int NULL,
24
+ PRIMARY KEY(EntryID),
25
+ UNIQUE(PersonID, EventID)
26
+ )
27
+ GO
28
+
29
+ CREATE TABLE Event (
30
+ -- Event is run by Club and Club has Club Code,
31
+ ClubCode varchar(6) NOT NULL,
32
+ -- Event has Event ID,
33
+ EventID int IDENTITY NOT NULL,
34
+ -- maybe Event is called Event Name,
35
+ EventName varchar(50) NULL,
36
+ -- Event uses Map and Map has Map ID,
37
+ MapID int NOT NULL,
38
+ -- maybe Event has Number,
39
+ Number int NULL CHECK((Number >= 1 AND Number <= 100)),
40
+ -- maybe Event is in Series and Series has Series ID,
41
+ SeriesID int NULL,
42
+ -- Event starts at start-Location,
43
+ StartLocation varchar(200) NOT NULL,
44
+ -- Event is held on Start Time,
45
+ StartTime datetime NOT NULL,
46
+ PRIMARY KEY(EventID),
47
+ FOREIGN KEY (ClubCode) REFERENCES Club (ClubCode)
48
+ )
49
+ GO
50
+
51
+ CREATE VIEW dbo.Event_Name (EventName) WITH SCHEMABINDING AS
52
+ SELECT EventName FROM dbo.Event
53
+ WHERE EventName IS NOT NULL
54
+ GO
55
+
56
+ CREATE UNIQUE CLUSTERED INDEX IX_EventByEventName ON dbo.Event_Name(EventName)
57
+ GO
58
+
59
+ CREATE VIEW dbo.Event_SeriesIDNumber (SeriesID, Number) WITH SCHEMABINDING AS
60
+ SELECT SeriesID, Number FROM dbo.Event
61
+ WHERE SeriesID IS NOT NULL
62
+ AND Number IS NOT NULL
63
+ GO
64
+
65
+ CREATE UNIQUE CLUSTERED INDEX IX_EventBySeriesIDNumber ON dbo.Event_SeriesIDNumber(SeriesID, Number)
66
+ GO
67
+
68
+ CREATE TABLE EventControl (
69
+ -- Event Control involves Control Number,
70
+ ControlNumber int NOT NULL CHECK((ControlNumber >= 1 AND ControlNumber <= 1000)),
71
+ -- Event Control involves Event and Event has Event ID,
72
+ EventID int NOT NULL,
73
+ -- maybe Event Control has Point Value,
74
+ PointValue int NULL,
75
+ PRIMARY KEY(EventID, ControlNumber),
76
+ FOREIGN KEY (EventID) REFERENCES Event (EventID)
77
+ )
78
+ GO
79
+
80
+ CREATE TABLE EventScoringMethod (
81
+ -- Event Scoring Method involves Course,
82
+ Course varchar(16) NOT NULL CHECK((Course >= 'A' AND Course <= 'E') OR Course = 'PW'),
83
+ -- Event Scoring Method involves Event and Event has Event ID,
84
+ EventID int NOT NULL,
85
+ -- Event Scoring Method involves Scoring Method,
86
+ ScoringMethod varchar(32) NOT NULL CHECK(ScoringMethod = 'Scatter' OR ScoringMethod = 'Score' OR ScoringMethod = 'Special'),
87
+ PRIMARY KEY(Course, EventID),
88
+ FOREIGN KEY (EventID) REFERENCES Event (EventID)
89
+ )
90
+ GO
91
+
92
+ CREATE TABLE Map (
93
+ -- maybe Map has Accessibility,
94
+ Accessibility char(1) NULL CHECK((Accessibility >= 'A' AND Accessibility <= 'D')),
95
+ -- Map has Map ID,
96
+ MapID int IDENTITY NOT NULL,
97
+ -- Map has Map Name,
98
+ MapName varchar(80) NOT NULL,
99
+ -- Map is owned by Club and Club has Club Code,
100
+ OwnerCode varchar(6) NOT NULL,
101
+ PRIMARY KEY(MapID),
102
+ UNIQUE(MapName),
103
+ FOREIGN KEY (OwnerCode) REFERENCES Club (ClubCode)
104
+ )
105
+ GO
106
+
107
+ CREATE TABLE Person (
108
+ -- maybe Person was born in birth-Year,
109
+ BirthYear int NULL CHECK((BirthYear >= 1900 AND BirthYear <= 3000)),
110
+ -- maybe Person is member of Club and Club has Club Code,
111
+ ClubCode varchar(6) NULL,
112
+ -- Person has Family Name,
113
+ FamilyName varchar(48) NOT NULL,
114
+ -- maybe Person is of Gender,
115
+ Gender char(1) NULL CHECK(Gender = 'F' OR Gender = 'M'),
116
+ -- Person has Given Name,
117
+ GivenName varchar(48) NOT NULL,
118
+ -- Person has Person ID,
119
+ PersonID int IDENTITY NOT NULL,
120
+ -- maybe Person has Post Code,
121
+ PostCode int NULL,
122
+ PRIMARY KEY(PersonID),
123
+ UNIQUE(GivenName, FamilyName),
124
+ FOREIGN KEY (ClubCode) REFERENCES Club (ClubCode)
125
+ )
126
+ GO
127
+
128
+ CREATE TABLE Punch (
129
+ -- Punch has Punch ID,
130
+ PunchID int IDENTITY NOT NULL,
131
+ PRIMARY KEY(PunchID)
132
+ )
133
+ GO
134
+
135
+ CREATE TABLE PunchPlacement (
136
+ -- Punch Placement involves Event Control and Event Control involves Event and Event has Event ID,
137
+ EventControlEventID int NOT NULL,
138
+ -- Punch Placement involves Event Control and Event Control involves Control Number,
139
+ EventControlNumber int NOT NULL,
140
+ -- Punch Placement involves Punch and Punch has Punch ID,
141
+ PunchID int NOT NULL,
142
+ PRIMARY KEY(PunchID, EventControlEventID, EventControlNumber),
143
+ FOREIGN KEY (EventControlEventID, EventControlNumber) REFERENCES EventControl (EventID, ControlNumber),
144
+ FOREIGN KEY (PunchID) REFERENCES Punch (PunchID)
145
+ )
146
+ GO
147
+
148
+ CREATE TABLE Series (
149
+ -- Series has Series Name,
150
+ Name varchar(40) NOT NULL,
151
+ -- Series has Series ID,
152
+ SeriesID int IDENTITY NOT NULL,
153
+ PRIMARY KEY(SeriesID),
154
+ UNIQUE(Name)
155
+ )
156
+ GO
157
+
158
+ CREATE TABLE Visit (
159
+ -- Visit involves Entry and Entry has Entry ID,
160
+ EntryID int NOT NULL,
161
+ -- Visit involves Punch and Punch has Punch ID,
162
+ PunchID int NOT NULL,
163
+ -- Visit involves Time,
164
+ Time datetime NOT NULL,
165
+ PRIMARY KEY(PunchID, EntryID, Time),
166
+ FOREIGN KEY (EntryID) REFERENCES Entry (EntryID),
167
+ FOREIGN KEY (PunchID) REFERENCES Punch (PunchID)
168
+ )
169
+ GO
170
+
171
+ ALTER TABLE Entry
172
+ ADD FOREIGN KEY (EventID) REFERENCES Event (EventID)
173
+ GO
174
+
175
+ ALTER TABLE Entry
176
+ ADD FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
177
+ GO
178
+
179
+ ALTER TABLE Event
180
+ ADD FOREIGN KEY (MapID) REFERENCES Map (MapID)
181
+ GO
182
+
183
+ ALTER TABLE Event
184
+ ADD FOREIGN KEY (SeriesID) REFERENCES Series (SeriesID)
185
+ GO
186
+
@@ -0,0 +1,9 @@
1
+ CREATE TABLE Playing (
2
+ -- Playing involves Game and Game has Game Code,
3
+ GameCode char NOT NULL,
4
+ -- Playing involves Person and Person has Person Name,
5
+ PersonName varchar NOT NULL,
6
+ PRIMARY KEY(PersonName, GameCode)
7
+ )
8
+ GO
9
+
@@ -0,0 +1,54 @@
1
+ CREATE TABLE Address (
2
+ -- Address has Address Id,
3
+ AddressId int IDENTITY NOT NULL,
4
+ -- maybe Address is in Legislative District and Legislative District has District Number,
5
+ LegislativeDistrictNumber int NULL,
6
+ -- maybe Address is in Legislative District and Legislative District is for State Or Province and State Or Province has State Or Province Id,
7
+ LegislativeDistrictStateOrProvinceId int NULL,
8
+ -- maybe Address is assigned Postal Code,
9
+ PostalCode int NULL,
10
+ -- maybe Address is in State Or Province and State Or Province has State Or Province Id,
11
+ StateOrProvinceId int NULL,
12
+ PRIMARY KEY(AddressId)
13
+ )
14
+ GO
15
+
16
+ CREATE TABLE Politician (
17
+ -- maybe Politician represents Legislative District and Legislative District has District Number,
18
+ LegislativeDistrictNumber int NULL,
19
+ -- maybe Politician represents Legislative District and Legislative District is for State Or Province and State Or Province has State Or Province Id,
20
+ LegislativeDistrictStateOrProvinceId int NULL,
21
+ -- Politician has Politician Id,
22
+ PoliticianId int IDENTITY NOT NULL,
23
+ PRIMARY KEY(PoliticianId)
24
+ )
25
+ GO
26
+
27
+ CREATE VIEW dbo.Politician_LegislativeDistrictNumberLegislativeDistrictStateOrProvinceId (LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId) WITH SCHEMABINDING AS
28
+ SELECT LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId FROM dbo.Politician
29
+ WHERE LegislativeDistrictNumber IS NOT NULL
30
+ AND LegislativeDistrictStateOrProvinceId IS NOT NULL
31
+ GO
32
+
33
+ CREATE UNIQUE CLUSTERED INDEX IX_PoliticianByLegislativeDistrictNumberLegislativeDistrictStateOrProvinceId ON dbo.Politician_LegislativeDistrictNumberLegislativeDistrictStateOrProvinceId(LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId)
34
+ GO
35
+
36
+ CREATE TABLE StateOrProvince (
37
+ -- State Or Province has State Or Province Id,
38
+ StateOrProvinceId int IDENTITY NOT NULL,
39
+ PRIMARY KEY(StateOrProvinceId)
40
+ )
41
+ GO
42
+
43
+ ALTER TABLE Address
44
+ ADD FOREIGN KEY (LegislativeDistrictStateOrProvinceId) REFERENCES StateOrProvince (StateOrProvinceId)
45
+ GO
46
+
47
+ ALTER TABLE Address
48
+ ADD FOREIGN KEY (StateOrProvinceId) REFERENCES StateOrProvince (StateOrProvinceId)
49
+ GO
50
+
51
+ ALTER TABLE Politician
52
+ ADD FOREIGN KEY (LegislativeDistrictStateOrProvinceId) REFERENCES StateOrProvince (StateOrProvinceId)
53
+ GO
54
+
@@ -0,0 +1,30 @@
1
+ CREATE TABLE SchoolActivity (
2
+ -- School Activity involves Activity and Activity has Activity Name,
3
+ ActivityName varchar(32) NOT NULL,
4
+ -- School Activity involves School and School has School Name,
5
+ SchoolName varchar NOT NULL,
6
+ PRIMARY KEY(SchoolName, ActivityName)
7
+ )
8
+ GO
9
+
10
+ CREATE TABLE Student (
11
+ -- Student is enrolled in School and School has School Name,
12
+ SchoolName varchar NOT NULL,
13
+ -- Student has Student Name,
14
+ StudentName varchar NOT NULL,
15
+ PRIMARY KEY(StudentName)
16
+ )
17
+ GO
18
+
19
+ CREATE TABLE StudentParticipation (
20
+ -- Student Participation involves Activity and Activity has Activity Name,
21
+ ActivityName varchar(32) NOT NULL,
22
+ -- Student Participation involves School and School has School Name,
23
+ SchoolName varchar NOT NULL,
24
+ -- Student Participation involves Student and Student has Student Name,
25
+ StudentName varchar NOT NULL,
26
+ PRIMARY KEY(StudentName, ActivityName),
27
+ FOREIGN KEY (StudentName) REFERENCES Student (StudentName)
28
+ )
29
+ GO
30
+
@@ -0,0 +1,33 @@
1
+ CREATE TABLE Claim (
2
+ -- Claim has Claim ID,
3
+ ClaimID int IDENTITY NOT NULL,
4
+ -- maybe Claim concerns Incident and maybe Incident occurred on Date Time,
5
+ IncidentDateTime datetime NULL,
6
+ -- maybe Claim concerns Incident and maybe Incident was independently witnessed by Witness and Witness is a kind of Person and Person has Person Name,
7
+ IncidentWitnessName varchar NULL,
8
+ PRIMARY KEY(ClaimID)
9
+ )
10
+ GO
11
+
12
+ CREATE TABLE Person (
13
+ -- Person has Person Name,
14
+ PersonName varchar NOT NULL,
15
+ PRIMARY KEY(PersonName)
16
+ )
17
+ GO
18
+
19
+ CREATE TABLE VehicleIncident (
20
+ -- maybe Vehicle Incident occurred while Driver was in charge and Driver is a kind of Person and Person has Person Name,
21
+ DriverName varchar NULL,
22
+ -- Vehicle Incident is a kind of Incident and Incident resulted in Claim and Claim has Claim ID,
23
+ IncidentClaimID int NOT NULL,
24
+ PRIMARY KEY(IncidentClaimID),
25
+ FOREIGN KEY (IncidentClaimID) REFERENCES Claim (ClaimID),
26
+ FOREIGN KEY (DriverName) REFERENCES Person (PersonName)
27
+ )
28
+ GO
29
+
30
+ ALTER TABLE Claim
31
+ ADD FOREIGN KEY (IncidentWitnessName) REFERENCES Person (PersonName)
32
+ GO
33
+
@@ -0,0 +1,9 @@
1
+ CREATE TABLE SomeString (
2
+ -- Some String is long Boolean,
3
+ IsLong bit NULL,
4
+ -- Some String Value,
5
+ SomeStringValue varchar NOT NULL,
6
+ PRIMARY KEY(SomeStringValue)
7
+ )
8
+ GO
9
+
@@ -0,0 +1,30 @@
1
+ CREATE TABLE Company (
2
+ -- Company is run by CEO and CEO is a kind of Manager and Manager is a kind of Employee and Employee works for Company and Company has CompanyName,
3
+ CEOCompanyName varchar NOT NULL,
4
+ -- Company is run by CEO and CEO is a kind of Manager and Manager is a kind of Employee and Employee has EmployeeNr,
5
+ CEOEmployeeNr int NOT NULL,
6
+ -- Company has CompanyName,
7
+ CompanyName varchar NOT NULL,
8
+ PRIMARY KEY(CompanyName)
9
+ )
10
+ GO
11
+
12
+ CREATE TABLE Employee (
13
+ -- Employee works for Company and Company has CompanyName,
14
+ CompanyName varchar NOT NULL,
15
+ -- Employee has EmployeeNr,
16
+ EmployeeNr int NOT NULL,
17
+ -- maybe Employee reports to Manager and Manager is a kind of Employee and Employee works for Company and Company has CompanyName,
18
+ ManagerCompanyName varchar NULL,
19
+ -- maybe Employee reports to Manager and Manager is a kind of Employee and Employee has EmployeeNr,
20
+ ManagerEmployeeNr int NULL,
21
+ PRIMARY KEY(CompanyName, EmployeeNr),
22
+ FOREIGN KEY (CompanyName) REFERENCES Company (CompanyName),
23
+ FOREIGN KEY (ManagerCompanyName, ManagerEmployeeNr) REFERENCES Employee (CompanyName, EmployeeNr)
24
+ )
25
+ GO
26
+
27
+ ALTER TABLE Company
28
+ ADD FOREIGN KEY (CEOCompanyName, CEOEmployeeNr) REFERENCES Employee (CompanyName, EmployeeNr)
29
+ GO
30
+
@@ -0,0 +1,54 @@
1
+ CREATE TABLE Event (
2
+ -- Event has Event Id,
3
+ EventId int IDENTITY NOT NULL,
4
+ -- Event is held at Venue and Venue has Venue Id,
5
+ VenueId int NOT NULL,
6
+ PRIMARY KEY(EventId)
7
+ )
8
+ GO
9
+
10
+ CREATE TABLE Seat (
11
+ -- Seat has Number,
12
+ Number smallint NOT NULL,
13
+ -- Seat is in Reserve and Reserve has Reserve Name,
14
+ ReserveName varchar NOT NULL,
15
+ -- Seat is in Row and Row has Row Code,
16
+ RowCode char NOT NULL,
17
+ -- Seat is at Venue and Venue has Venue Id,
18
+ VenueId int NOT NULL,
19
+ PRIMARY KEY(VenueId, ReserveName, RowCode, Number)
20
+ )
21
+ GO
22
+
23
+ CREATE TABLE Ticket (
24
+ -- Ticket is for Event and Event has Event Id,
25
+ EventId int NOT NULL,
26
+ -- Ticket is for Seat and Seat has Number,
27
+ SeatNumber smallint NOT NULL,
28
+ -- Ticket is for Seat and Seat is in Reserve and Reserve has Reserve Name,
29
+ SeatReserveName varchar NOT NULL,
30
+ -- Ticket is for Seat and Seat is in Row and Row has Row Code,
31
+ SeatRowCode char NOT NULL,
32
+ -- Ticket is for Seat and Seat is at Venue and Venue has Venue Id,
33
+ SeatVenueId int NOT NULL,
34
+ PRIMARY KEY(EventId, SeatVenueId, SeatReserveName, SeatRowCode, SeatNumber),
35
+ FOREIGN KEY (EventId) REFERENCES Event (EventId),
36
+ FOREIGN KEY (SeatVenueId, SeatReserveName, SeatRowCode, SeatNumber) REFERENCES Seat (VenueId, ReserveName, RowCode, Number)
37
+ )
38
+ GO
39
+
40
+ CREATE TABLE Venue (
41
+ -- Venue has Venue Id,
42
+ VenueId int IDENTITY NOT NULL,
43
+ PRIMARY KEY(VenueId)
44
+ )
45
+ GO
46
+
47
+ ALTER TABLE Event
48
+ ADD FOREIGN KEY (VenueId) REFERENCES Venue (VenueId)
49
+ GO
50
+
51
+ ALTER TABLE Seat
52
+ ADD FOREIGN KEY (VenueId) REFERENCES Venue (VenueId)
53
+ GO
54
+
@@ -0,0 +1,31 @@
1
+ CREATE TABLE Meal (
2
+ -- Meal has MealId,
3
+ MealId int IDENTITY NOT NULL,
4
+ PRIMARY KEY(MealId)
5
+ )
6
+ GO
7
+
8
+ CREATE TABLE Service (
9
+ -- maybe Service earned a tip of Amount and Amount has AUDValue,
10
+ AmountAUDValue decimal NULL,
11
+ -- Service involves Meal and Meal has MealId,
12
+ MealId int NOT NULL,
13
+ -- Service involves Waiter and Waiter has WaiterNr,
14
+ WaiterNr int NOT NULL,
15
+ PRIMARY KEY(WaiterNr, MealId),
16
+ FOREIGN KEY (MealId) REFERENCES Meal (MealId)
17
+ )
18
+ GO
19
+
20
+ CREATE TABLE WaiterTip (
21
+ -- WaiterTip involves Amount and Amount has AUDValue,
22
+ AmountAUDValue decimal NOT NULL,
23
+ -- WaiterTip involves Meal and Meal has MealId,
24
+ MealId int NOT NULL,
25
+ -- WaiterTip involves Waiter and Waiter has WaiterNr,
26
+ WaiterNr int NOT NULL,
27
+ PRIMARY KEY(WaiterNr, MealId),
28
+ FOREIGN KEY (MealId) REFERENCES Meal (MealId)
29
+ )
30
+ GO
31
+