PostgreSQL代写:COMP9311 PostgreSQL Relational Schema



This document contains the completed ER design for Stage 2 of Assignment 1. You must convert this design into a PostgreSQL relational schema (i.e., a collection of create tablestatements) and submit it via the give command. When converting from the ER design to a relational schema, you should follow the approach given in the lecture notes on ER to Relational Mapping. You may need to investigate and/or derive mappings for the constructs that have not been discussed in the lecture.


Submission: Login to a CSE Linux machine such as wagner and use the give command below to submit the assignment (note that the give command does not work on grieg):

give cs9311 a1 a1.sql

Late Penalty: Late submissions will attract a 10% penalty for each day.

Notes: For fairness to all students in the class, no special considerations will be given to those:

  • who claim to have submitted their assignment but the assignment has not been received by the give system above (use the “classrun” command to check if your assignment has been submitted, e.g., “9311 classrun -check a1”);

  • who submit their assignment a few minutes late and request to be considered as non-late submissions (please do submit your assignment early in case of your network connection problem, computer breakdown, etc);

  • who claim that their assignments worked perfectly on their home computers but somehow did not work on CSE Linux machines (we will only test and mark your assignments on CSE Linux machines, and will not consider the results on your own machines. Hence, please test your assignments on CSE Linux machines before submission).

Submission Requirements

The schema that you will submit will be marked by a program (auto-marked). In order for the program to recognise what you have done as being correct, your SQL must adhere to the following requirements:

  • all tables must have an appropriate primary key defined and all foreign keys must be identified

  • use appropriate domains for each attribute (e.g., date should be defined using an SQL date; a counter would be done as an SQL integer constrained to be ≥ 0)

  • if an attribute is a string, and no maximum length is specified, use PostgreSQL’s (non-standard) text type; otherwise, use an appropriate type such as varchar(N) type or one of the supplied domain types; if appropriate, you can also create new domain types.

  • if an attribute is a boolean value, use the SQL boolean type

  • wherever possible, not-null, unique and domain constraints must be used to enforce constraints implied by the ER design

  • derived (computed) attributes should not be included in the SQL schema

  • wherever possible, participation constraints should be implemented using the appropriate SQL constructs

  • map all of the entity class hierarchies in the ER design using the ER-style mapping (i.e., one table for each entity class).

  • all relationships should be mapped using the approaches described in the lecture notes; in particular, you should avoid over-generalising your SQL schema relative to the ER design (e.g., a 1:n relationship should not be mapped in such a way that it can actually be used to form an n:m relationship)

Since the assignment is going to be auto-marked, you must use the names that the auto-marker expects (i.e., the same names that are used in the provided ER design. Please also follow the following naming conventions:

  • when mapping multi-valued attributes, the new table’s name is the concatenation of the entity and attribute names

  • when mapping composite attributes, use the names of the “leaf” attributes

  • if names in the ER diagram contain multiple words (just in case, though I believe that I have concatenated them already), concatenate them into a single word in CamelCase in the SQL schema.

Note: if the name you want to use clashes with a PostgreSQL keyword (e.g. user), you will need to write the name in double-quotes (i.e. “user”) and in all lower-case.

Place the schema in a file called a1.sql and submit it via the give command (see above) before the deadline. To give you a head-start, a template for the schema is available, which has (parts of) some of the required tables already defined. Note that you will need to add more tables, as well as filling out the attributes in the supplied tables. Your submission must follow this format, so save a copy of this and edit it to produce your own a1.sql file.

The reason for insisting on strict conformance to the above is that your submission will be auto-marked as follows:

  • we will create an initially empty database (no tables, etc.)

  • we will load your schema into this database

  • we will use a script program to compare your schema with the expected schema

The comparison will make use of the meta-data which has been added to the database by loading your schema. Needless to say, if your schema has load-time errors, then it is not going to be possible to compare it against the correct version. Therefore, it is essential that you check that your schema can load into an initially empty database before you submit it.

Following the instructions above is considered to be a requirement of this assignment. If you stray from the expected schema, your submission will be marked as incorrect. Our auto-checking scripts have a little flexibility, but not much, so don’t rely on it. Manual checking is to examine specific implementations that are difficult to be auto-checked, and it is not an alternative to override the results from auto-marking.

Please don’t try to second-guess or improve the given ER design below. Even if you think it can be further improved, just translate it as given. If you still think that it is incorrect or that the information supplied is not enough to do the mapping unambiguously, either send me an email or post a message on the course website Forums (section: Assignment 1 (Stage 2)).

The ER Design

This ER design gives one possible data model for the OzCars application introduced in the first stage of this assignment. The design presented here is based on the discussions during Weeks 2 and 3 lectures.

To make the presentation clearer, the design is broken into a number of sections.

Other notational conventions in the ER diagrams:

  • primary key attributes for entities are underlined

  • total participation in a relationship is indicated by a thick line

  • an arrow indicates that at most 1 entity is involved in the relationship

Data Types

To make things easier, I have defined some useful data types using the create domain statement. Some of the create domain statements use standard SQL patterns for specifying constraints, while others use PostgreSQL-specific regular expressions for this purpose. The domain definitions are given at the top of the template file.


The following diagram shows the entities, attributes and relationships that provide the information about the employee entity for OzCars.


  • we use a system-generated, numeric EID as a primary key, since Salesman and Mechanic will be extensively referenced in the database.

  • the database should store every employee’s name (consists of first name and last name), TFN and salary.

  • both the salary and commission rate are integers, and must be larger than 0. Also refer to the assignment spec for further constraints on the commission rate (i.e., each salesman will have a negotiated commission rate ranging from 5% to max 20%).

  • we assume that both first name and last name are not longer than 50 characters.

  • TFN has exactly 9 digits.

  • the mechanic’s license is alphanumeric, with exactly 8 characters.

  • all attributes in the above ER diagram cannot have a null value.

Client and Car

The following diagram shows entities, attributes and relationships for clients and cars.

Details (Car):

  • We assume that VIN is exactly 17-character long and does not include the letters I, O, or Q (to avoid confusion with numerals 1 and 0)

  • Year is between 1970-2099 inclusive.

  • Model and Manufacturer are of maximum 40 characters each.

  • Car license is of maximum 6 alphanumeric characters.

  • Except for the list of options, all other information as specified by their corresponding attributes are compulsory.

  • Use the defined domain OptionType for a list of possible options.

Details (Client):

  • we assume that name is no longer than 100 characters.

  • we use a system-generated, numeric CID as a primary key.

  • address is maximum 200 characters.

  • Phone number has exactly 10 digits (mobile or landline with area code).

  • if a client does not have an ABN (i.e., it is not a company), all information is compulsory except the email address. The database should check if the input email is of a proper email format (using the defined EmailType domain).

  • ABN has exactly 11 digits.

  • If an ABN is provided (i.e., it is a company), an optional Web address of the company is stored. A URL should start with http://…

Buy, Sell and Repair

The following diagram shows entities, attributes and relationships for the rest of the design for OzCars.


  • Any monetary amounts should be defined using the type numeric with 2 decimal digits and they should all be positive numbers. All monetary amounts will not exceed 6 integral digits.

  • Description has a maximum of 250 characters.

  • RepairJob Number is a number between 1 and 999 inclusive.

  • Phone number has exactly 10 digits (mobile or landline with area code).

  • As specified in the requirements, the clients involved in a car transaction are the owners of the car.

What To Do Now

Make sure you read the above description thoroughly, and review the notes and exercises on ER-to-Relational mapping. Get a copy of the a1.sql template and see what is provided there. If any aspect of this design requires further clarification, ask a question under topic Assignment 1 (Stage 2) on the course website Forums.

Reminder: before you submit, ensure that your schema will load without error if used as follows on grieg:

% dropdb a1
% createdb a1
% psql a1 -f a1.sql
... will produce notices, but should have no errors ...
% psql a1
... can start using the complete database ...

Penalty: If we have to fix errors in your schema before it will load, you will incur 3 (out of a total of 10) marks “penalty”.


The work you submit must be your own work. Submission of work partially or completely derived from any other person or jointly written with any other person is not permitted. The penalties for such an offence may include negative marks, automatic failure of the course and possibly other academic discipline. Assignment submissions will be examined both automatically and manually for such submissions.

Relevant scholarship authorities will be informed if students holding scholarships are involved in an incident of plagiarism or other misconduct.

Do not provide or show your assignment work to any other person - apart from the teaching staff of this subject. If you knowingly provide or show your assignment work to another person for any reason, and work derived from it is submitted you may be penalized, even if the work was submitted without your knowledge or consent. This may apply even if your work is submitted by a third party unknown to you.