Assignment title: Information
Case study: FineFoods4U database
Use the case study description and list of requirements below to create an entity-relationship
diagram showing the data requirements of the FineFoods4U database. Your ERD should be
able to be implemented in a relational DBMS.
Bill is a university student who has been picking up meals from certain restaurants for his
family on the way home from uni for the last two years, and has now hit upon the idea of
making it into of business, which he is calling FineFoods4U. He intends to make available
the menus of all the local restaurants for delivery to the homes in his neighbourhood, and has
recruited several members of his family and some of his closer friends to make the deliveries.
If the trial run is successful, he plans to make it into an Uber-style business (similar to
UberEATS and Deliveroo).
Bill has phoned around the higher rated ethnic restaurants in his suburb, and has made a list
of 20 who are willing to co-operate with him. Each restaurant has selected a subset of the
items on their menus that they think will last the journey from their kitchen to the customer.
They have decided that no high-cuisine meal can last more than 10 minutes in a heated
container, so that has limited Bill's area of service – customers can only be from the same
suburb as the restaurants.
Customers will order their food via a webpage, after registering on the site. They can register
from any location, but won't be able to use the site unless the delivery address is in the same
suburb as the restaurants. They can select a restaurant and choose a number of dishes from it,
referring to the information available on the web page. They can also select dishes directly,
by searching on particular requirements such as 'vegetarian' or 'pizza'. However, they can
only order from one restaurant per delivery.
Once they have selected their dishes, the customer enters the delivery date, time and address
required, and pays the cost of the meal plus delivery via PayPal. The information about the
order is sent to the restaurant and also to Bill, who assigns a driver who is currently free to
pick up and deliver the order. The driver collects the meal from the restaurant and delivers to
the customer. The driver records the actual date and time delivered, as Bill needs to keep
track of whether he can live up to his promise to deliver on time.Bill has heard that you are studying Databases and has asked you to design a database to keep
track of the information requirements of his business. He wants the database to record
information about customers, restaurants, dishes, drivers, and of course order s and deliveries.
At this stage he does not want you to model any of the financial side of the business.
He wants to record various items of information about each restaurant, including its ethnicity
(Malay, Indian, Chinese, French, Italian, Australian…) and predominant style (BBQ, formal,
pub grub, noodle house, open spit, dim sum, fast food …). A brief description of each
restaurant ('About Us') is to be included, as well as a general description of their food. He
also wants to record any special certifications the restaurant as a whole has (e.g. vegan,
locavore, organic, nut free, Jain, Halal, Kosher).
The dishes at each restaurant also need to have enough information stored about them so that
the customers know what they are selecting. As well as name and brief description,
customers are likely to want to know how in general terms how the dish was prepared (fried,
steamed, raw etc), its main ingredient (fish, cheese…), what type of course it is (soup, starter,
main, dessert, side dish) and of course its price. As customers are increasingly aware of
health issues, Bill also wants to record the number of kilojoules in each dish, and also
whether it is gluten free, dairy free, and/or vegetarian, and possibly other nutritional aspects
of the dish in the future.
Customers also need some indication of how long the dish will take to arrive: Bill guarantees
10 minutes delivery from when the dish is picked up, but obviously some dishes take longer
than others to prepare. He has a rough categorisation of 'fast' (under 15 minutes, including
delivery), 'regular' (15 minutes to half an hour), and 'worth the wait' (over half an hour) total
time to door for each dish.
Although all the actual ordering will be done through the website, Bill wants to print a
booklet for each restaurant, so they can have it available to their in-house customers for
advertising.
Below are several queries and reports that Bill has requested the database must be able to
support. There may well be many others as Bill analyses his business and plans for the future;
therefore, you should design for flexibility.The database will have to support at least the following querying and reporting requirements:
1. All the details of an order for a particular customer. The driver needs this to pick up the
dishes from the restaurant, and to confirm with the customer on delivery.
2. All the vegetarian dishes that can be delivered to the customer in less than half an hour.
3. The details of the orders for a particular restaurant on a particular date.
4. A list of all the vegan restaurants and the names, description and prices of the dishes they offer.
5. List of all drivers, and the customers (if any) they delivered to on a particular date.
6. List of drivers who are currently free (i.e. not out on a delivery).
7. The total number of orders for each restaurant so far.
8. The booklet which lists the dishes available from a particular restaurant, with their names,
descriptions, course type, prices and delivery time.
What you have to do:
Use the case study description and querying requirements to create an entityrelationship diagram (ERD) for the FineFoods4U database. Your ERD should be able
to be implemented in a relational DBMS.
List and explain any assumptions you have made in creating the data model.
You should use the crow's feet ERD notation we have been using in the lectures, and
should include a legend to explain the notation. You should include attributes in the
ERD, and indicate primary and foreign keys. The use of a drawing tool such as Visio
will make this task easier.
Whichever tool you use, you must copy and paste the ERD into a word-processed
document. This is because your tutor might not have access to the tools you have
used. Please note that hand-drawn ERDs are not acceptable.
Some important things to note:
You should make any assumptions that are required, but must state them clearly.
Obviously, your assumptions should not contradict any of the information already
provided.
Part of understanding a system at sufficient enough detail to model well involves
asking questions. If you are not sure about some detail of the case study, you should
ask on the Discussion Forum in LMS. You can subscribe to the discussion forums so
that you don't miss any messages.
Answer (Partial): FineFoods4U ERD
This is the basic structure of the ERD. I've only shown primary keys and foreign keys for
simplicity here (and so as not to give you a complete solution), but I'll discuss some of the
attributes later.
This is the simplest interpretation of the case:
• Restaurants have potentially many Dishes on offer. They must offer at least one dish,
otherwise they won't be in the system. Each Dish would be from a single restaurant, as
even though different places might offer similar dishes (fish and chips) they are unlikely
to be identical.
• A Dish can appear in many Orders, and each Order would include at least one and
possibly many dishes. We represent this many-to-many relationship with another entity,
DishOrdered.
• A Customer may make many Orders over time. They can register without making an
order. An order is for only a single Customer.
• A Driver might deliver many Orders over time, but each Order is delivered by a single
Driver. There may be drivers in the system who haven't made any deliveries yet.I've used IDs for primary keys throughout. There aren't any single attributes that are likely
to be unique: two restaurants may have the same name, and two dishes may have the same
name. There may be chains of restaurants so that even the combination of
RestaurantName+DishName isn't unique.
Variations:
• Recording multiple addresses for a Customer. The customer would have several
addresses registered, and would choose one of them for an order.
• Assuming that a driver would take orders for different customers on a single delivery
run. Ask if any additional information would need to be stored if this was the case.
• Separate Order and Delivery entities. Several of you did this, with Order and Delivery
related in a 1:1 mandatory relationship. Although this would work, there is nothing to be
gained by separating the entities as both would always be completed for a completed
order delivery.
Dish
PK DishID
DishName
FK1 RestaurantID
Restaurant
PK RestaurantID
RestaurantName
Driver
PK DriverID
Customer
PK CustomerID
Order
PK OrderID
FK1 DriverID
FK2 CustomerID
OrderedDish
PK,FK1 DishID
PK,FK2 OrderIDEntities that SHOULDN'T be included:
• Booklet – the booklet referred to is similar to a report, which can be assembled
dynamically from the information in the other entities when needed.
• Website – this is an implementation decision. At this stage, we are modelling the data
requirements of the system.
• Anything to do with payment – we are told it is out of scope.
Multivalued attributes
Ask whether each attribute you put in an entity will be single valued or could have several
values. For example, if you had an attribute 'Certifications' in Restaurant then it's likely that
it could take more than one value – e.g. it could be certified both Vegan AND Organic.
You can't have a multivalued attribute in a relation, so you need to do something else with it.
• Assume it can only take one value? No, really not a solution.
• Assume it can only take a maximum of 2/3/4 values, and have attributes Cert1, Cert2,
Cert3, … Not a solution. Why 2/3/4? Not extendible to more values without changing the
structure of the table.
• Have a long text string for the field and try to search within it? … Gets very messy. Not a
solution.
• Have a weak entity Restaurant_Certification in a 1:N relationship with Restaurant?
Restaurant_Certification would have attributes RestaurantID, CertificationType,
DateCertified [etc]). This could work, as it would allow you to add as many certifications
as you like for each restaurant. The main issue with this solution is that it doesn't enforce
any consistency in the CertificationType attribute – there is nothing to stop typos such as
Orgnanic, resulting in incorrect information returned from queries.
• Have an entity Certification in a M:N relationship with Restaurant, with an intersection
entity Restaurant_Certification? Certification would have attributes CertificationID(PK),
CertificationType. Restaurant_Certification would have PK
RestaurantID+CertificationID, and other attributes could be included in this entity. Thisis the best solution, as it enforces consistency of CertificationType through the foreign
key. This comes at the expense of increased complexity and more joins, so Bill will have
to weigh up better data against possibly reduced performance.
Constraints on attributes
If you've got an attribute that takes a single value (such as Suburb in Restaurant) but which
has a fixed set of allowable values, you need to be able to enforce that constraint. This isn't
strictly part of a conceptual ERD, but it is worth thinking ahead to the options for the logical
design and implementation.
• Use a CHECK constraint. This is best for a small, limited set of values that isn't going to
change, or you will need to alter the constraint every time a new value comes along.
• Use a 'lookup table'. This is a table containing only the attribute for the values plus a PK
attribute, e.g. (SuburbID, Suburb). The attribute Suburb in Restaurant is then replaced
with SuburbID as FK. The two tables are joined to find the restaurant suburb name.
Again, this enforces consistency at the expense of increased complexity, but is a good
solution where there may be a large or increasing set of values. It's also a good solution
if the same constraint applies to more than one table in the database.
• The lookup table solution can be simplified to include only the attribute (in this example,
Suburb), in the lookup table. Suburb is PK of the lookup table, and the attribute Suburb
in Restaurant is defined as FK referencing it. Consistency is still enforced through
referential integrity, but no joins are required.Part 1: Revised ERD and schema (10 marks)
Bill is pleased with your work so far and asked you to go on to implement your design. He
has made a few clarifications and additions to the specifications that you should note:
Bill's trial of the system has been very successful and he now wants to broaden his
service into other suburbs as well. He has also recruited more drivers, with the
expectation that there will be drivers available in each suburb. However, customers
will still only be able to have orders delivered from restaurants in the same suburb.
Bill needs to know whether his meals are being delivered on time, so the database will
need to be able to provide information on requested and actual delivery times/dates.
a) Create and submit the ERD for this database that you are going to use as the basis of your
implementation.
b) Include a one or two paragraph explanation as to the changes you have made to the ERD
on the basis of your feedback from Assignment 1 and/or as a result of having to support the
transactions and views described in this assignment.
c) Show the relational schema in 3NF that will be the basis of your implemented design.
Show your relations using the following convention: RELATION_NAME (PrimaryKey,
Attribute, Attribute … ForeignKey)
Part 2: Data dictionary (20 marks)
Create a data dictionary for your database. This should include:
a) For each table: a definition of each column (attribute), consisting of the column name,
brief description of what it represents, its data type and size, domain (allowable values), any
default value, whether it is required, and any constraints (primary key, foreign key). You can
follow the examples in the textbook for the View Ridge Gallery tables, e.g. p299 tables
labelled 'Column characteristics'b) For each of the columns that is a foreign key, give the appropriate referential integrity
rules (i.e. the "on delete…. ; on update" etc actions that should apply when the corresponding
primary key is altered). The appropriate action should be included whether or not there is a
statement in Oracle to implement it.
c) Any business rules (enterprise constraints) that should apply to the database as a whole.
Note that your data dictionary must be consistent with your ERD and schema.
Part 3: Implementation (30 marks)
Implement the database in Oracle SQLPlus on arion.murdoch.edu.au. Note the following:
a) All tables should be created as per your ERD and data dictionary; the marker will check
your ERD against your tables. You do NOT need to include the SQL CREATE TABLE
statements that you used to create the tables.
b) All entity and referential integrity constraints should be created and appropriately named.
c) All columns (attributes) should be of an appropriate data type/size and be set as required or
not as appropriate.
d) All domain constraints should be implemented.
e) All tables should be populated with sample data that will allow the marker to test that
your database fulfils the application requirements as specified and support the transactions
and views listed below. Also provide the sample data in your Word document.
f) SELECT, UPDATE and DELETE permissions should be GRANTED on all database
objects (particularly tables and views) to the user MARKERTL. This is most important. If
you do not grant this permission, the marker will not be able to mark this part of your
assignment.Part 4: Views (40 marks)
Create VIEWS for the following in Oracle (views should be named as ViewA, ViewB etc).
You should also provide the CREATE VIEW statements you used to create the views in
your Word document.
ViewA All the details of an order for a particular customer. The driver needs this to pick up
the dishes from the restaurant, and to confirm with the customer on delivery.
ViewB All the vegetarian dishes that can be delivered to customers in a particular suburb in
less than half an hour.
ViewC The details of the orders for a particular restaurant on a particular date.
ViewD A list of all the vegan restaurants and the names, description and prices of the
dishes they offer.
ViewE List of all drivers, and the customers (if any) they delivered to on a particular date.
ViewF List of drivers who are currently available (i.e. not out on a delivery) in a particular
suburb.
ViewG The total number of orders for each restaurant so far (i.e. since FineFoods4U
commenced).
ViewH The 'booklet' which lists all the dishes available from a particular restaurant, with
their names, descriptions, course type, prices and delivery time. (Note you do not have to
create the booklet itself, just provide the information for it.)
ViewI The number of orders from each suburb in the previous month, in descending order.
ViewJ The number of orders in each suburb that were delivered later than requested in a
particular month, and the average time by which they were late.
Note that where the requirement is for "a particular" suburb/month/restaurant/etc, assume for
this assignment the view definition includes a specific value such as 'Murdoch' or
'September' (although, obviously, it should work for all relevant values).Please note the following about the marking of this assignment:
The marker will view your documentation and then match your documentation to
your implementation. This means for example, that tables, columns and constraints
should be named in your database as they are in your documentation. Relationships
defined in your ERD should be defined in your database using foreign keys.
The marker will view the sample data in your tables.
The marker will execute each of the views created for Part 4 above.
AGAIN, please ensure that you GRANT the appropriate privileges on all relevant
objects (tables and views) to the user MARKERTL. If you do not do this, the marker
will not be able to mark part of your assignment (and you may be awarded 0 for this
section).